diff -Naur ns-3.24.1/AUTHORS ns-3.25/AUTHORS
--- ns-3.24.1/AUTHORS	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/AUTHORS	2016-03-23 21:36:52.000000000 -0700
@@ -1,3 +1,4 @@
+John Abraham (john.abraham.in@gmail.com)
 Alexander Afanasyev (alexander.afanasyev@ucla.edu)
 Rohit Agarwal (mindprince@gmail.com)
 Kirill Andreev (andreev@iitp.ru)
@@ -34,6 +35,7 @@
 Luca Costantino (luca.costantino@gmail.com)
 Matthieu Coudron (matthieu.coudron@lip6.fr)
 Alexander D'souza (moijes12@gmail.com)
+Ankit Deepak (adadeepak8@gmail.com)
 SÃ©bastien Deronne (sebastien.deronne@gmail.com)
 Craig Dowell (craigdo@ee.washington.edu)
 Gilaras Drakeson (gilaras@gmail.com)
@@ -67,6 +69,7 @@
 Kim HÃ¸jgaard-Hansen (kimrhh@gmail.com)
 Chris Hood (chood8@gatech.edu)
 Blake Hurd (naimorai@gmail.com)
+Pasquale Imputato (p.imputato@gmail.com)
 ishan (ishan.chhabra@gmail.com)
 Mohamed Amine Ismail (amine.ismail@inria.fr, iamine@udcast.com)
 Jared Ivey (j.ivey@gatech.edu)
@@ -76,9 +79,10 @@
 Liu Jian (liujatp@gmail.com)
 Piotr Jurkiewicz (piotr.jerzy.jurkiewicz@gmail.com)
 Evgeny Kalishenko (ydginster@gmail.com)
+Tanmay Kathpalia (tanmay.kathpalia@landisgyr.com)
 Konstantinos Katsaros (dinos.katsaros@gmail.com)
 Morteza Kheirkhah (m.kheirkhah@sussex.ac.uk)
-Flavio Kobuta (flaviokubota@gmail.com)
+Flavio Kubota (flaviokubota@gmail.com)
 Joe Kopena (tjkopena@cs.drexel.edu)
 Christopher Kosecki (christopher.l.kosecki.ctr@mail.mil)
 Aleksey Kovalenko (kovalenko@iitp.ru)
diff -Naur ns-3.24.1/bindings/python/ns3modulegen_core_customizations.py ns-3.25/bindings/python/ns3modulegen_core_customizations.py
--- ns-3.24.1/bindings/python/ns3modulegen_core_customizations.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/bindings/python/ns3modulegen_core_customizations.py	2016-03-23 21:36:52.000000000 -0700
@@ -240,7 +240,17 @@
             else:
                 kwargs = {}
             try:
-                arguments.append(Parameter.new(str(param_ctype), arg_name, **kwargs))
+                param = Parameter.new(str(param_ctype), arg_name, **kwargs)
+                cpp_class = getattr(param, "cpp_class", None)
+                if isinstance(cpp_class, cppclass.CppClass):
+                    # check if the "helper class" can be constructed
+                    if cpp_class.helper_class is not None:
+                        cpp_class.helper_class.generate_forward_declarations(
+                            MemoryCodeSink())
+                        if cpp_class.helper_class.cannot_be_constructed:
+                            cpp_class.helper_class = None
+                            cpp_class.helper_class_disabled = True
+                arguments.append(param)
             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),
diff -Naur ns-3.24.1/bindings/python/wscript ns-3.25/bindings/python/wscript
--- ns-3.24.1/bindings/python/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/bindings/python/wscript	2016-03-23 21:36:52.000000000 -0700
@@ -14,7 +14,7 @@
 # after = TaskGen.after
 
 # https://github.com/gjcarneiro/pybindgen
-REQUIRED_PYBINDGEN_VERSION = '0.17.0.post41+ngd10fa60'
+REQUIRED_PYBINDGEN_VERSION = '0.17.0.post49+ng0e4e3bc'
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 RUN_ME=-3
diff -Naur ns-3.24.1/CHANGES.html ns-3.25/CHANGES.html
--- ns-3.24.1/CHANGES.html	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/CHANGES.html	2016-03-23 21:36:52.000000000 -0700
@@ -51,6 +51,76 @@
 us a note on ns-developers mailing list.</p>
 
 <hr>
+<h1>Changes from ns-3.24 to ns-3.25</h1>
+<h2>New API:</h2>
+<ul>
+  <li> In 'src/internet/test', a new environment is created to test TCP properties.</li>
+  <li> The 'src/traffic-control' module has been added, with new API for adding and configuring queue discs and packet filters.</li>
+  <li> Related to traffic control, a new interface has been added to the
+NetDevice to provide a queue interface to access device queue state and
+register callbacks used for flow control.</li>
+  <li> In 'src/wifi', a new rate control (MinstrelHT) has been added for
+802.11n/ac modes.</li>
+  <li> In 'src/wifi', a new helper (WifiMacHelper) is added and is a merged helper from all previously existing MAC helpers (NqosWifiMacHelper, QosWifiMacHelper, HtWifiMacHelper and VhtWifiMacHelper).</li>
+  <li> It is now possible to use RIPv2 in IPv4 network simulations.</li>
+</ul>
+<h2>Changes to existing API:</h2>
+<ul>
+  <li>TCP-related changes:
+    <ul>
+      <li>Classes TcpRfc793, TcpTahoe, and TcpReno were removed.</li>
+      <li>The 'TcpNewReno' log component was effectively replaced by 'TcpCongestionOps'
+      <li>TCP Hybla and HighSpeed have been added.</li>
+      <li>Added the concept of Congestion State Machine inside TcpSocketBase.</li>
+      <li>Merged Fast Recovery and Fast Retransmit inside TcpSocketBase.</li>
+      <li>Some member variables have been moved from TcpSocketBase inside TcpSocketState. Attributes are not touched.</li>
+      <li>Congestion control splitted from TcpSocketBase as subclass of TcpCongestionOps.</li>
+      <li>Added Rx and Tx callbacks on TcpSocketBase.</li>
+      <li>Added BytesInFlight trace source on TcpSocketBase. The trace is updated when the implementation requests the value.</li>
+      <li>Added attributes about the number of connection and data retransmission attempts.</li>
+    </ul>
+  </li>
+  <li> ns-3 is now capable of serializing SLL (a.k.a. cooked) headers.
+       This is used in DCE to allow the generation of pcap directly readable by wireshark.
+  </li>
+  <li> In the WifiHelper class in the wifi module, Default has been declared deprecated. This is now immediately handled by the constructor of the class.</li>
+  <li> The API for configuring 802.11n/ac aggregation has been modified to be more user friendly. As any MAC layer attributes, aggregation parameters can now also be configured through WifiMacHelper::SetType. </li>
+  <li> The class Queue and subclasses derived from it have been changed in two ways:
+  <ul>
+    <li>Queues no longer enqueue simple Packets but instead enqueue QueueItem objects, which include Packet but possibly other information such as headers.</li>
+    <li>The attributes governing the mode of operation (packets or bytes) and the maximum size have been moved to base class Queue.</li>
+  </ul>
+  </li>
+  <li> Users of advanced queues (RED, CoDel) who have been using them directly in the NetDevice will need to adjust to the following changes:
+    <ul>
+      <li> RED and CoDel are no longer specializations of the Queue classe, but are now specializations of the new QueueDisc class. This means that RED and CoDel can now be installed in the context of the new Traffic Control layer instead of as queues in (some) NetDevices. The reason for such a change is to make the ns-3 stack much more similar to that of real operating systems (Linux has been taken as a reference).  Queuing disciplines such as RED and CoDel can now be tested with all the NetDevices, including WifiNetDevices. </li>
+      <li> NetDevices still use queues to buffer packets. The only subclass of Queue currently available for this purpose is DropTailQueue. If one wants to approximate the old behavior, one needs to set the DropTailQueue MaxPackets attribute to very low values, e.g., 1.</li>
+      <li> The Traffic Control layer features a mechanism by which packets dropped by the NetDevice are requeued in the queue disc (more precisely: if NetDevice::Send returns false, the packet is requeued), so that they are retransmitted later. This means that the MAC drop traces may include packets that have not been actually lost, because they have been dropped by the device, requeued by the traffic control layer and successfully retransmitted. To get the correct number of packets that have been actually lost, one has to subtract the number of packets requeued from the number of packets dropped as reported by the MAC drop trace. </li>
+    </ul>
+  </li>
+</ul>
+<h2>Changes to build system:</h2>
+<ul>
+  <li> Waf was upgraded to 1.8.19</li>
+  <li> A new waf build option, --check-profile, was added to allow users to check the currently active build profile.  It is discussed in bug 2202 in the tracker.</li>
+</ul>
+<h2>Changed behavior:</h2>
+This section is for behavioral changes to the models that were not due to a bug fix.
+<ul>
+  <li>TCP behavioral changes:
+    <ul>
+      <li>TCP closes connection after a number of failed segment retries,
+        rather than trying indefinitely. The maximum number of retries, for both SYN
+        attempts and data attempts, is controlled by attributes.</li>
+      <li>Congestion algorithms not compliant with Fast Retransmit
+        and Fast Recovery (TCP 793, Reno, Tahoe) have been removed.</li>
+    </ul>
+  </li>
+  <li> 802.11n/ac MPDU aggregation is now enabled by default for both AC_BE and AC_VI.</li>
+  <li> The introduction of the traffic control layer leads to some additional buffering by default in the stack; when a device queue fills up, additional packets become enqueued at the traffic control layer.</li>
+</ul>
+
+<hr>
 <h1>Changes from ns-3.23 to ns-3.24</h1>
 <h2>New API:</h2>
 <ul>
diff -Naur ns-3.24.1/doc/doxygen.conf ns-3.25/doc/doxygen.conf
--- ns-3.24.1/doc/doxygen.conf	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/doxygen.conf	2016-03-23 21:36:52.000000000 -0700
@@ -40,7 +40,7 @@
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         = "3.24"
+PROJECT_NUMBER         = "3-dev"
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff -Naur ns-3.24.1/doc/main.h ns-3.25/doc/main.h
--- ns-3.24.1/doc/main.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/main.h	2016-03-23 21:36:52.000000000 -0700
@@ -55,6 +55,7 @@
  *     - spectrum
  *     - stats
  *     - tap-bridge
+ *     - traffic-control
  *     - test
  *     - topology-read
  *     - uan
diff -Naur ns-3.24.1/doc/manual/source/attributes.rst ns-3.25/doc/manual/source/attributes.rst
--- ns-3.24.1/doc/manual/source/attributes.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/manual/source/attributes.rst	2016-03-23 21:36:52.000000000 -0700
@@ -41,8 +41,8 @@
 | :cpp:class:`ObjectFactory`            | Affects all instances created with  |
 |                                       | the factory.                        |
 +---------------------------------------+-------------------------------------+
-| :cpp:func:`XHelperSetAttribute ()`    | Affects all instances created by    |
-|                                       | the helper.                         |
+| Helper methods with (string/          | Affects all instances created by    |
+| AttributeValue) parameter pairs       | the helper.                         |
 +---------------------------------------+-------------------------------------+
 | | :cpp:func:`MyClass::SetX ()`        | Alters this particular instance.    |
 | | :cpp:func:`Object::SetAttribute ()` | Generally this is the only form     |
@@ -691,12 +691,12 @@
 
 Let's assume our new class, called :cpp:class:`ns3::MyMobility`,
 is a type of mobility model.  First, the class should inherit from
-it's parent class, :cpp:class:`ns3::MobilityModel`.
+its parent class, :cpp:class:`ns3::MobilityModel`.
 In the ``my-mobility.h`` header file::
 
     namespace ns3 {
     
-    class MyClass : public MobilityModel
+    class MyMobility : public MobilityModel
     {
 
 This requires we declare the :cpp:func:`GetTypeId ()` function. 
diff -Naur ns-3.24.1/doc/manual/source/conf.py ns-3.25/doc/manual/source/conf.py
--- ns-3.24.1/doc/manual/source/conf.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/manual/source/conf.py	2016-03-23 21:36:52.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.24'
+version = 'ns-3.25'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.24'
+release = 'ns-3.25'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.24.1/doc/manual/source/logging.rst ns-3.25/doc/manual/source/logging.rst
--- ns-3.24.1/doc/manual/source/logging.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/manual/source/logging.rst	2016-03-23 21:36:52.000000000 -0700
@@ -424,6 +424,11 @@
   Run some example programs with all log components turned on (e.g. 
   ``NS_LOG="***"``).
 
+* Use an explicit cast for any variable of type uint8_t or int8_t, 
+  e.g., ``NS_LOG_LOGIC ("Variable i is " << static_cast<int> (i));``.
+  Without the cast, the integer is interpreted as a char, and the result
+  will be most likely not in line with the expectations.
+  This is a well documented C++ 'feature'.
 
 
 
diff -Naur ns-3.24.1/doc/manual/source/python.rst ns-3.25/doc/manual/source/python.rst
--- ns-3.24.1/doc/manual/source/python.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/manual/source/python.rst	2016-03-23 21:36:52.000000000 -0700
@@ -77,7 +77,7 @@
 
 .. sourcecode:: bash
 
-  $ ./waf --shell
+  $ ./waf shell
   $ python examples/wireless/mixed-wireless.py
 
 and the other is to use the --pyrun option to waf:
@@ -90,14 +90,14 @@
 
 .. sourcecode:: bash
 
-  $ ./waf --shell
+  $ ./waf shell
   $ gdb --args python examples/wireless/mixed-wireless.py
 
 To run your own Python script that calls |ns3| and that has this path, ``/path/to/your/example/my-script.py``, do the following:
 
 .. sourcecode:: bash
 
-  $ ./waf --shell
+  $ ./waf shell
   $ python /path/to/your/example/my-script.py
 
 Caveats
diff -Naur ns-3.24.1/doc/models/Makefile ns-3.25/doc/models/Makefile
--- ns-3.24.1/doc/models/Makefile	2015-09-28 20:17:55.000000000 -0700
+++ ns-3.25/doc/models/Makefile	2016-03-23 21:36:52.000000000 -0700
@@ -17,6 +17,7 @@
 	source/internet-models.rst \
 	source/network.rst \
 	source/emulation-overview.rst \
+	source/traffic-control.rst \
 	$(SRC)/antenna/doc/source/antenna.rst \
 	$(SRC)/antenna/doc/source/antenna-design.rst \
 	$(SRC)/antenna/doc/source/antenna-user.rst \
@@ -61,7 +62,7 @@
 	$(SRC)/internet/doc/ipv6.rst \
 	$(SRC)/internet/doc/routing-overview.rst \
 	$(SRC)/internet/doc/tcp.rst \
-	$(SRC)/internet/doc/codel.rst \
+	$(SRC)/internet-apps/doc/internet-apps.rst \
 	$(SRC)/mobility/doc/mobility.rst \
 	$(SRC)/olsr/doc/olsr.rst \
 	$(SRC)/openflow/doc/openflow-switch.rst \
@@ -74,6 +75,11 @@
 	$(SRC)/wimax/doc/wimax.rst \
 	$(SRC)/uan/doc/uan.rst \
 	$(SRC)/topology-read/doc/topology.rst \
+	$(SRC)/traffic-control/doc/traffic-control-layer.rst \
+	$(SRC)/traffic-control/doc/queue-discs.rst \
+	$(SRC)/traffic-control/doc/pfifo-fast.rst \
+	$(SRC)/traffic-control/doc/red.rst \
+	$(SRC)/traffic-control/doc/codel.rst \
 	$(SRC)/spectrum/doc/spectrum.rst \
 	$(SRC)/stats/doc/adaptor.rst \
 	$(SRC)/stats/doc/aggregator.rst \
@@ -109,6 +115,8 @@
 	$(SRC)/internet/doc/routing-specialization.dia \
 	$(SRC)/wifi/doc/source/figures/WifiArchitecture.dia \
 	$(SRC)/wifi/doc/source/figures/snir.dia \
+	$(SRC)/wifi/doc/source/figures/clear-channel.eps \
+	$(SRC)/wifi/doc/source/figures/nist-frame-success-rate.eps \
 	$(SRC)/wimax/doc/WimaxArchitecture.dia \
 	$(SRC)/lte/doc/source/figures/epc-ctrl-arch.dia \
 	$(SRC)/lte/doc/source/figures/epc-data-flow-dl.dia \
@@ -261,6 +269,8 @@
 	$(SRC)/spectrum/doc/spectrum-tv-rand-geo-points.eps \
 	$(SRC)/spectrum/doc/spectrum-tv-8vsb.png \
 	$(SRC)/spectrum/doc/spectrum-tv-cofdm.png \
+	$(SRC)/traffic-control/doc/classful-queue-disc.dia \
+	$(SRC)/traffic-control/doc/multi-queue-aware-queue-disc.dia \
 	$(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 \
@@ -347,12 +357,16 @@
 	$(FIGURES)/auvmobility-classes.eps \
 	$(FIGURES)/spectrum-analyzer-example.eps \
 	$(FIGURES)/spectrum-tv-rand-geo-points.eps \
+	$(FIGURES)/classful-queue-disc.eps \
+	$(FIGURES)/multi-queue-aware-queue-disc.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 
+	$(FIGURES)/802-15-4-psr-distance.eps \
+	$(FIGURES)/clear-channel.eps \
+	$(FIGURES)/nist-frame-success-rate.eps
 
 # rescale pdf figures as necessary
 $(FIGURES)/testbed.pdf_width = 5in
@@ -405,6 +419,8 @@
 $(FIGURES)/spectrum-tv-rand-geo-points.pdf_width = 8cm
 $(FIGURES)/lr-wpan-primitives.pdf_width = 3in
 $(FIGURES)/lr-wpan-arch.pdf_width = 2in
+$(FIGURES)/clear-channel.pdf_width = 12cm
+$(FIGURES)/nist-frame-success-rate.pdf_width = 12cm
 
 IMAGES_PNG = ${IMAGES_EPS:.eps=.png}
 IMAGES_PDF = ${IMAGES_EPS:.eps=.pdf}
diff -Naur ns-3.24.1/doc/models/source/conf.py ns-3.25/doc/models/source/conf.py
--- ns-3.24.1/doc/models/source/conf.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/models/source/conf.py	2016-03-23 21:36:52.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.24'
+version = 'ns-3.25'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.24'
+release = 'ns-3.25'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.24.1/doc/models/source/emulation-overview.rst ns-3.25/doc/models/source/emulation-overview.rst
--- ns-3.24.1/doc/models/source/emulation-overview.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/models/source/emulation-overview.rst	2016-03-23 21:36:52.000000000 -0700
@@ -11,7 +11,7 @@
 system, different capabilities can be provided.  For instance, the
 FdNetDevice can be associated with an underlying packet socket to provide
 emulation capabilities.  This allows |ns3| simulations
-to send data on a "real" network. The second kind, called a ``Tap``
+to send data on a "real" network. The second kind, called a ``TapBridge``
 ``NetDevice`` allows a "real" host to participate in an |ns3| simulation as if
 it were one of the simulated nodes. An |ns3| simulation may be constructed with
 any combination of simulated or emulated devices.
@@ -80,7 +80,8 @@
 behavior of native applications and protocol suites in the presence of large
 simulated |ns3| networks.
 
-.. toctree::
+For more details:
+
+* :doc:`FdNetDevice <fd-net-device>` chapter.
+* :doc:`TapBridge <tap>` chapter.
 
-  fd-net-device
-  tap
diff -Naur ns-3.24.1/doc/models/source/index.rst ns-3.25/doc/models/source/index.rst
--- ns-3.24.1/doc/models/source/index.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/models/source/index.rst	2016-03-23 21:36:52.000000000 -0700
@@ -31,6 +31,7 @@
    dsr
    emulation-overview
    energy
+   fd-net-device
    flow-monitor
    internet-models
    lr-wpan
@@ -45,7 +46,9 @@
    propagation
    spectrum
    sixlowpan
+   tap
    topology
+   traffic-control
    uan
    wave
    wifi
diff -Naur ns-3.24.1/doc/models/source/internet-models.rst ns-3.25/doc/models/source/internet-models.rst
--- ns-3.24.1/doc/models/source/internet-models.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/models/source/internet-models.rst	2016-03-23 21:36:52.000000000 -0700
@@ -1,5 +1,5 @@
-Internet Models
----------------
+Internet Models (IP, TCP, Routing, UDP, Internet Applications, Codel)
+---------------------------------------------------------------------
 
 .. toctree::
 
@@ -8,4 +8,4 @@
    ipv6
    routing-overview
    tcp
-   codel
+   internet-apps
diff -Naur ns-3.24.1/doc/models/source/traffic-control.rst ns-3.25/doc/models/source/traffic-control.rst
--- ns-3.24.1/doc/models/source/traffic-control.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/doc/models/source/traffic-control.rst	2016-03-23 21:36:52.000000000 -0700
@@ -0,0 +1,10 @@
+Traffic Control Layer
+---------------------------------------------------------------------
+
+.. toctree::
+
+   traffic-control-layer
+   queue-discs
+   pfifo-fast
+   red
+   codel
diff -Naur ns-3.24.1/doc/tutorial/source/conceptual-overview.rst ns-3.25/doc/tutorial/source/conceptual-overview.rst
--- ns-3.24.1/doc/tutorial/source/conceptual-overview.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/tutorial/source/conceptual-overview.rst	2016-03-23 21:36:53.000000000 -0700
@@ -308,12 +308,14 @@
 of the documentation.  A good place to start is the ``NS-3 Modules``
 "book" in the |ns3| navigation tree.  If you expand ``Modules`` 
 you will see a list of |ns3| module documentation.  The concept of 
-module here ties directly into the module include files discussed above.  The |ns3| logging subsystem is discussed in the ``C++ Constructs Used by All Modules`` 
-section, so go ahead and expand that documentation node.  Now, expand the 
-``Debugging`` book and then select the ``Logging`` page.
+module here ties directly into the module include files discussed above.  The |ns3| logging subsystem is discussed in the :ref:`UsingLogging` section, so
+we'll get to it later in this tutorial, but you can find out about the above
+statement by looking at the ``Core`` module, then expanding the 
+``Debugging tools`` book, and then selecting the ``Logging`` page.  Click
+on ``Logging``.
 
 You should now be looking at the Doxygen documentation for the Logging module.
-In the list of ``#define``'s at the top of the page you will see the entry
+In the list of ``Macros``'s at the top of the page you will see the entry
 for ``NS_LOG_COMPONENT_DEFINE``.  Before jumping in, it would probably be 
 good to look for the "Detailed Description" of the logging module to get a 
 feel for the overall operation.  You can either scroll down or select the
@@ -469,7 +471,7 @@
     pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
 
 tells the ``PointToPointHelper`` to use the value "2ms" (two milliseconds)
-as the value of the transmission delay of every point to point channel it 
+as the value of the propagation delay of every point to point channel it 
 subsequently creates.
 
 NetDeviceContainer
diff -Naur ns-3.24.1/doc/tutorial/source/conf.py ns-3.25/doc/tutorial/source/conf.py
--- ns-3.24.1/doc/tutorial/source/conf.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/tutorial/source/conf.py	2016-03-23 21:36:53.000000000 -0700
@@ -48,9 +48,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.24'
+version = 'ns-3.25'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.24'
+release = 'ns-3.25'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur ns-3.24.1/doc/tutorial/source/getting-started.rst ns-3.25/doc/tutorial/source/getting-started.rst
--- ns-3.24.1/doc/tutorial/source/getting-started.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/tutorial/source/getting-started.rst	2016-03-23 21:36:53.000000000 -0700
@@ -96,17 +96,17 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget http://www.nsnam.org/release/ns-allinone-3.24.tar.bz2
-  $ tar xjf ns-allinone-3.24.tar.bz2
+  $ wget http://www.nsnam.org/release/ns-allinone-3.25.tar.bz2
+  $ tar xjf ns-allinone-3.25.tar.bz2
 
-If you change into the directory ``ns-allinone-3.24`` you should see a
+If you change into the directory ``ns-allinone-3.25`` you should see a
 number of files and directories:
 
 ::
 
   $ ls
-  bake      constants.py   ns-3.24                            README
-  build.py  netanim-3.106  pybindgen-0.17.0.post41+ngd10fa60  util.py
+  bake      constants.py   ns-3.25                            README
+  build.py  netanim-3.107  pybindgen-0.17.0.post49+ng0e4e3bc  util.py
 
 You are now ready to build the base |ns3| distribution and may skip ahead
 to the section on building |ns3|.
@@ -166,10 +166,10 @@
 
 There are a few configuration targets available:
 
-1.  ``ns-3.24``:  the module corresponding to the release; it will download
+1.  ``ns-3.25``:  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.24``:  the module that includes other optional features
+3.  ``ns-allinone-3.25``:  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
@@ -187,7 +187,7 @@
 `"ns-3 Releases"
 <http://www.nsnam.org/releases>`_
 web page and clicking on the latest release link.  We'll proceed in
-this tutorial example with ``ns-3.24``.
+this tutorial example with ``ns-3.25``.
 
 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.
@@ -213,7 +213,7 @@
 
 Step into the workspace directory and type the following into your shell::
 
-  $ ./bake.py configure -e ns-3.24
+  $ ./bake.py configure -e ns-3.25
 
 Next, we'l ask bake to check whether we have enough tools to download
 various components.  Type::
@@ -264,15 +264,15 @@
    >> Searching for system dependency g++ - OK
    >> Searching for system dependency qt4 - OK
    >> Downloading pygccxml - OK
-   >> Downloading netanim-3.106 - OK
-   >> Downloading pybindgen-0.17.0.post41+ngd10fa60 (target directory:pybindgen) - OK
-   >> Downloading ns-3.24 - OK
+   >> Downloading netanim-3.107 - OK
+   >> Downloading pybindgen-0.17.0.post49+ng0e4e3bc (target directory:pybindgen) - OK
+   >> Downloading ns-3.25 - OK
 
 The above suggests that five sources have been downloaded.  Check the
 ``source`` directory now and type ``ls``; one should see::
 
   $ ls
-  gccxml  netanim-3.106  ns-3.24  pybindgen  pygccxml  pygccxml-1.0.0.zip
+  gccxml  netanim-3.107  ns-3.25  pybindgen  pygccxml  pygccxml-1.0.0.zip
 
 You are now ready to build the |ns3| distribution.
 
@@ -291,7 +291,7 @@
 
 If you downloaded
 using a tarball you should have a directory called something like 
-``ns-allinone-3.24`` under your ``~/workspace`` directory.  
+``ns-allinone-3.25`` under your ``~/workspace`` directory.  
 Type the following::
 
   $ ./build.py --enable-examples --enable-tests
@@ -307,35 +307,34 @@
 script builds the various pieces you downloaded.  Eventually you should see the
 following::
 
-   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.24/ns-3.24/build'
+   Waf: Leaving directory `/path/to/workspace/ns-allinone-3.25/ns-3.25/build'
    'build' finished successfully (6m25.032s)
   
    Modules built:
-   antenna                   aodv                      applications             
-   bridge                    buildings                 config-store             
-   core                      csma                      csma-layout              
+   antenna                   aodv                      applications           
+   bridge                    buildings                 config-store            
+   core                      csma                      csma-layout             
    dsdv                      dsr                       energy                   
    fd-net-device             flow-monitor              internet                 
-   lr-wpan                   lte                       mesh                     
-   mobility                  mpi                       netanim (no Python)      
-   network                   nix-vector-routing        olsr                     
-   point-to-point            point-to-point-layout     propagation              
-   sixlowpan                 spectrum                  stats                    
-   tap-bridge                test (no Python)          topology-read            
-   uan                       virtual-net-device        wave
-   wifi                      wimax                   
+   internet-apps             lr-wpan                   lte                      
+   mesh                      mobility                  mpi                      
+   netanim (no Python)       network                   nix-vector-routing       
+   olsr                      openflow (no Python)      point-to-point           
+   point-to-point-layout     propagation               sixlowpan                
+   spectrum                  stats                     tap-bridge               
+   test (no Python)          topology-read             traffic-control          
+   uan                       virtual-net-device        visualizer               
+   wave                      wifi                      wimax                    
    
-   Modules not built (see ns-3 tutorial for explanation):
-   brite                     click                     openflow                 
-   visualizer               
+Modules not built (see ns-3 tutorial for explanation):
+brite                     click   
 
-   Leaving directory `./ns-3.24'
+   Leaving directory `./ns-3.25'
 
 Regarding the portion about modules not built::
 
   Modules not built (see ns-3 tutorial for explanation):
-  brite                     click                     openflow                 
-  visualizer               
+  brite                     click                     
 
 This just means that some |ns3| modules that have dependencies on
 outside libraries may not have been built, or that the configuration
@@ -357,9 +356,9 @@
 
   >> Building gccxml-ns3 - OK
   >> Building pygccxml - OK
-  >> Building netanim-3.106 - OK
-  >> Building pybindgen-0.17.0.post41+ngd10fa60 - OK
-  >> Building ns-3.24 - OK
+  >> Building netanim-3.107 - OK
+  >> Building pybindgen-0.17.0.post49+ng0e4e3bc - OK
+  >> Building ns-3.25 - OK
 
 *Hint:  you can also perform both steps, download and build, by calling 'bake.py deploy'.*
 
@@ -504,6 +503,13 @@
 Okay, sorry, I made you build the |ns3| part of the system twice,
 but now you know how to change the configuration and build optimized code.
 
+A command exists for checking which profile is currently active
+for an already configured project:
+
+  $ ./waf --check-profile
+  Waf: Entering directory `/path/to/ns-3-allinone/ns-3.25/build'
+  Build profile: debug
+
 The build.py script discussed above supports also the ``--enable-examples``
 and ``enable-tests`` arguments, but in general, does not directly support
 other waf options; for example, this will not work:
diff -Naur ns-3.24.1/doc/tutorial-pt-br/source/conf.py ns-3.25/doc/tutorial-pt-br/source/conf.py
--- ns-3.24.1/doc/tutorial-pt-br/source/conf.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/doc/tutorial-pt-br/source/conf.py	2016-03-23 21:36:52.000000000 -0700
@@ -50,9 +50,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = 'ns-3.24'
+version = 'ns-3.25'
 # The full version, including alpha/beta/rc tags.
-release = 'ns-3.24'
+release = 'ns-3.25'
 
 # The language for content autogenerated by . Refer to babel documentation
 # for a list of supported languages.
diff -Naur ns-3.24.1/examples/energy/energy-model-example.cc ns-3.25/examples/energy/energy-model-example.cc
--- ns-3.24.1/examples/energy/energy-model-example.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/energy/energy-model-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -189,8 +189,8 @@
   wifiPhy.SetChannel (wifiChannelPtr);
 
   /** MAC layer **/
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a MAC and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",
                                 StringValue (phyMode), "ControlMode",
                                 StringValue (phyMode));
diff -Naur ns-3.24.1/examples/energy/energy-model-with-harvesting-example.cc ns-3.25/examples/energy/energy-model-with-harvesting-example.cc
--- ns-3.24.1/examples/energy/energy-model-with-harvesting-example.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/energy/energy-model-with-harvesting-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -241,8 +241,8 @@
   wifiPhy.SetChannel (wifiChannelPtr);
 
   /** MAC layer **/
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a MAC and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",
                                 StringValue (phyMode), "ControlMode",
                                 StringValue (phyMode));
diff -Naur ns-3.24.1/examples/ipv6/fragmentation-ipv6.cc ns-3.25/examples/ipv6/fragmentation-ipv6.cc
--- ns-3.24.1/examples/ipv6/fragmentation-ipv6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/fragmentation-ipv6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,7 +32,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
diff -Naur ns-3.24.1/examples/ipv6/fragmentation-ipv6-two-MTU.cc ns-3.25/examples/ipv6/fragmentation-ipv6-two-MTU.cc
--- ns-3.24.1/examples/ipv6/fragmentation-ipv6-two-MTU.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/fragmentation-ipv6-two-MTU.cc	2016-03-23 21:36:53.000000000 -0700
@@ -34,7 +34,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
diff -Naur ns-3.24.1/examples/ipv6/icmpv6-redirect.cc ns-3.25/examples/ipv6/icmpv6-redirect.cc
--- ns-3.24.1/examples/ipv6/icmpv6-redirect.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/icmpv6-redirect.cc	2016-03-23 21:36:53.000000000 -0700
@@ -44,7 +44,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
diff -Naur ns-3.24.1/examples/ipv6/loose-routing-ipv6.cc ns-3.25/examples/ipv6/loose-routing-ipv6.cc
--- ns-3.24.1/examples/ipv6/loose-routing-ipv6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/loose-routing-ipv6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -42,7 +42,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-header.h"
 
 using namespace ns3;
diff -Naur ns-3.24.1/examples/ipv6/ping6.cc ns-3.25/examples/ipv6/ping6.cc
--- ns-3.24.1/examples/ipv6/ping6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/ping6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -33,7 +33,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 
 using namespace ns3;
 
diff -Naur ns-3.24.1/examples/ipv6/radvd.cc ns-3.25/examples/ipv6/radvd.cc
--- ns-3.24.1/examples/ipv6/radvd.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/radvd.cc	2016-03-23 21:36:53.000000000 -0700
@@ -35,7 +35,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 
 #include "ns3/radvd.h"
 #include "ns3/radvd-interface.h"
diff -Naur ns-3.24.1/examples/ipv6/radvd-two-prefix.cc ns-3.25/examples/ipv6/radvd-two-prefix.cc
--- ns-3.24.1/examples/ipv6/radvd-two-prefix.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/radvd-two-prefix.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
 #include "ns3/radvd.h"
diff -Naur ns-3.24.1/examples/ipv6/wscript ns-3.25/examples/ipv6/wscript
--- ns-3.24.1/examples/ipv6/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -1,30 +1,30 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_program('icmpv6-redirect', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('icmpv6-redirect', ['csma', 'internet', 'internet-apps'])
     obj.source = 'icmpv6-redirect.cc'
 
-    obj = bld.create_ns3_program('ping6', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('ping6', ['csma', 'internet', 'internet-apps'])
     obj.source = 'ping6.cc'
     
-    obj = bld.create_ns3_program('radvd', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('radvd', ['csma', 'internet', 'internet-apps'])
     obj.source = 'radvd.cc'
 
-    obj = bld.create_ns3_program('radvd-two-prefix', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('radvd-two-prefix', ['csma', 'internet', 'internet-apps'])
     obj.source = 'radvd-two-prefix.cc'
 
     obj = bld.create_ns3_program('test-ipv6', ['point-to-point', 'internet'])
     obj.source = 'test-ipv6.cc'
     
-    obj = bld.create_ns3_program('fragmentation-ipv6', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('fragmentation-ipv6', ['csma', 'internet', 'internet-apps'])
     obj.source = 'fragmentation-ipv6.cc'
     
-    obj = bld.create_ns3_program('fragmentation-ipv6-two-MTU', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('fragmentation-ipv6-two-MTU', ['csma', 'internet', 'internet-apps'])
     obj.source = 'fragmentation-ipv6-two-MTU.cc'
 
-    obj = bld.create_ns3_program('loose-routing-ipv6', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('loose-routing-ipv6', ['csma', 'internet', 'internet-apps'])
     obj.source = 'loose-routing-ipv6.cc'
 
-    obj = bld.create_ns3_program('wsn-ping6', ['lr-wpan', 'internet', 'sixlowpan', 'mobility', 'applications'])
+    obj = bld.create_ns3_program('wsn-ping6', ['lr-wpan', 'internet', 'sixlowpan', 'mobility', 'internet-apps'])
     obj.source = 'wsn-ping6.cc'
 
diff -Naur ns-3.24.1/examples/ipv6/wsn-ping6.cc ns-3.25/examples/ipv6/wsn-ping6.cc
--- ns-3.24.1/examples/ipv6/wsn-ping6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/ipv6/wsn-ping6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,7 @@
 #include "ns3/internet-module.h"
 #include "ns3/sixlowpan-module.h"
 #include "ns3/lr-wpan-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/mobility-module.h"
 
 using namespace ns3;
diff -Naur ns-3.24.1/examples/routing/global-routing-multi-switch-plus-router.cc ns-3.25/examples/routing/global-routing-multi-switch-plus-router.cc
--- ns-3.24.1/examples/routing/global-routing-multi-switch-plus-router.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/routing/global-routing-multi-switch-plus-router.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,810 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 - Chip Webb
+ *
+ * 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: Chip Webb  <ns3 (at) chipwebb.com>
+ *
+ */
+
+// ###################################################################### //
+//                         Network topology                               //
+// ---------------------------------------------------------------------- //
+//                                                                        //
+// This example shows two L2 LANs connected by a WAN link and illustrates //
+// a network that has multiple L2 switches between L3 routers.            //
+//                                                                        //
+// It serves as a test case to verify a patch to global-router-interface  //
+// that fixes a previous bug (#2102 in the ns-3 tracker) but is also      //
+// another example program.                                               //
+//                                                                        //
+// The LANs are "top" [192.168.1/24] and "bottom" [192.168.2/24].         //
+// Each LAN network is interconnected by several L2 switches, and each    //
+// LAN has its own router to act as a gateway with the WAN. Each LAN      //
+// has two endpoints upon which is installed a UDP echo client or server  //
+// that are used to test connectivity over the LANs & WAN.                //
+//                                                                        //
+// One pair of UDP endpoints (t3 and b3) have LAN connections with only   //
+// one switch between them and their local routers. This path works with  //
+// unpatched ns3 code (3.24 & earlier) as well as with the patch applied. //
+//                                                                        //
+// Another pair of endpoints (t2 and b2) have LAN connections with        //
+// a chain of multiple switches between them and their local router.      //
+// This path will only work after applying the associated patch.          //
+//                                                                        //
+// The LAN links are modeled by half-duplex Ethernet CSMA links which     //
+// have command-line-configurable data rate and latency.                  //
+//                                                                        //
+// There are two types of CSMA links: 100Mbit and 10Mbit. The 100Mbit     //
+// links are called csmaX, are denoted by [X] in the diagram and can      //
+// be controlled with the --csmaXRate and --csmaXDelay command line args. //
+// The 10Mbit links are called csmaY, are denoted by [Y] in the diagram   //
+// and can be controlled with the --csmaYRate and --csmaYDelay command    //
+// line arguments. Both the top and bottom LAN have a mixture of          //
+// 100Mbit/s and 10Mbit/s links.                                          //
+//                                                                        //
+// The WAN is modeled by a point-to-point link which has configurable     //
+// data rate and latency. Unlike many typical home/work networks,         //
+// the routers do not perform NAT.                                        //
+//                                                                        //
+// The WAN link is denoted by [P] in the diagram, and the                 //
+// speed and latency can be set from the command line with the            //
+// --p2pRate and --p2pDelay options. The default for this link is 5Mbit/s //
+// and 50ms delay                                                         //
+//                                                                        //
+// Note: Names in parenthesis after NetDevices are pcap tap locations.    //
+//                                                                        //
+// ---------------------------------------------------------------------- //
+//                                                                        //
+//   192.168.  192.168.                                                   //
+//    .1.2      .1.3                                                      //
+//  ---------  ---------                                                  //
+//  |  t2   |  |  t3   |                                                  //
+//  |  UDP  |  |  UDP  |                                                  //
+//  |  echo |  |  echo |    Node t2 is a UDP echo client (multi-switch)   //
+//  | client|  | server|    Node t3 is a UDP echo server (single-switch)  //
+//  ---------  ---------                                                  //
+//   CSMA(t2)   CSMA(t3)                                                  //
+//     [X]        [X]                                                     //
+//     [X]        [X]                                                     //
+//    CSMA        [X]                                                     //
+//  ---------     [X]                                                     //
+//  |  ts4  |     [X]        Nodes ts1, ts2, ts3 and ts4 are L2 switches  //
+//  |  (sw) |     [X]        The top LAN is subnet 192.168.1.*            //
+//  ---------     [X]                                                     //
+//    CSMA        [X]        The long chain of switches is designed       //
+//     [Y]        [X]        to test whether global-router-interface      //
+//     [Y]        [X]        can fully enumerate an IP subnet that has    //
+//    CSMA        [X]        multiple interconnected L2 switches.         //
+//  ---------     [X]        The problem is documented in Bug #2102.      //
+//  |  ts3  |     [X]                                                     //
+//  |  (sw) |     [X]                                                     //
+//  ---------     [X]                                                     //
+//    CSMA        [X]                                                     //
+//     [X]        [X]                                                     //
+//     [X]        [X]                                                     //
+//    CSMA        [X]                                                     //
+//  ---------     [X]                                                     //
+//  |  ts2  |     [X]                                                     //
+//  |  (sw) |     [X]                                                     //
+//  ---------     [X]                                                     //
+//    CSMA        [X]                                                     //
+//     [Y]        [X]                                                     //
+//     [Y]        [X]                                                     //
+//    CSMA       CSMA                                                     //
+//   ------------------                                                   //
+//   |  ts1 (switch)  |                                                   //
+//   ------------------                                                   //
+//          CSMA                                                          //
+//           [Y]                                                          //
+//           [Y]                                                          //
+//          CSMA(trlan)    192.168.1.1                                    //
+//   ------------------                                                   //
+//   |  tr (router)   |    Node tr is an L3 router                        //
+//   ------------------      (between 192.168.1.* & 76.1.1.*)             //
+//           P2P(trwan)    76.1.1.1                                       //
+//           [P]                                                          //
+//           [P]                                                          //
+//           [P]                                                          //
+//           [P]                                                          //
+//           [P]           The WAN is 76.1.1.*                            //
+//           [P]                                                          //
+//           [P]                                                          //
+//           [P]                                                          //
+//           P2P(brwan)    76.1.1.2                                       //
+//   ------------------                                                   //
+//   |  br (router)   |    Node br is an L3 router                        //
+//   ------------------      (between 192.168.2.* & 76.1.1.*)             //
+//          CSMA(brlan)    192.168.2.1                                    //
+//           [X]                                                          //
+//           [X]                                                          //
+//          CSMA                                                          //
+//   ------------------     Nodes bs1 to bs5 are L2 switches              //
+//   |  bs1 (switch)  |     The bottom LAN is subnet 192.168.2.*          //
+//   ------------------                                                   //
+//    CSMA       CSMA                                                     //
+//     [Y]        [Y]                                                     //
+//     [Y]        [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//  ---------     [Y]                                                     //
+//  | bs2   |     [Y]                                                     //
+//  | (sw)  |     [Y]                                                     //
+//  ---------     [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//     [X]        [Y]                                                     //
+//     [X]        [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//  ---------     [Y]                                                     //
+//  | bs3   |     [Y]                                                     //
+//  | (sw)  |     [Y]                                                     //
+//  ---------     [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//     [Y]        [Y]                                                     //
+//     [Y]        [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//  ---------     [Y]                                                     //
+//  | bs4   |     [Y]                                                     //
+//  | (sw)  |     [Y]                                                     //
+//  ---------     [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//     [X]        [Y]                                                     //
+//     [X]        [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//  ---------     [Y]                                                     //
+//  | bs5   |     [Y]                                                     //
+//  | (sw)  |     [Y]                                                     //
+//  ---------     [Y]                                                     //
+//    CSMA        [Y]                                                     //
+//     [Y]        [Y]                                                     //
+//     [Y]        [Y]                                                     //
+//    CSMA(b2)   CSMA(b3)                                                 //
+//  ---------  ---------                                                  //
+//  |  b2   |  |  b3   |                                                  //
+//  |  UDP  |  |  UDP  |                                                  //
+//  |  echo |  |  echo |    Node b2 is a UDP echo server (multi-switch)   //
+//  | server|  | client|    Node b3 is a UDP echo client (single-switch)  //
+//  ---------  ---------                                                  //
+//   192.168.  192.168.                                                   //
+//    .2.2      .2.3                                                      //
+//                                                                        //
+// ---------------------------------------------------------------------- //
+//                            Explanation                                 //
+// ---------------------------------------------------------------------- //
+//                                                                        //
+// UDP packet flows are configured between nodes on the top and bottom    //
+// LANs (using UDP echo client & server).                                 //
+//                                                                        //
+// The network carrying the "multi switch" UDP flow is connected with     //
+// multiple L2 switches between L3 nodes so it should only work if the    //
+// global-router-interface source code properly supports bridging.        //
+//                                                                        //
+// The network carrying the "single switch" UDP flow is connected with    //
+// only one L2 switch between L3 nodes so it should work with or          //
+// without the patch                                                      //
+//                                                                        //
+// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  //
+// Traffic summary:                                                       //
+// ---------------------------------------------------------------------- //
+//                                                                        //
+// - UDP flow  from t2 (192.168.1.2) to b2 (192.168.2.2) [Multi Switch]   //
+//             from b3 (192.168.2.3) to t3 (192.168.1.3) [Single Switch]  //
+//                                                                        //
+// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  //
+// Node List & IP addresses assigned during simulation                    //
+// ---------------------------------------------------------------------- //
+//      t2     : 192.168.1.2 : Top multi-switch UDP echo client           //
+//      t3     : 192.168.1.3 : Top single-switch UDP echo server          //
+//             :                                                          //
+//      ts1    : <no IP>     : Top switch 1 (bridge)                      //
+//      ts2    : <no IP>     : Top switch 2 (bridge)                      //
+//      ts3    : <no IP>     : Top switch 3 (bridge)                      //
+//      ts4    : <no IP>     : Top switch 4 (bridge)                      //
+//             :                                                          //
+//      tr     : 192.168.1.1 : Router connecting top LAN (192.168.1.*)    //
+//             : 76.1.1.1    :                to the WAN                  //
+//             :                                                          //
+//      br     : 76.1.1.2    : Router connecting the WAN                  //
+//             : 192.168.2.1 :                to bot LAN (192.168.2.*)    //
+//             :                                                          //
+//      bs1    : <no IP>     : Bottom switch 1 (bridge)                   //
+//      bs2    : <no IP>     : Bottom switch 2 (bridge)                   //
+//      bs3    : <no IP>     : Bottom switch 3 (bridge)                   //
+//      bs4    : <no IP>     : Bottom switch 4 (bridge)                   //
+//      bs5    : <no IP>     : Bottom switch 5 (bridge)                   //
+//             :                                                          //
+//      b2     : 192.168.2.2 : Bottom multi-switch UDP echo server        //
+//      b3     : 192.168.2.3 : Bottom single-switch UDP echo client       //
+//             :                                                          //
+// ---------------------------------------------------------------------- //
+// Author:     Chip Webb <ns3 (a) chipwebb dot com>                       //
+// ###################################################################### //
+
+#include <iostream>
+#include <fstream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/bridge-module.h"
+#include "ns3/csma-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/internet-module.h"
+
+using namespace ns3;
+
+// ########################################################################
+// Main routine
+// ########################################################################
+NS_LOG_COMPONENT_DEFINE ("GlobalRoutingMultiSwitchPlusRouter");
+
+#define vssearch(loc,vec) std::find ((vec).begin (), (vec).end (), (loc)) != (vec).end ()
+
+int
+main (int argc, char *argv[])
+{
+  // ----------------------------------------------------------------------
+  // Default values for command line arguments
+  // ----------------------------------------------------------------------
+  bool        verbose              = true;
+
+  int         simDurationSeconds   = 60;
+
+  bool        enableUdpMultiSW     = true;
+  bool        enableUdpSingleSW    = true;
+
+  std::string pcapLocations        = "";
+  uint32_t    snapLen              = PcapFile::SNAPLEN_DEFAULT;
+
+  std::string csmaXLinkDataRate    = "100Mbps";
+  std::string csmaXLinkDelay       = "500ns";
+
+  std::string csmaYLinkDataRate    = "10Mbps";
+  std::string csmaYLinkDelay       = "500ns";
+
+  std::string p2pLinkDataRate      = "5Mbps";
+  std::string p2pLinkDelay         = "50ms";
+
+  uint16_t    udpEchoPort          = 9;  // The well-known UDP echo port
+
+
+  // ----------------------------------------------------------------------
+  // Create command line options and get them
+  // ----------------------------------------------------------------------
+  CommandLine cmd;
+
+  cmd.Usage    ("NOTE: valid --pcap arguments are: 't2,t3,b2,b3,trlan,trwan,brlan,brwan'");
+
+  cmd.AddValue ("verbose",      "Enable printing informational messages",        verbose);
+
+  cmd.AddValue ("duration",     "Duration of simulation.",                       simDurationSeconds);
+
+  cmd.AddValue ("udpMultiSW",   "Enable udp over multi-switch links",            enableUdpMultiSW);
+  cmd.AddValue ("udpSingleSW",  "Enable udp over single-switch links",           enableUdpSingleSW);
+
+  cmd.AddValue ("pcap",         "Comma separated list of PCAP Locations to tap", pcapLocations);
+  cmd.AddValue ("snapLen",      "PCAP packet capture length",                    snapLen);
+
+  cmd.AddValue ("csmaXRate",    "CSMA X Link data rate",                         csmaXLinkDataRate);
+  cmd.AddValue ("csmaXDelay",   "CSMA X Link delay",                             csmaXLinkDelay);
+
+  cmd.AddValue ("csmaYRate",    "CSMA Y Link data rate",                         csmaYLinkDataRate);
+  cmd.AddValue ("csmaYDelay",   "CSMA Y Link delay",                             csmaYLinkDelay);
+
+  cmd.AddValue ("p2pRate",      "P2P Link data rate",                            p2pLinkDataRate);
+  cmd.AddValue ("p2pDelay",     "P2P Link delay",                                p2pLinkDelay);
+
+  cmd.Parse (argc, argv);
+
+  // --------------------------------------------------------------------
+  // Users may find it convenient to turn on explicit debugging
+  // for selected modules; the below lines suggest how to do this
+  // --------------------------------------------------------------------
+  if (verbose)
+    {
+      LogComponentEnable ("GlobalRoutingMultiSwitchPlusRouter", LOG_LEVEL_INFO);
+    }
+
+
+  // ======================================================================
+  // Define the list of valid PCAP taps
+  // ----------------------------------------------------------------------
+  std::vector<std::string> pcapTaps;
+  pcapTaps.push_back ("t2");              // multi-switch  UDP echo client
+  pcapTaps.push_back ("t3");              // single-switch UDP echo server
+  pcapTaps.push_back ("b2");              // multi-switch  UDP echo server
+  pcapTaps.push_back ("b3");              // single-switch UDP echo client
+  pcapTaps.push_back ("trlan");           // top router    LAN side
+  pcapTaps.push_back ("trwan");           // top router    WAN side
+  pcapTaps.push_back ("brlan");           // bottom router LAN side
+  pcapTaps.push_back ("brwan");           // bottom router WAN side
+
+  // ----------------------------------------------------------------------
+  // Parse the pcapLocations string into pcapLocationVec
+  // ----------------------------------------------------------------------
+  std::vector<std::string> pcapLocationVec;
+  if (pcapLocations != "")
+    {
+      std::stringstream sStream (pcapLocations);
+
+      while ( sStream.good () )
+        {
+          std::string substr;
+          getline ( sStream, substr, ',' );
+          if (vssearch (substr,pcapTaps))
+            {
+              pcapLocationVec.push_back ( substr );
+            }
+          else
+            {
+              NS_LOG_ERROR ("WARNING: Unrecognized PCAP location: <" + substr + ">");
+            }
+        }
+
+      for (std::vector<std::string>::const_iterator
+           ploc = pcapLocationVec.begin ();
+           ploc  != pcapLocationVec.end ();
+           ++ploc)
+        {
+          NS_LOG_INFO ("PCAP capture at: <" + *ploc + ">");
+        }
+    }
+
+
+  // ======================================================================
+  // Set some simulator-wide values
+  // ======================================================================
+
+  // ----------------------------------------------------------------------
+  // Set PCAP packet capture maximum packet length
+  // ----------------------------------------------------------------------
+  if (snapLen != PcapFile::SNAPLEN_DEFAULT)
+    {
+      Config::SetDefault ("ns3::PcapFileWrapper::CaptureSize",   UintegerValue (snapLen));
+    }
+
+  // ======================================================================
+  // Create the nodes & links required for the topology shown in comments above.
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("INFO: Create nodes.");    // - - - - - - - - - - - - - - - -
+                                          // Node IP     : Description
+                                          // - - - - - - - - - - - - - - - -
+  Ptr<Node> t2  = CreateObject<Node> ();  // 192.168.1.2 : Top multi-switch udp echo client
+  Ptr<Node> t3  = CreateObject<Node> ();  // 192.168.1.3 : Top single-switch   udp echo server
+                                          //             :
+  Ptr<Node> ts1 = CreateObject<Node> ();  // <no IP>     : Top switch #1 (bridge)
+  Ptr<Node> ts2 = CreateObject<Node> ();  // <no IP>     : Top switch #2 (bridge)
+  Ptr<Node> ts3 = CreateObject<Node> ();  // <no IP>     : Top switch #3 (bridge)
+  Ptr<Node> ts4 = CreateObject<Node> ();  // <no IP>     : Top switch #4 (bridge)
+                                          //             :
+  Ptr<Node> tr  = CreateObject<Node> ();  // 192.168.1.1 : Router connecting top LAN & WAN
+                                          // 76.1.1.1    :
+                                          //             :
+  Ptr<Node> br  = CreateObject<Node> ();  // 76.1.1.2    : Router connecting WAN & bottom LANs
+                                          // 192.168.2.1 :
+                                          //             :
+  Ptr<Node> bs1 = CreateObject<Node> ();  // <no IP>     : Bottom switch #1 (bridge)
+  Ptr<Node> bs2 = CreateObject<Node> ();  // <no IP>     : Bottom switch #2 (bridge)
+  Ptr<Node> bs3 = CreateObject<Node> ();  // <no IP>     : Bottom switch #3 (bridge)
+  Ptr<Node> bs4 = CreateObject<Node> ();  // <no IP>     : Bottom switch #4 (bridge)
+  Ptr<Node> bs5 = CreateObject<Node> ();  // <no IP>     : Bottom switch #5 (bridge)
+                                          //             :
+  Ptr<Node> b2  = CreateObject<Node> ();  // 192.168.2.2 : Bottom multi-switch udp echo server
+
+  Ptr<Node> b3  = CreateObject<Node> ();  // 192.168.2.3 : Bottom single-switch   udp echo client
+                                          // - - - - - - - - - - - - - - - -
+
+  // ----------------------------------------------------------------------
+  // Give the nodes names
+  // ----------------------------------------------------------------------
+  Names::Add ("t2",  t2);
+  Names::Add ("t3",  t3);
+  Names::Add ("ts1", ts1);
+  Names::Add ("ts2", ts2);
+  Names::Add ("ts3", ts3);
+  Names::Add ("ts4", ts4);
+  Names::Add ("tr",  tr);
+  Names::Add ("br",  br);
+  Names::Add ("bs1", bs1);
+  Names::Add ("bs2", bs2);
+  Names::Add ("bs3", bs3);
+  Names::Add ("bs4", bs4);
+  Names::Add ("bs5", bs5);
+  Names::Add ("b2",  b2);
+  Names::Add ("b3",  b3);
+
+  // ======================================================================
+  // Create CSMA links to use for connecting LAN nodes together
+  // ----------------------------------------------------------------------
+
+  // ----------------------------------------
+  // CSMA [X]
+  // ----------------------------------------
+  NS_LOG_INFO ("L2: Create a " <<
+               csmaXLinkDataRate << " " <<
+               csmaXLinkDelay << " CSMA link for csmaX for LANs.");
+  CsmaHelper csmaX;
+  csmaX.SetChannelAttribute ("DataRate", StringValue (csmaXLinkDataRate));
+  csmaX.SetChannelAttribute ("Delay",    StringValue (csmaXLinkDelay));
+
+  // ----------------------------------------
+  // CSMA [Y]
+  // ----------------------------------------
+  NS_LOG_INFO ("L2: Create a " <<
+               csmaYLinkDataRate << " " <<
+               csmaYLinkDelay << " CSMA link for csmaY for LANs.");
+  CsmaHelper csmaY;
+  csmaY.SetChannelAttribute ("DataRate", StringValue (csmaYLinkDataRate));
+  csmaY.SetChannelAttribute ("Delay",    StringValue (csmaYLinkDelay));
+
+  // ----------------------------------------------------------------------
+  // Now, connect the top LAN nodes together with csma links.
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L2: Connect nodes on top LAN together with half-duplex CSMA links.");
+
+  // Multi-switch top LAN chain: t2-ts4-ts3-ts2-ts1-tr
+  NetDeviceContainer link_t2_ts4   = csmaX.Install (NodeContainer (t2,  ts4));
+  NetDeviceContainer link_ts4_ts3  = csmaY.Install (NodeContainer (ts4, ts3));
+  NetDeviceContainer link_ts3_ts2  = csmaX.Install (NodeContainer (ts3, ts2));
+  NetDeviceContainer link_ts2_ts1  = csmaY.Install (NodeContainer (ts2, ts1));
+
+  // Single-switch top LAN link: t3-ts1-tr
+  NetDeviceContainer link_t3_ts1   = csmaX.Install (NodeContainer (t3,  ts1));
+
+  // Common link for top LAN between ts1 and tr (for t2 and t3 to get to tr)
+  NetDeviceContainer link_tr_ts1   = csmaY.Install (NodeContainer (tr,  ts1));
+
+  // ----------------------------------------------------------------------
+  // And repeat above steps to connect the bottom LAN nodes together
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L2: Connect nodes on bottom LAN together with half-duplex CSMA links.");
+
+  // Multi-switch bottom LAN chain: b2-bs5-bs4-bs3-bs2-bs1-br
+  NetDeviceContainer link_b2_bs5   = csmaY.Install (NodeContainer (b2,  bs5));
+  NetDeviceContainer link_bs5_bs4  = csmaX.Install (NodeContainer (bs5, bs4));
+  NetDeviceContainer link_bs4_bs3  = csmaY.Install (NodeContainer (bs4, bs3));
+  NetDeviceContainer link_bs3_bs2  = csmaX.Install (NodeContainer (bs3, bs2));
+  NetDeviceContainer link_bs2_bs1  = csmaY.Install (NodeContainer (bs2, bs1));
+
+  // Single-switch bottom LAN link: b3-bs1-br
+  NetDeviceContainer link_b3_bs1   = csmaY.Install (NodeContainer (b3,  bs1));
+
+  // Common link for bottom LAN between bs1 and br (for b2 and b3 to get to br)
+  NetDeviceContainer link_br_bs1   = csmaX.Install (NodeContainer (br,  bs1));
+
+
+  // ======================================================================
+  // Create a point-to-point link for connecting WAN nodes together
+  // (this type of link is full-duplex)
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L2: Create a " <<
+               p2pLinkDataRate << " " <<
+               p2pLinkDelay    << " Point-to-Point link for the WAN.");
+
+  PointToPointHelper p2p;
+  p2p.SetDeviceAttribute  ("DataRate", StringValue (p2pLinkDataRate));
+  p2p.SetChannelAttribute ("Delay",    StringValue (p2pLinkDelay));
+
+  // ----------------------------------------------------------------------
+  // Now, connect top router to bottom router with a p2p WAN link
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L2: Connect the routers together with the Point-to-Point WAN link.");
+
+  NetDeviceContainer link_tr_br;
+  link_tr_br = p2p.Install (NodeContainer (tr,br));
+
+  // ======================================================================
+  // Manually create the list of NetDevices for each switch
+  // ----------------------------------------------------------------------
+
+  // Top Switch 4 NetDevices
+  NetDeviceContainer ts4nd;
+  ts4nd.Add (link_t2_ts4.Get (1));
+  ts4nd.Add (link_ts4_ts3.Get (0));
+
+  // Top Switch 3 NetDevices
+  NetDeviceContainer ts3nd;
+  ts3nd.Add (link_ts4_ts3.Get (1));
+  ts3nd.Add (link_ts3_ts2.Get (0));
+
+  // Top Switch 2 NetDevices
+  NetDeviceContainer ts2nd;
+  ts2nd.Add (link_ts3_ts2.Get (1));
+  ts2nd.Add (link_ts2_ts1.Get (0));
+
+  // Top Switch 1 NetDevices
+  NetDeviceContainer ts1nd;
+  ts1nd.Add (link_ts2_ts1.Get (1));
+  ts1nd.Add (link_t3_ts1.Get (1));
+  ts1nd.Add (link_tr_ts1.Get (1));
+
+
+  // Bottom Switch 1 NetDevices
+  NetDeviceContainer bs1nd;
+  bs1nd.Add (link_br_bs1.Get (1));
+  bs1nd.Add (link_bs2_bs1.Get (1));
+  bs1nd.Add (link_b3_bs1.Get (1));
+
+  // Bottom Switch 2 NetDevices
+  NetDeviceContainer bs2nd;
+  bs2nd.Add (link_bs2_bs1.Get (0));
+  bs2nd.Add (link_bs3_bs2.Get (1));
+
+  // Bottom Switch 3 NetDevices
+  NetDeviceContainer bs3nd;
+  bs3nd.Add (link_bs3_bs2.Get (0));
+  bs3nd.Add (link_bs4_bs3.Get (1));
+
+  // Bottom Switch 4 NetDevices
+  NetDeviceContainer bs4nd;
+  bs4nd.Add (link_bs4_bs3.Get (0));
+  bs4nd.Add (link_bs5_bs4.Get (1));
+
+  // Bottom Switch 5 NetDevices
+  NetDeviceContainer bs5nd;
+  bs5nd.Add (link_bs5_bs4.Get (0));
+  bs5nd.Add (link_b2_bs5.Get (1));
+
+
+  // ======================================================================
+  // Install bridging code on each switch
+  // ----------------------------------------------------------------------
+  BridgeHelper bridge;
+
+  bridge.Install (ts1, ts1nd);
+  bridge.Install (ts2, ts2nd);
+  bridge.Install (ts3, ts3nd);
+  bridge.Install (ts4, ts4nd);
+
+  bridge.Install (bs1, bs1nd);
+  bridge.Install (bs2, bs2nd);
+  bridge.Install (bs3, bs3nd);
+  bridge.Install (bs4, bs4nd);
+  bridge.Install (bs5, bs5nd);
+
+  // ======================================================================
+  // Install the L3 internet stack  (TCP/IP)
+  // ----------------------------------------------------------------------
+  InternetStackHelper ns3IpStack;
+
+  // ----------------------------------------------------------------------
+  // Install the L3 internet stack on UDP endpoints
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Install the ns3 IP stack on udp client and server nodes.");
+  NodeContainer endpointNodes (t2, t3,  b2, b3);
+  ns3IpStack.Install (endpointNodes);
+
+  // ----------------------------------------------------------------------
+  // Install the L3 internet stack on routers.
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Install the ns3 IP stack on routers.");
+  NodeContainer routerNodes (tr, br);
+  ns3IpStack.Install (routerNodes);
+
+  // ======================================================================
+  // Assign top LAN IP addresses
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Assign top LAN IP Addresses.");
+
+  NetDeviceContainer topLanIpDevices;        // - - - - - -- - - - - - -
+  topLanIpDevices.Add (link_tr_ts1.Get (0));  // NOTE: order matters here
+  topLanIpDevices.Add (link_t2_ts4.Get (0));  //       for IP address
+  topLanIpDevices.Add (link_t3_ts1.Get (0));  //       assignment
+                                              // - - - - - -- - - - - - -
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("192.168.1.0", "255.255.255.0");
+  ipv4.Assign  (topLanIpDevices);
+
+  // ----------------------------------------------------------------------
+  // Assign bottom LAN IP addresses
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Assign bottom LAN IP Addresses.");
+
+  NetDeviceContainer botLanIpDevices;        // - - - - - -- - - - - - -
+  botLanIpDevices.Add (link_br_bs1.Get (0));  // NOTE: order matters here
+  botLanIpDevices.Add (link_b2_bs5.Get (0));  //       for IP address
+  botLanIpDevices.Add (link_b3_bs1.Get (0));  //       assignment
+                                              // - - - - - -- - - - - - -
+
+  ipv4.SetBase ("192.168.2.0", "255.255.255.0");
+  ipv4.Assign  (botLanIpDevices);
+
+  // ----------------------------------------------------------------------
+  // Assign WAN IP addresses
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Assign WAN IP Addresses.");
+
+  ipv4.SetBase ("76.1.1.0", "255.255.255.0");
+  ipv4.Assign  (link_tr_br);
+
+
+  // ======================================================================
+  // Calculate and populate routing tables
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("L3: Populate routing tables.");
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+
+  // ======================================================================
+  // Multi-Switch UDP traffic generation
+  // ----------------------------------------------------------------------
+  ApplicationContainer apps;
+
+  if (enableUdpMultiSW)
+    {
+      // ------------------------------------------------------------------
+      // Install multi-switch UDP echo server on b2
+      // ------------------------------------------------------------------
+      NS_LOG_INFO ("APP: Multi-Switch UDP server (on node b2 of bottom LAN)");
+
+      UdpEchoServerHelper server (udpEchoPort);
+
+      ApplicationContainer serverApp = server.Install (b2);
+      serverApp.Start (Seconds (0.5));
+      serverApp.Stop  (Seconds (simDurationSeconds));
+
+      // ------------------------------------------------------------------
+      // Install multi-switch UDP echo client on t2
+      // ------------------------------------------------------------------
+      NS_LOG_INFO ("APP: Multi-Switch UDP client (on node t2 of top LAN)");
+
+      Time     interPacketInterval = Seconds (0.005);
+      uint32_t packetSize          = 1000;
+      uint32_t maxPacketCount      = (simDurationSeconds - 2.0) / 0.005;
+
+      UdpEchoClientHelper client (Ipv4Address ("192.168.2.2"), udpEchoPort);
+
+      client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+      client.SetAttribute ("Interval",   TimeValue     (interPacketInterval));
+      client.SetAttribute ("PacketSize", UintegerValue (packetSize));
+
+      ApplicationContainer clientApp = client.Install (t2);
+      clientApp.Start (Seconds (0.5));
+      clientApp.Stop  (Seconds (simDurationSeconds));
+    }
+
+  // ======================================================================
+  // Single-Switch UDP traffic generation
+  // ----------------------------------------------------------------------
+  if (enableUdpSingleSW)
+    {
+      // ------------------------------------------------------------------
+      // Install single-switch UDP echo server on t3
+      // ------------------------------------------------------------------
+      NS_LOG_INFO ("APP: Single-Switch UDP server (on node t3 of top LAN)");
+
+      UdpEchoServerHelper server (udpEchoPort);
+
+      ApplicationContainer serverApp = server.Install (t3);
+      serverApp.Start (Seconds (0.5));
+      serverApp.Stop  (Seconds (simDurationSeconds));
+
+      // ------------------------------------------------------------------
+      // Install single-switch UDP echo client on b3
+      // ------------------------------------------------------------------
+      NS_LOG_INFO ("APP: Single-Switch UDP client (on node b3 bottom LAN)");
+
+      Time     interPacketInterval = Seconds (0.005);
+      uint32_t packetSize          = 1000;
+      uint32_t maxPacketCount      = (simDurationSeconds - 2.0) / 0.005;
+
+      UdpEchoClientHelper client (Ipv4Address ("192.168.1.3"), udpEchoPort);
+
+      client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount));
+      client.SetAttribute ("Interval",   TimeValue     (interPacketInterval));
+      client.SetAttribute ("PacketSize", UintegerValue (packetSize));
+
+      ApplicationContainer clientApp = client.Install (b3);
+      clientApp.Start (Seconds (0.5));
+      clientApp.Stop  (Seconds (simDurationSeconds));
+    }
+
+
+  // ======================================================================
+  // Print routing tables at T=0.1
+  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+  // NOTE: Node 0 and Node 13 must have non-empty tables (except for local 
+  //       loopback and local LAN) if routing is operating correctly.
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("Set up to print routing tables at T=0.1s");
+
+  Ptr<OutputStreamWrapper> routingStream =
+    Create<OutputStreamWrapper> ("global-routing-multi-switch-plus-router.routes", std::ios::out);
+
+  Ipv4GlobalRoutingHelper g;
+  g.PrintRoutingTableAllAt (Seconds (0.1), routingStream);
+
+
+  // ======================================================================
+  // Configure PCAP traces
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("Configure PCAP Tracing (if any configured).");
+
+  // - - - - - - - - - - - - - -
+  // multi-switch UDP echo client
+  // - - - - - - - - - - - - - -
+  if (vssearch ("t2",pcapLocationVec))
+    {
+      csmaX.EnablePcap ("t2.pcap",    topLanIpDevices.Get (1), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // multi-switch UDP echo server
+  // - - - - - - - - - - - - - -
+  if (vssearch ("b2",pcapLocationVec))
+    {
+      csmaY.EnablePcap ("b2.pcap",    botLanIpDevices.Get (1), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // single-switch UDP echo client
+  // - - - - - - - - - - - - - -
+  if (vssearch ("b3",pcapLocationVec))
+    {
+      csmaY.EnablePcap ("b3.pcap",    botLanIpDevices.Get (2), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // single-switch UDP echo server
+  // - - - - - - - - - - - - - -
+  if (vssearch ("t3",pcapLocationVec))
+    {
+      csmaX.EnablePcap ("t3.pcap",    topLanIpDevices.Get (2), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // top router, LAN side
+  // - - - - - - - - - - - - - -
+  if (vssearch ("trlan",pcapLocationVec))
+    {
+      csmaY.EnablePcap ("trlan.pcap", topLanIpDevices.Get (0), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // bottom router, LAN side
+  // - - - - - - - - - - - - - -
+  if (vssearch ("brlan",pcapLocationVec))
+    {
+      csmaX.EnablePcap ("brlan.pcap", botLanIpDevices.Get (0), true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // top router, WAN side
+  // - - - - - - - - - - - - - -
+  if (vssearch ("trwan",pcapLocationVec))
+    {
+      p2p.EnablePcap ("trwan.pcap",  link_tr_br.Get (0),       true, true);
+    }
+
+  // - - - - - - - - - - - - - -
+  // bottom router, WAN side
+  // - - - - - - - - - - - - - -
+  if (vssearch ("brwan",pcapLocationVec))
+    {
+      p2p.EnablePcap ("brwan.pcap",  link_tr_br.Get (1),       true, true);
+    }
+
+
+  // ======================================================================
+  // Now, do the actual simulation.
+  // ----------------------------------------------------------------------
+  NS_LOG_INFO ("Run Simulation for " << simDurationSeconds << " seconds.");
+
+  Simulator::Stop (Seconds (simDurationSeconds));
+  Simulator::Run ();
+
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+
+}
diff -Naur ns-3.24.1/examples/routing/manet-routing-compare.cc ns-3.25/examples/routing/manet-routing-compare.cc
--- ns-3.24.1/examples/routing/manet-routing-compare.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/routing/manet-routing-compare.cc	2016-03-23 21:36:53.000000000 -0700
@@ -257,8 +257,8 @@
   wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
diff -Naur ns-3.24.1/examples/routing/ripng-simple-network.cc ns-3.25/examples/routing/ripng-simple-network.cc
--- ns-3.24.1/examples/routing/ripng-simple-network.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/routing/ripng-simple-network.cc	2016-03-23 21:36:53.000000000 -0700
@@ -55,7 +55,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 #include "ns3/ipv6-routing-table-entry.h"
 
@@ -162,6 +162,8 @@
 
   Ipv6ListRoutingHelper listRH;
   listRH.Add (ripNgRouting, 0);
+  Ipv6StaticRoutingHelper staticRh;
+  listRH.Add (staticRh, 5);
 
   InternetStackHelper internetv6;
   internetv6.SetIpv4StackInstall (false);
diff -Naur ns-3.24.1/examples/routing/rip-simple-network.cc ns-3.25/examples/routing/rip-simple-network.cc
--- ns-3.24.1/examples/routing/rip-simple-network.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/routing/rip-simple-network.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,258 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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/internet-apps-module.h"
+#include "ns3/ipv4-static-routing-helper.h"
+#include "ns3/ipv4-routing-table-entry.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("RipSimpleRouting");
+
+void TearDownLink (Ptr<Node> nodeA, Ptr<Node> nodeB, uint32_t interfaceA, uint32_t interfaceB)
+{
+  nodeA->GetObject<Ipv4> ()->SetDown (interfaceA);
+  nodeB->GetObject<Ipv4> ()->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)
+    {
+      LogComponentEnableAll (LogLevel (LOG_PREFIX_TIME | LOG_PREFIX_NODE));
+      LogComponentEnable ("RipSimpleRouting", LOG_LEVEL_INFO);
+      LogComponentEnable ("Rip", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv4Interface", LOG_LEVEL_ALL);
+      LogComponentEnable ("Icmpv4L4Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("Ipv4L3Protocol", LOG_LEVEL_ALL);
+      LogComponentEnable ("ArpCache", LOG_LEVEL_ALL);
+      LogComponentEnable ("V4Ping", LOG_LEVEL_ALL);
+    }
+
+  if (SplitHorizon == "NoSplitHorizon")
+    {
+      Config::SetDefault ("ns3::Rip::SplitHorizon", EnumValue (RipNg::NO_SPLIT_HORIZON));
+    }
+  else if (SplitHorizon == "SplitHorizon")
+    {
+      Config::SetDefault ("ns3::Rip::SplitHorizon", EnumValue (RipNg::SPLIT_HORIZON));
+    }
+  else
+    {
+      Config::SetDefault ("ns3::Rip::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 IPv4 and routing");
+  RipHelper ripRouting;
+
+  // Rule of thumb:
+  // Interfaces are added sequentially, starting from 0
+  // However, interface 0 is always the loopback...
+  ripRouting.ExcludeInterface (a, 1);
+  ripRouting.ExcludeInterface (d, 3);
+
+  ripRouting.SetInterfaceMetric (c, 3, 10);
+  ripRouting.SetInterfaceMetric (d, 1, 10);
+
+  Ipv4ListRoutingHelper listRH;
+  listRH.Add (ripRouting, 0);
+//  Ipv4StaticRoutingHelper staticRh;
+//  listRH.Add (staticRh, 5);
+
+  InternetStackHelper internet;
+  internet.SetIpv6StackInstall (false);
+  internet.SetRoutingHelper (listRH);
+  internet.Install (routers);
+
+  InternetStackHelper internetNodes;
+  internetNodes.SetIpv6StackInstall (false);
+  internetNodes.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 IPv4 Addresses.");
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase (Ipv4Address ("10.0.0.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic1 = ipv4.Assign (ndc1);
+
+  ipv4.SetBase (Ipv4Address ("10.0.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic2 = ipv4.Assign (ndc2);
+
+  ipv4.SetBase (Ipv4Address ("10.0.2.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic3 = ipv4.Assign (ndc3);
+
+  ipv4.SetBase (Ipv4Address ("10.0.3.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic4 = ipv4.Assign (ndc4);
+
+  ipv4.SetBase (Ipv4Address ("10.0.4.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic5 = ipv4.Assign (ndc5);
+
+  ipv4.SetBase (Ipv4Address ("10.0.5.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic6 = ipv4.Assign (ndc6);
+
+  ipv4.SetBase (Ipv4Address ("10.0.6.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic7 = ipv4.Assign (ndc7);
+
+  Ptr<Ipv4StaticRouting> staticRouting;
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (src->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.0.2", 1 );
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (dst->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.6.1", 1 );
+
+  if (printRoutingTables)
+    {
+      RipHelper 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;
+  Time interPacketInterval = Seconds (1.0);
+  V4PingHelper ping ("10.0.6.2");
+
+  ping.SetAttribute ("Interval", TimeValue (interPacketInterval));
+  ping.SetAttribute ("Size", UintegerValue (packetSize));
+  if (showPings)
+    {
+      ping.SetAttribute ("Verbose", BooleanValue (true));
+    }
+  ApplicationContainer apps = ping.Install (src);
+  apps.Start (Seconds (1.0));
+  apps.Stop (Seconds (110.0));
+
+  AsciiTraceHelper ascii;
+  csma.EnableAsciiAll (ascii.CreateFileStream ("rip-simple-routing.tr"));
+  csma.EnablePcapAll ("rip-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 (131.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
diff -Naur ns-3.24.1/examples/routing/simple-routing-ping6.cc ns-3.25/examples/routing/simple-routing-ping6.cc
--- ns-3.24.1/examples/routing/simple-routing-ping6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/routing/simple-routing-ping6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,7 +32,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
diff -Naur ns-3.24.1/examples/routing/simple-routing-ping6.py ns-3.25/examples/routing/simple-routing-ping6.py
--- ns-3.24.1/examples/routing/simple-routing-ping6.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/routing/simple-routing-ping6.py	2016-03-23 21:36:53.000000000 -0700
@@ -27,7 +27,7 @@
 #                router
 #
 
-import ns.applications
+import ns.internet_apps
 import ns.core
 import ns.csma
 import ns.internet
@@ -84,7 +84,7 @@
     packetSize = 1024;
     maxPacketCount = 5;
     interPacketInterval = ns.core.Seconds(1.);
-    ping6 = ns.applications.Ping6Helper();
+    ping6 = ns.internet_apps.Ping6Helper();
 
     ping6.SetLocal(i1.GetAddress(0, 1));
     ping6.SetRemote(i2.GetAddress(1, 1)); 
diff -Naur ns-3.24.1/examples/routing/wscript ns-3.25/examples/routing/wscript
--- ns-3.24.1/examples/routing/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/routing/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -30,7 +30,7 @@
     obj.source = 'mixed-global-routing.cc'
 
     obj = bld.create_ns3_program('simple-routing-ping6',
-                                 ['csma', 'internet', 'applications'])
+                                 ['csma', 'internet', 'internet-apps'])
     obj.source = 'simple-routing-ping6.cc'
 
     obj = bld.create_ns3_program('manet-routing-compare',
@@ -38,7 +38,15 @@
     obj.source = 'manet-routing-compare.cc'
 
     obj = bld.create_ns3_program('ripng-simple-network',
-                                 ['csma', 'internet', 'applications'])
+                                 ['csma', 'internet', 'internet-apps'])
     obj.source = 'ripng-simple-network.cc'
 
-    bld.register_ns3_script('simple-routing-ping6.py', ['csma', 'internet', 'applications'])
+    bld.register_ns3_script('simple-routing-ping6.py', ['csma', 'internet', 'internet-apps'])
+
+    obj = bld.create_ns3_program('rip-simple-network',
+                                 ['csma', 'internet', 'internet-apps'])
+    obj.source = 'rip-simple-network.cc'
+
+    obj = bld.create_ns3_program('global-routing-multi-switch-plus-router',
+                                 ['core', 'network', 'applications', 'internet', 'bridge', 'csma', 'point-to-point', 'csma', 'internet'])
+    obj.source = 'global-routing-multi-switch-plus-router.cc'
diff -Naur ns-3.24.1/examples/stats/wifi-example-sim.cc ns-3.25/examples/stats/wifi-example-sim.cc
--- ns-3.24.1/examples/stats/wifi-example-sim.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/stats/wifi-example-sim.cc	2016-03-23 21:36:53.000000000 -0700
@@ -122,8 +122,8 @@
   nodes.Create (2);
 
   NS_LOG_INFO ("Installing WiFi and Internet stack.");
-  WifiHelper wifi = WifiHelper::Default ();
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiHelper wifi;
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
diff -Naur ns-3.24.1/examples/tcp/tcp-pcap-nanosec-example.cc ns-3.25/examples/tcp/tcp-pcap-nanosec-example.cc
--- ns-3.24.1/examples/tcp/tcp-pcap-nanosec-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/tcp/tcp-pcap-nanosec-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,159 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+// ============================================================ //
+// BASED ON tcp-bulk-send.cc                                    //
+// ============================================================ //
+
+// Network topology
+//
+//       n0 ----------- n1
+//            500 Kbps
+//             5 ms
+//
+// - Flow from n0 to n1 using BulkSendApplication.
+// - Tracing of queues and packet receptions to file "tcp-pcap-nanosec-example.pcap"
+//     when tracing is turned on.
+// - Trace file timestamps are recorded in nanoseconds, when requested
+//
+
+
+// ============================================================ //
+// NOTE: You can check the "magic" number of a pcap file with   //
+//       the following command:                                 //
+//                                                              //
+//                    od -N4 -tx1 filename.pcap                 //
+//                                                              //
+// ============================================================ //
+
+#include <string>
+#include <fstream>
+#include "ns3/core-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/network-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("TcpPcapNanosecExample");
+
+int
+main (int argc, char *argv[])
+{
+
+  bool tracing = false;
+  bool nanosec = false;
+  uint32_t maxBytes = 0;
+
+//
+// Allow the user to override any of the defaults at
+// run-time, via command-line arguments
+//
+  CommandLine cmd;
+  cmd.AddValue ("tracing", "Flag to enable tracing", tracing);
+  cmd.AddValue ("nanosec",  "Flag to use nanosecond timestamps for pcap as default", nanosec);
+  cmd.AddValue ("maxBytes",
+                "Total number of bytes for application to send", maxBytes);
+  cmd.Parse (argc, argv);
+
+//
+// If requested via the --nanosec cmdline flag, generate nanosecond timestamp for pcap traces
+//
+  if (nanosec)
+    {
+      Config::SetDefault ("ns3::PcapFileWrapper::NanosecMode",   BooleanValue (true));
+    }
+
+//
+// Explicitly create the nodes required by the topology (shown above).
+//
+  NS_LOG_INFO ("Create nodes.");
+  NodeContainer nodes;
+  nodes.Create (2);
+
+  NS_LOG_INFO ("Create channels.");
+
+//
+// Explicitly create the point-to-point link required by the topology (shown above).
+//
+  PointToPointHelper pointToPoint;
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("500Kbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("5ms"));
+
+  NetDeviceContainer devices;
+  devices = pointToPoint.Install (nodes);
+
+//
+// Install the internet stack on the nodes
+//
+  InternetStackHelper internet;
+  internet.Install (nodes);
+
+//
+// We've got the "hardware" in place.  Now we need to add IP addresses.
+//
+  NS_LOG_INFO ("Assign IP Addresses.");
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = ipv4.Assign (devices);
+
+  NS_LOG_INFO ("Create Applications.");
+
+//
+// Create a BulkSendApplication and install it on node 0
+//
+  uint16_t port = 9;  // well-known echo port number
+
+
+  BulkSendHelper source ("ns3::TcpSocketFactory",
+                         InetSocketAddress (i.GetAddress (1), port));
+  // Set the amount of data to send in bytes.  Zero is unlimited.
+  source.SetAttribute ("MaxBytes", UintegerValue (maxBytes));
+  ApplicationContainer sourceApps = source.Install (nodes.Get (0));
+  sourceApps.Start (Seconds (0.0));
+  sourceApps.Stop (Seconds (10.0));
+
+//
+// Create a PacketSinkApplication and install it on node 1
+//
+  PacketSinkHelper sink ("ns3::TcpSocketFactory",
+                         InetSocketAddress (Ipv4Address::GetAny (), port));
+  ApplicationContainer sinkApps = sink.Install (nodes.Get (1));
+  sinkApps.Start (Seconds (0.0));
+  sinkApps.Stop (Seconds (10.0));
+
+//
+// Set up tracing if enabled
+//
+  if (tracing)
+    {
+      AsciiTraceHelper ascii;
+      pointToPoint.EnablePcapAll ("tcp-pcap-nanosec-example", false);
+    }
+
+//
+// Now, do the actual simulation.
+//
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Stop (Seconds (10.0));
+  Simulator::Run ();
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+
+  Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (sinkApps.Get (0));
+  std::cout << "Total Bytes Received: " << sink1->GetTotalRx () << std::endl;
+}
diff -Naur ns-3.24.1/examples/tcp/tcp-variants-comparison.cc ns-3.25/examples/tcp/tcp-variants-comparison.cc
--- ns-3.24.1/examples/tcp/tcp-variants-comparison.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/tcp/tcp-variants-comparison.cc	2016-03-23 21:36:53.000000000 -0700
@@ -49,6 +49,7 @@
 #include "ns3/event-id.h"
 #include "ns3/flow-monitor-helper.h"
 #include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/traffic-control-module.h"
 
 using namespace ns3;
 
@@ -160,40 +161,39 @@
   std::string transport_prot = "TcpWestwood";
   double error_p = 0.0;
   std::string bandwidth = "2Mbps";
+  std::string delay = "0.01ms";
   std::string access_bandwidth = "10Mbps";
   std::string access_delay = "45ms";
   bool tracing = false;
-  std::string tr_file_name = "";
-  std::string cwnd_tr_file_name = "";
-  std::string ssthresh_tr_file_name = "";
-  std::string rtt_tr_file_name = "";
-  std::string rto_tr_file_name = "";
+  std::string prefix_file_name = "TcpVariantsComparison";
   double data_mbytes = 0;
   uint32_t mtu_bytes = 400;
   uint16_t num_flows = 1;
   float duration = 100;
   uint32_t run = 0;
-  bool flow_monitor = true;
+  bool flow_monitor = false;
+  bool pcap = false;
+  std::string queue_disc_type = "ns3::PfifoFastQueueDisc";
 
 
   CommandLine cmd;
-  cmd.AddValue ("transport_prot", "Transport protocol to use: TcpTahoe, TcpReno, TcpNewReno, TcpWestwood, TcpWestwoodPlus ", transport_prot);
+  cmd.AddValue ("transport_prot", "Transport protocol to use: TcpNewReno, "
+                " TcpWestwood, TcpWestwoodPlus ", transport_prot);
   cmd.AddValue ("error_p", "Packet error rate", error_p);
   cmd.AddValue ("bandwidth", "Bottleneck bandwidth", bandwidth);
+  cmd.AddValue ("delay", "Bottleneck delay", delay);
   cmd.AddValue ("access_bandwidth", "Access link bandwidth", access_bandwidth);
-  cmd.AddValue ("delay", "Access link delay", access_delay);
+  cmd.AddValue ("access_delay", "Access link delay", access_delay);
   cmd.AddValue ("tracing", "Flag to enable/disable tracing", tracing);
-  cmd.AddValue ("tr_name", "Name of output trace file", tr_file_name);
-  cmd.AddValue ("cwnd_tr_name", "Name of output trace file", cwnd_tr_file_name);
-  cmd.AddValue ("ssthresh_tr_name", "Name of output trace file", ssthresh_tr_file_name);
-  cmd.AddValue ("rtt_tr_name", "Name of output trace file", rtt_tr_file_name);
-  cmd.AddValue ("rto_tr_name", "Name of output trace file", rto_tr_file_name);
+  cmd.AddValue ("prefix_name", "Prefix of output trace file", prefix_file_name);
   cmd.AddValue ("data", "Number of Megabytes of data to transmit", data_mbytes);
   cmd.AddValue ("mtu", "Size of IP packets to send in bytes", mtu_bytes);
   cmd.AddValue ("num_flows", "Number of flows", num_flows);
   cmd.AddValue ("duration", "Time to allow flows to run in seconds", duration);
   cmd.AddValue ("run", "Run index (for setting repeatable seeds)", run);
   cmd.AddValue ("flow_monitor", "Enable flow monitor", flow_monitor);
+  cmd.AddValue ("pcap_tracing", "Enable or disable PCAP tracing", pcap);
+  cmd.AddValue ("queue_disc_type", "Queue disc type for gateway (e.g. ns3::CoDelQueueDisc)", queue_disc_type);
   cmd.Parse (argc, argv);
 
   SeedManager::SetSeed (1);
@@ -202,7 +202,7 @@
   // User may find it convenient to enable logging
   //LogComponentEnable("TcpVariantsComparison", LOG_LEVEL_ALL);
   //LogComponentEnable("BulkSendApplication", LOG_LEVEL_INFO);
-  //LogComponentEnable("DropTailQueue", LOG_LEVEL_ALL);
+  //LogComponentEnable("PfifoFastQueueDisc", LOG_LEVEL_ALL);
 
   // Calculate the ADU size
   Header* temp_header = new Ipv4Header ();
@@ -213,23 +213,19 @@
   uint32_t tcp_header = temp_header->GetSerializedSize ();
   NS_LOG_LOGIC ("TCP Header size is: " << tcp_header);
   delete temp_header;
-  uint32_t tcp_adu_size = mtu_bytes - (ip_header + tcp_header);
+  uint32_t tcp_adu_size = mtu_bytes - 20 - (ip_header + tcp_header);
   NS_LOG_LOGIC ("TCP ADU size is: " << tcp_adu_size);
 
   // Set the simulation start and stop time
   float start_time = 0.1;
   float stop_time = start_time + duration;
 
+  // 4 MB of TCP buffer
+  Config::SetDefault ("ns3::TcpSocket::RcvBufSize", UintegerValue (1 << 21));
+  Config::SetDefault ("ns3::TcpSocket::SndBufSize", UintegerValue (1 << 21));
+
   // Select TCP variant
-  if (transport_prot.compare ("TcpTahoe") == 0)
-    {
-      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpTahoe::GetTypeId ()));
-    }
-  else if (transport_prot.compare ("TcpReno") == 0)
-    {
-      Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpReno::GetTypeId ()));
-    }
-  else if (transport_prot.compare ("TcpNewReno") == 0)
+  if (transport_prot.compare ("TcpNewReno") == 0)
     {
       Config::SetDefault ("ns3::TcpL4Protocol::SocketType", TypeIdValue (TcpNewReno::GetTypeId ()));
     }
@@ -269,13 +265,20 @@
 
   PointToPointHelper UnReLink;
   UnReLink.SetDeviceAttribute ("DataRate", StringValue (bandwidth));
-  UnReLink.SetChannelAttribute ("Delay", StringValue ("0.01ms"));
+  UnReLink.SetChannelAttribute ("Delay", StringValue (delay));
   UnReLink.SetDeviceAttribute ("ReceiveErrorModel", PointerValue (&error_model));
 
 
   InternetStackHelper stack;
   stack.InstallAll ();
 
+  TrafficControlHelper tchPfifo;
+  uint32_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+
+  TrafficControlHelper tchCoDel;
+  tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
+
   Ipv4AddressHelper address;
   address.SetBase ("10.0.0.0", "255.255.255.0");
 
@@ -284,14 +287,43 @@
   PointToPointHelper LocalLink;
   LocalLink.SetDeviceAttribute ("DataRate", StringValue (access_bandwidth));
   LocalLink.SetChannelAttribute ("Delay", StringValue (access_delay));
+
   Ipv4InterfaceContainer sink_interfaces;
+
+  DataRate access_b (access_bandwidth);
+  DataRate bottle_b (bandwidth);
+  Time access_d (access_delay);
+  Time bottle_d (delay);
+
+  Config::SetDefault ("ns3::CoDelQueueDisc::Mode", EnumValue (Queue::QUEUE_MODE_BYTES));
+
+  uint32_t size = (std::min (access_b, bottle_b).GetBitRate () / 8) *
+    ((access_d + bottle_d) * 2).GetSeconds ();
+
+  Config::SetDefault ("ns3::PfifoFastQueueDisc::Limit", UintegerValue (size / mtu_bytes));
+  Config::SetDefault ("ns3::CoDelQueueDisc::MaxBytes", UintegerValue (size));
+
   for (int i = 0; i < num_flows; i++)
     {
       NetDeviceContainer devices;
       devices = LocalLink.Install (sources.Get (i), gateways.Get (0));
+      tchPfifo.Install (devices);
       address.NewNetwork ();
       Ipv4InterfaceContainer interfaces = address.Assign (devices);
+
       devices = UnReLink.Install (gateways.Get (0), sinks.Get (i));
+      if (queue_disc_type.compare ("ns3::PfifoFastQueueDisc") == 0)
+        {
+          tchPfifo.Install (devices);
+        }
+      else if (queue_disc_type.compare ("ns3::CoDelQueueDisc") == 0)
+        {
+          tchCoDel.Install (devices);
+        }
+      else
+        {
+          NS_FATAL_ERROR ("Queue not recognized. Allowed values are ns3::CoDelQueueDisc or ns3::PfifoFastQueueDisc");
+        }
       address.NewNetwork ();
       interfaces = address.Assign (devices);
       sink_interfaces.Add (interfaces.Get (1));
@@ -308,11 +340,13 @@
     {
       AddressValue remoteAddress (InetSocketAddress (sink_interfaces.GetAddress (i, 0), port));
 
-      if (transport_prot.compare ("TcpTahoe") == 0
-          || transport_prot.compare ("TcpReno") == 0
-          || transport_prot.compare ("TcpNewReno") == 0
+      if (transport_prot.compare ("TcpNewReno") == 0
           || transport_prot.compare ("TcpWestwood") == 0
-          || transport_prot.compare ("TcpWestwoodPlus") == 0)
+          || transport_prot.compare ("TcpWestwoodPlus") == 0
+          || transport_prot.compare ("TcpHybla") == 0
+          || transport_prot.compare ("TcpHighSpeed") == 0
+          || transport_prot.compare ("TcpBic") == 0
+          || transport_prot.compare ("TcpCubic") == 0)
         {
           Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (tcp_adu_size));
           BulkSendHelper ftp ("ns3::TcpSocketFactory", Address ());
@@ -339,39 +373,24 @@
   // Set up tracing if enabled
   if (tracing)
     {
-      if (tr_file_name.compare ("") != 0)
-        {
-          std::ofstream ascii;
-          Ptr<OutputStreamWrapper> ascii_wrap;
-          ascii.open (tr_file_name.c_str ());
-          ascii_wrap = new OutputStreamWrapper (tr_file_name.c_str (), std::ios::out);
-          stack.EnableAsciiIpv4All (ascii_wrap);
-        }
-
-      if (cwnd_tr_file_name.compare ("") != 0)
-        {
-          Simulator::Schedule (Seconds (0.00001), &TraceCwnd, cwnd_tr_file_name);
-        }
-
-      if (ssthresh_tr_file_name.compare ("") != 0)
-        {
-          Simulator::Schedule (Seconds (0.00001), &TraceSsThresh, ssthresh_tr_file_name);
-        }
-
-      if (rtt_tr_file_name.compare ("") != 0)
-        {
-          Simulator::Schedule (Seconds (0.00001), &TraceRtt, rtt_tr_file_name);
-        }
-
-      if (rto_tr_file_name.compare ("") != 0)
-        {
-          Simulator::Schedule (Seconds (0.00001), &TraceRto, rto_tr_file_name);
-        }
-
+      std::ofstream ascii;
+      Ptr<OutputStreamWrapper> ascii_wrap;
+      ascii.open ((prefix_file_name + "-ascii").c_str ());
+      ascii_wrap = new OutputStreamWrapper ((prefix_file_name + "-ascii").c_str (),
+                                            std::ios::out);
+      stack.EnableAsciiIpv4All (ascii_wrap);
+
+      Simulator::Schedule (Seconds (0.00001), &TraceCwnd, prefix_file_name + "-cwnd.data");
+      Simulator::Schedule (Seconds (0.00001), &TraceSsThresh, prefix_file_name + "-ssth.data");
+      Simulator::Schedule (Seconds (0.00001), &TraceRtt, prefix_file_name + "-rtt.data");
+      Simulator::Schedule (Seconds (0.00001), &TraceRto, prefix_file_name + "-rto.data");
     }
 
-  UnReLink.EnablePcapAll ("TcpVariantsComparison", true);
-  LocalLink.EnablePcapAll ("TcpVariantsComparison", true);
+  if (pcap)
+    {
+      UnReLink.EnablePcapAll (prefix_file_name, true);
+      LocalLink.EnablePcapAll (prefix_file_name, true);
+    }
 
   // Flow monitor
   FlowMonitorHelper flowHelper;
@@ -385,7 +404,7 @@
 
   if (flow_monitor)
     {
-      flowHelper.SerializeToXmlFile ("TcpVariantsComparison.flowmonitor", true, true);
+      flowHelper.SerializeToXmlFile (prefix_file_name + ".flowmonitor", true, true);
     }
 
   Simulator::Destroy ();
diff -Naur ns-3.24.1/examples/tcp/wscript ns-3.25/examples/tcp/wscript
--- ns-3.24.1/examples/tcp/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/tcp/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -25,6 +25,10 @@
                                  ['point-to-point', 'applications', 'internet'])
     obj.source = 'tcp-bulk-send.cc'
 
+    obj = bld.create_ns3_program('tcp-pcap-nanosec-example',
+                                 ['point-to-point', 'applications', 'internet'])
+    obj.source = 'tcp-pcap-nanosec-example.cc'
+
     obj = bld.create_ns3_program('tcp-nsc-comparison',
                                  ['point-to-point', 'internet', 'applications', 'flow-monitor'])
 
diff -Naur ns-3.24.1/examples/traffic-control/examples-to-run.py ns-3.25/examples/traffic-control/examples-to-run.py
--- ns-3.24.1/examples/traffic-control/examples-to-run.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/traffic-control/examples-to-run.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,20 @@
+#! /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 = [
+    ("traffic-control", "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.24.1/examples/traffic-control/traffic-control.cc ns-3.25/examples/traffic-control/traffic-control.cc
--- ns-3.24.1/examples/traffic-control/traffic-control.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/traffic-control/traffic-control.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,186 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Universita' degli Studi di Napoli "Federico II"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Pasquale Imputato <p.imputato@gmail.com>
+ * Author: Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/traffic-control-module.h"
+
+// This simple example shows how to use TrafficControlHelper to install a 
+// QueueDisc on a device.
+//
+// The default QueueDisc is a pfifo_fast with max number of packets equal to 
+// 1000 (as in Linux).   However, in this example, we change from the default 
+// to instead use a ns3::RedQueueDisc with a MaxPackets value of 10000.
+//
+// Network topology
+//
+//       10.1.1.0
+// n0 -------------- n1
+//    point-to-point
+//
+// The output will consist of a number of traced changes to queue lengths
+// such as:
+//
+//    DevicePacketsInQueue 0 to 1
+//    TcPacketsInQueue 5 to 4
+//    TcPacketsInQueue 4 to 5
+//    DevicePacketsInQueue 1 to 0
+//
+// and an average throughput: 
+//
+//    Average throughput: 8.72854 Mbit/s
+//
+// The final output displays the number of drops at the TC layer and the
+// netdevice layer.  These statistics highlight the fact that for
+// PointToPointNetDevice, the drops at the device layer are actually
+// requeued at the TC layer, so the true packet drops (39 in this case)
+// must be traced at the TC layer.
+//
+//    *** Source stats ***
+//    Number of packets dropped by the TC layer: 39
+//    Number of packets dropped by the netdevice: 3914
+//    Number of packets requeued by the TC layer: 3914
+//    Number of actually lost packets: 39
+//
+// If one were to increase the size of the PointToPointNetDevice's
+// DropTailQueue from 1 to a larger number (e.g. 1000), one would observe
+// that the number of packets dropped would go to zero, but the latency
+// and QoS would not be controllable.  This is the so-called bufferbloat
+// problem, and illustrates the importance of having a small device queue
+// so that the standing queues build in the traffic control layer where
+// they can be managed by advanced queue discs rather than in the 
+// device layer.
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("TrafficControlExample");
+
+void
+TcPacketsInQueueTrace (uint32_t oldValue, uint32_t newValue)
+{
+  std::cout << "TcPacketsInQueue " << oldValue << " to " << newValue << std::endl;
+}
+
+void
+DevicePacketsInQueueTrace (uint32_t oldValue, uint32_t newValue)
+{
+  std::cout << "DevicePacketsInQueue " << oldValue << " to " << newValue << std::endl;
+}
+
+int
+main (int argc, char *argv[])
+{
+  double simulationTime = 10; //seconds
+  std::string transportProt = "Tcp";
+  std::string socketType;
+
+  CommandLine cmd;
+  cmd.AddValue ("transportProt", "Transport protocol to use: Tcp, Udp", transportProt);
+  cmd.Parse (argc, argv);
+
+  if (transportProt.compare ("Tcp") == 0)
+    {
+      socketType = "ns3::TcpSocketFactory";
+    }
+  else
+    {
+      socketType = "ns3::UdpSocketFactory";
+    }
+
+  NodeContainer nodes;
+  nodes.Create (2);
+
+  PointToPointHelper pointToPoint;
+  pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
+  pointToPoint.SetQueue ("ns3::DropTailQueue", "Mode", StringValue ("QUEUE_MODE_PACKETS"), "MaxPackets", UintegerValue (1));
+
+  NetDeviceContainer devices;
+  devices = pointToPoint.Install (nodes);
+
+  InternetStackHelper stack;
+  stack.Install (nodes);
+
+  TrafficControlHelper tch;
+  uint16_t handle = tch.SetRootQueueDisc ("ns3::RedQueueDisc");
+  // Add the internal queue used by Red
+  tch.AddInternalQueues (handle, 1, "ns3::DropTailQueue", "MaxPackets", UintegerValue (10000));
+  QueueDiscContainer qdiscs = tch.Install (devices);
+
+  Ptr<QueueDisc> q = qdiscs.Get (1);
+  q->TraceConnectWithoutContext ("PacketsInQueue", MakeCallback (&TcPacketsInQueueTrace));
+
+  Ptr<NetDevice> nd = devices.Get (1);
+  Ptr<PointToPointNetDevice> ptpnd = DynamicCast<PointToPointNetDevice> (nd);
+  Ptr<Queue> queue = ptpnd->GetQueue ();
+  queue->TraceConnectWithoutContext ("PacketsInQueue", MakeCallback (&DevicePacketsInQueueTrace));
+
+  Ipv4AddressHelper address;
+  address.SetBase ("10.1.1.0", "255.255.255.0");
+
+  Ipv4InterfaceContainer interfaces = address.Assign (devices);
+
+  //Flow
+  uint16_t port = 7;
+  Address localAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper packetSinkHelper (socketType, localAddress);
+  ApplicationContainer sinkApp = packetSinkHelper.Install (nodes.Get (0));
+
+  sinkApp.Start (Seconds (0.0));
+  sinkApp.Stop (Seconds (simulationTime + 0.1));
+
+  uint32_t payloadSize = 1448;
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+
+  OnOffHelper onoff (socketType, Ipv4Address::GetAny ());
+  onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+  onoff.SetAttribute ("DataRate", StringValue ("50Mbps")); //bit/s
+  ApplicationContainer apps;
+
+  AddressValue remoteAddress (InetSocketAddress (interfaces.GetAddress (0), port));
+  onoff.SetAttribute ("Remote", remoteAddress);
+  apps.Add (onoff.Install (nodes.Get (1)));
+  apps.Start (Seconds (1.0));
+  apps.Stop (Seconds (simulationTime + 0.1));
+
+  Simulator::Stop (Seconds (simulationTime + 0.1));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  double thr = 0;
+  uint32_t totalPacketsThr = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+  thr = totalPacketsThr * 8 / (simulationTime * 1000000.0); //Mbit/s
+  std::cout << "Average throughput: " << thr << " Mbit/s" <<std::endl;
+  std::cout << "*** Source stats ***" << std::endl;
+  std::cout << "Number of packets dropped by the TC layer: " << q->GetTotalDroppedPackets () << std::endl;
+  std::cout << "Number of packets dropped by the netdevice: " << queue->GetTotalDroppedPackets () << std::endl;
+  std::cout << "Number of packets requeued by the TC layer: " << q->GetTotalRequeuedPackets () << std::endl;
+  std::cout << "Number of actually lost packets: " << q->GetTotalDroppedPackets ()
+                                                      + queue->GetTotalDroppedPackets ()
+                                                      - q->GetTotalRequeuedPackets () << std::endl;
+
+  return 0;
+}
diff -Naur ns-3.24.1/examples/traffic-control/wscript ns-3.25/examples/traffic-control/wscript
--- ns-3.24.1/examples/traffic-control/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/traffic-control/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,6 @@
+## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    obj = bld.create_ns3_program('traffic-control',
+                                 ['internet', 'point-to-point', 'applications', 'traffic-control'])
+    obj.source = 'traffic-control.cc'
diff -Naur ns-3.24.1/examples/tutorial/third.cc ns-3.25/examples/tutorial/third.cc
--- ns-3.24.1/examples/tutorial/third.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/tutorial/third.cc	2016-03-23 21:36:53.000000000 -0700
@@ -102,11 +102,10 @@
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetChannel (channel.Create ());
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
 
-  NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
-
+  WifiMacHelper mac;
   Ssid ssid = Ssid ("ns-3-ssid");
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
diff -Naur ns-3.24.1/examples/tutorial/third.py ns-3.25/examples/tutorial/third.py
--- ns-3.24.1/examples/tutorial/third.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/tutorial/third.py	2016-03-23 21:36:53.000000000 -0700
@@ -86,10 +86,10 @@
 phy = ns.wifi.YansWifiPhyHelper.Default()
 phy.SetChannel(channel.Create())
 
-wifi = ns.wifi.WifiHelper.Default()
+wifi = ns.wifi.WifiHelper()
 wifi.SetRemoteStationManager("ns3::AarfWifiManager")
 
-mac = ns.wifi.NqosWifiMacHelper.Default()
+mac = ns.wifi.WifiMacHelper()
 ssid = ns.wifi.Ssid ("ns-3-ssid")
 
 mac.SetType ("ns3::StaWifiMac", "Ssid", ns.wifi.SsidValue(ssid), "ActiveProbing", ns.core.BooleanValue(False))
diff -Naur ns-3.24.1/examples/wireless/80211n-mimo.cc ns-3.25/examples/wireless/80211n-mimo.cc
--- ns-3.24.1/examples/wireless/80211n-mimo.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/wireless/80211n-mimo.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,319 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Authors: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+// This example is used to validate 802.11n MIMO.
+//
+// It outputs plots of the throughput versus the distance
+// for every HT MCS value and from 1 to 4 MIMO streams.
+//
+// The simulation assumes a single station in an infrastructure network:
+//
+//  STA     AP
+//    *     *
+//    |     |
+//   n1     n2
+//
+// The user can choose whether UDP or TCP should be used and can configure
+// some 802.11n parameters (frequency, channel width and guard interval).
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+#include "ns3/gnuplot.h"
+#include <fstream>
+#include <vector>
+#include <cmath>
+
+using namespace ns3;
+
+int main (int argc, char *argv[])
+{
+  std::ofstream file ("80211n-mimo-throughput.plt");
+  
+  std::vector <std::string> modes;
+  modes.push_back ("HtMcs0");
+  modes.push_back ("HtMcs1");
+  modes.push_back ("HtMcs2");
+  modes.push_back ("HtMcs3");
+  modes.push_back ("HtMcs4");
+  modes.push_back ("HtMcs5");
+  modes.push_back ("HtMcs6");
+  modes.push_back ("HtMcs7");
+  modes.push_back ("HtMcs8");
+  modes.push_back ("HtMcs9");
+  modes.push_back ("HtMcs10");
+  modes.push_back ("HtMcs11");
+  modes.push_back ("HtMcs12");
+  modes.push_back ("HtMcs13");
+  modes.push_back ("HtMcs14");
+  modes.push_back ("HtMcs15");
+  modes.push_back ("HtMcs16");
+  modes.push_back ("HtMcs17");
+  modes.push_back ("HtMcs18");
+  modes.push_back ("HtMcs19");
+  modes.push_back ("HtMcs20");
+  modes.push_back ("HtMcs21");
+  modes.push_back ("HtMcs22");
+  modes.push_back ("HtMcs23");
+  modes.push_back ("HtMcs24");
+  modes.push_back ("HtMcs25");
+  modes.push_back ("HtMcs26");
+  modes.push_back ("HtMcs27");
+  modes.push_back ("HtMcs28");
+  modes.push_back ("HtMcs29");
+  modes.push_back ("HtMcs30");
+  modes.push_back ("HtMcs31");
+  
+  bool udp = true;
+  double simulationTime = 5; //seconds
+  double frequency = 5.0; //whether 2.4 or 5.0 GHz
+  double step = 5; //meters
+  bool shortGuardInterval = false;
+  bool channelBonding = false;
+
+  CommandLine cmd;
+  cmd.AddValue ("step", "Granularity of the results to be plotted in meters", step);
+  cmd.AddValue ("channelBonding", "Enable/disable channel bonding (channel width = 20 MHz if false, channel width = 40 MHz if true)", channelBonding);
+  cmd.AddValue ("shortGuardInterval", "Enable/disable short guard interval", shortGuardInterval);
+  cmd.AddValue ("frequency", "Whether working in the 2.4 or 5.0 GHz band (other values gets rejected)", frequency);
+  cmd.AddValue ("udp", "UDP if set to 1, TCP otherwise", udp);
+  cmd.Parse (argc,argv);
+
+  Gnuplot plot = Gnuplot ("80211n-mimo-throughput.eps");
+
+  for (uint32_t i = 0; i < modes.size (); i++) //MCS
+    {
+      std::cout << modes[i] << std::endl;
+      Gnuplot2dDataset dataset (modes[i]);
+      for (int d = 0; d <= 100; ) //distance
+        {
+          std::cout << "Distance = " << d << "m: "<< std::endl;
+          uint32_t payloadSize; //1500 byte IP packet
+          if (udp)
+            {
+              payloadSize = 1472; //bytes
+            }
+          else
+            {
+              payloadSize = 1448; //bytes
+              Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+            }
+              
+          uint8_t nStreams = 1 + (i / 8); //number of MIMO streams
+
+          NodeContainer wifiStaNode;
+          wifiStaNode.Create (1);
+          NodeContainer wifiApNode;
+          wifiApNode.Create (1);
+
+          YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+          YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+          phy.SetChannel (channel.Create ());
+
+          // Set guard interval
+          phy.Set ("ShortGuardEnabled", BooleanValue (shortGuardInterval));
+          // Set MIMO capabilities
+          phy.Set ("TxAntennas", UintegerValue (nStreams));
+          phy.Set ("RxAntennas", UintegerValue (nStreams));
+
+          WifiMacHelper mac;
+          WifiHelper wifi;
+          if (frequency == 5.0)
+            {
+              wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+            }
+          else if (frequency == 2.4)
+            {
+              wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+              Config::SetDefault ("ns3::LogDistancePropagationLossModel::ReferenceLoss", DoubleValue (40.046));
+            }
+          else
+            {
+              std::cout<<"Wrong frequency value!"<<std::endl;
+              return 0;
+            }
+
+          wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", StringValue (modes[i]),
+                                        "ControlMode", StringValue (modes[i]));
+                
+          Ssid ssid = Ssid ("ns3-80211n");
+
+          mac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+
+          NetDeviceContainer staDevice;
+          staDevice = wifi.Install (phy, mac, wifiStaNode);
+
+          mac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+
+          NetDeviceContainer apDevice;
+          apDevice = wifi.Install (phy, mac, wifiApNode);
+
+          // Set channel width
+          if (channelBonding)
+            {
+              Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (40));
+            }
+
+          // mobility.
+          MobilityHelper mobility;
+          Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+
+          positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+          positionAlloc->Add (Vector (d, 0.0, 0.0));
+          mobility.SetPositionAllocator (positionAlloc);
+
+          mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+          mobility.Install (wifiApNode);
+          mobility.Install (wifiStaNode);
+
+          /* Internet stack*/
+          InternetStackHelper stack;
+          stack.Install (wifiApNode);
+          stack.Install (wifiStaNode);
+
+          Ipv4AddressHelper address;
+
+          address.SetBase ("192.168.1.0", "255.255.255.0");
+          Ipv4InterfaceContainer staNodeInterface;
+          Ipv4InterfaceContainer apNodeInterface;
+          
+          staNodeInterface = address.Assign (staDevice);
+          apNodeInterface = address.Assign (apDevice);
+
+          /* Setting applications */
+          ApplicationContainer serverApp, sinkApp;
+          if (udp)
+            {
+              //UDP flow
+              UdpServerHelper myServer (9);
+              serverApp = myServer.Install (wifiStaNode.Get (0));
+              serverApp.Start (Seconds (0.0));
+              serverApp.Stop (Seconds (simulationTime + 1));
+
+              UdpClientHelper myClient (staNodeInterface.GetAddress (0), 9);
+              myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+              myClient.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s
+              myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+              ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
+              clientApp.Start (Seconds (1.0));
+              clientApp.Stop (Seconds (simulationTime + 1));
+            }
+          else
+            {
+              //TCP flow
+              uint16_t port = 50000;
+              Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+              PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+              sinkApp = packetSinkHelper.Install (wifiStaNode.Get (0));
+
+              sinkApp.Start (Seconds (0.0));
+              sinkApp.Stop (Seconds (simulationTime + 1));
+
+              OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+              onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+              onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+              onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+              onoff.SetAttribute ("DataRate", DataRateValue (1000000000)); //bit/s
+              ApplicationContainer apps;
+
+              AddressValue remoteAddress (InetSocketAddress (staNodeInterface.GetAddress (0), port));
+              onoff.SetAttribute ("Remote", remoteAddress);
+              apps.Add (onoff.Install (wifiApNode.Get (0)));
+              apps.Start (Seconds (1.0));
+              apps.Stop (Seconds (simulationTime + 1));
+            }
+
+          Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+          
+          Simulator::Stop (Seconds (simulationTime + 1));
+          Simulator::Run ();
+          Simulator::Destroy ();
+
+          double throughput = 0;
+          if (udp)
+            {
+              //UDP
+              uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+              throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s
+            }
+          else
+            {
+              //TCP
+              uint32_t totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+              throughput = totalPacketsThrough * 8 / (simulationTime * 1000000.0); //Mbit/s
+            }
+          dataset.Add (d, throughput);
+          std::cout << throughput << " Mbit/s" <<std::endl;
+          d += step;
+        }
+      plot.AddDataset (dataset);
+    }
+
+  plot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  plot.SetLegend ("Distance (Meters)", "Throughput (Mbit/s)");
+  plot.SetExtra  ("set xrange [0:100]\n\
+set yrange [0:600]\n\
+set ytics 0,50,600\n\
+set style line 1 dashtype 1 linewidth 5\n\
+set style line 2 dashtype 1 linewidth 5\n\
+set style line 3 dashtype 1 linewidth 5\n\
+set style line 4 dashtype 1 linewidth 5\n\
+set style line 5 dashtype 1 linewidth 5\n\
+set style line 6 dashtype 1 linewidth 5\n\
+set style line 7 dashtype 1 linewidth 5\n\
+set style line 8 dashtype 1 linewidth 5\n\
+set style line 9 dashtype 2 linewidth 5\n\
+set style line 10 dashtype 2 linewidth 5\n\
+set style line 11 dashtype 2 linewidth 5\n\
+set style line 12 dashtype 2 linewidth 5\n\
+set style line 13 dashtype 2 linewidth 5\n\
+set style line 14 dashtype 2 linewidth 5\n\
+set style line 15 dashtype 2 linewidth 5\n\
+set style line 16 dashtype 2 linewidth 5\n\
+set style line 17 dashtype 3 linewidth 5\n\
+set style line 18 dashtype 3 linewidth 5\n\
+set style line 19 dashtype 3 linewidth 5\n\
+set style line 20 dashtype 3 linewidth 5\n\
+set style line 21 dashtype 3 linewidth 5\n\
+set style line 22 dashtype 3 linewidth 5\n\
+set style line 23 dashtype 3 linewidth 5\n\
+set style line 24 dashtype 3 linewidth 5\n\
+set style line 25 dashtype 4 linewidth 5\n\
+set style line 26 dashtype 4 linewidth 5\n\
+set style line 27 dashtype 4 linewidth 5\n\
+set style line 28 dashtype 4 linewidth 5\n\
+set style line 29 dashtype 4 linewidth 5\n\
+set style line 30 dashtype 4 linewidth 5\n\
+set style line 31 dashtype 4 linewidth 5\n\
+set style line 32 dashtype 4 linewidth 5\n\
+set style increment user"                                                                                                                                                                                                                                                                                                                                   );
+  plot.GenerateOutput (file);
+  file.close ();
+
+  return 0;
+}
+
diff -Naur ns-3.24.1/examples/wireless/examples-to-run.py ns-3.25/examples/wireless/examples-to-run.py
--- ns-3.24.1/examples/wireless/examples-to-run.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/examples-to-run.py	2016-03-23 21:36:53.000000000 -0700
@@ -30,6 +30,8 @@
     ("ofdm-ht-validation", "True", "True"),
     ("ofdm-validation", "True", "True"),
     ("ofdm-vht-validation", "True", "True"),
+    ("mixed-bg-network", "True", "True"),
+    ("wifi-tcp", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.24.1/examples/wireless/ht-wifi-network.cc ns-3.25/examples/wireless/ht-wifi-network.cc
--- ns-3.24.1/examples/wireless/ht-wifi-network.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/ht-wifi-network.cc	2016-03-23 21:36:53.000000000 -0700
@@ -92,7 +92,8 @@
               // Set guard interval
               phy.Set ("ShortGuardEnabled", BooleanValue (k));
 
-              WifiHelper wifi = WifiHelper::Default ();
+              WifiMacHelper mac;
+              WifiHelper wifi;
               if (frequency == 5.0)
                 {
                   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
@@ -108,10 +109,10 @@
                   return 0;
                 }
 
-              HtWifiMacHelper mac = HtWifiMacHelper::Default ();
-              StringValue DataRate = HtWifiMacHelper::DataRateForMcs (i);
-              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
-                                            "ControlMode", DataRate);
+              std::ostringstream oss;
+              oss << "HtMcs" << i;
+              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", StringValue (oss.str ()),
+                                            "ControlMode", StringValue (oss.str ()));
                 
               Ssid ssid = Ssid ("ns3-80211n");
 
diff -Naur ns-3.24.1/examples/wireless/mixed-bg-network.cc ns-3.25/examples/wireless/mixed-bg-network.cc
--- ns-3.24.1/examples/wireless/mixed-bg-network.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/wireless/mixed-bg-network.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,306 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 SÃ©bastien Deronne
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+
+// This example shows how the presence of an 802.11b station in an 802.11g network does affect the performance.
+//
+// The example compares different scenarios depending on whether an 802.11b station is associated to the access point
+// and depending on the configuration of the following parameters:
+// - protection mode that is configured on the AP;
+// - whether short PLCP is supported by the 802.11b station;
+// - whether short slot time is supported by both the 802.11g station and the AP.
+//
+// The output results show that the presence of an 802.11b station strongly affects 802.11g performance.
+// Protection mechanisms ensure that the NAV value of 802.11b stations is set correctly in case of 802.11g transmissions.
+// In practice, those protection mechanism add a lot of overhead, resulting in reduced performance. CTS-To-Self introduces
+// less overhead than Rts-Cts, but is not heard by hidden stations (and is thus generally only recommended as a protection
+// mechanism for access points). Since short slot time is disabled once an 802.11b station enters the network, benefits from
+// short slot time are only observed in a pure-G configuration.
+//
+// The user can also select the payload size and can choose either an UDP or a TCP connection.
+// Example: ./waf --run "mixed-bg-network --isUdp=1"
+//
+// Network topology:
+//
+//   STA (802.11b)    AP (802.11b/g)   STA (802.11b/g)
+//   *                *                *
+//   |                |                |
+//   n1               n2               n3
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("ErpAndNonErp");
+
+class Experiment
+{
+public:
+  Experiment ();
+  double Run (bool enableProtection, bool enableShortSlotTime, bool enableShortPlcpPreamble, bool isMixed, bool isUdp, uint32_t payloadSize, uint32_t simulationTime);
+};
+
+Experiment::Experiment ()
+{
+}
+
+double
+Experiment::Run (bool enableProtection, bool enableShortSlotTime, bool enableShortPlcpPreamble, bool isMixed, bool isUdp, uint32_t payloadSize, uint32_t simulationTime)
+{
+  double throughput = 0;
+  uint32_t totalPacketsThrough = 0;
+  uint32_t nWifiB = 0;
+  if (isMixed)
+    {
+      nWifiB = 1;
+    }
+
+  NodeContainer wifiBStaNodes;
+  wifiBStaNodes.Create (nWifiB);
+  NodeContainer wifiGStaNodes;
+  wifiGStaNodes.Create (1);
+  NodeContainer wifiApNode;
+  wifiApNode.Create (1);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  channel.AddPropagationLoss ("ns3::RangePropagationLossModel");
+
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetChannel (channel.Create ());
+
+  WifiHelper wifi;
+  wifi.SetRemoteStationManager ("ns3::IdealWifiManager");
+
+  // 802.11b STA
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+
+  WifiMacHelper mac;
+  Ssid ssid = Ssid ("ns-3-ssid");
+
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false),
+               "ShortSlotTimeSupported", BooleanValue (enableShortSlotTime));
+    
+  // Configure the PLCP preamble type: long or short
+  phy.Set ("ShortPlcpPreambleSupported", BooleanValue (enableShortPlcpPreamble));
+
+  NetDeviceContainer bStaDevice;
+  bStaDevice = wifi.Install (phy, mac, wifiBStaNodes);
+  
+  // 802.11b/g STA
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211g);
+  NetDeviceContainer gStaDevice;
+  gStaDevice = wifi.Install (phy, mac, wifiGStaNodes);
+  
+  // 802.11b/g AP
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconGeneration", BooleanValue (true),
+               "EnableNonErpProtection", BooleanValue (enableProtection),
+               "ShortSlotTimeSupported", BooleanValue (enableShortSlotTime));
+    
+  NetDeviceContainer apDevice;
+  apDevice = wifi.Install (phy, mac, wifiApNode);
+
+  // Setting mobility model
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  if (isMixed)
+  {
+    positionAlloc->Add (Vector (5.0, 0.0, 0.0));
+  }
+  positionAlloc->Add (Vector (0.0, 5.0, 0.0));
+  
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (wifiApNode);
+  mobility.Install (wifiBStaNodes);
+  mobility.Install (wifiGStaNodes);
+
+  // Internet stack
+  InternetStackHelper stack;
+  stack.Install (wifiApNode);
+  stack.Install (wifiBStaNodes);
+  stack.Install (wifiGStaNodes);
+
+  Ipv4AddressHelper address;
+
+  address.SetBase ("192.168.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer bStaInterface;
+  bStaInterface = address.Assign (bStaDevice);
+  Ipv4InterfaceContainer gStaInterface;
+  gStaInterface = address.Assign (gStaDevice);
+  Ipv4InterfaceContainer ApInterface;
+  ApInterface = address.Assign (apDevice);
+
+  // Setting applications
+  if (isUdp)
+    {
+      UdpServerHelper myServer (9);
+      ApplicationContainer serverApp = myServer.Install (wifiApNode);
+      serverApp.Start (Seconds (0.0));
+      serverApp.Stop (Seconds (simulationTime + 1));
+
+      UdpClientHelper myClient (ApInterface.GetAddress (0), 9);
+      myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+      myClient.SetAttribute ("Interval", TimeValue (Time ("0.0002"))); //packets/s
+      myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+      ApplicationContainer clientApp = myClient.Install (wifiGStaNodes);
+      clientApp.Start (Seconds (1.0));
+      clientApp.Stop (Seconds (simulationTime + 1));
+  
+      Simulator::Stop (Seconds (simulationTime + 1));
+      Simulator::Run ();
+      Simulator::Destroy ();
+  
+      totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
+      throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+    }
+  else
+    {
+      uint16_t port = 50000;
+      Address apLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+      PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", apLocalAddress);
+      
+      ApplicationContainer sinkApp = packetSinkHelper.Install (wifiApNode.Get (0));
+      sinkApp.Start (Seconds (0.0));
+      sinkApp.Stop (Seconds (simulationTime + 1));
+
+      OnOffHelper onoff ("ns3::TcpSocketFactory",Ipv4Address::GetAny ());
+      onoff.SetAttribute ("OnTime",  StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      onoff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      onoff.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+      onoff.SetAttribute ("DataRate", DataRateValue (54000000)); //bit/s
+      
+      AddressValue remoteAddress (InetSocketAddress (ApInterface.GetAddress (0), port));
+      onoff.SetAttribute ("Remote", remoteAddress);
+      
+      ApplicationContainer apps;
+      apps.Add (onoff.Install (wifiGStaNodes));
+      apps.Start (Seconds (1.0));
+      apps.Stop (Seconds (simulationTime + 1));
+
+      Simulator::Stop (Seconds (simulationTime + 1));
+      Simulator::Run ();
+      Simulator::Destroy ();
+      
+      totalPacketsThrough = DynamicCast<PacketSink> (sinkApp.Get (0))->GetTotalRx ();
+      throughput += totalPacketsThrough * 8 / (simulationTime * 1000000.0);
+    }
+  
+  return throughput;
+}
+
+int main (int argc, char *argv[])
+{
+  uint32_t payloadSize = 1472; //bytes
+  uint32_t simulationTime = 10; //seconds
+  bool isUdp = true;
+  
+  CommandLine cmd;
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("isUdp", "UDP if set to 1, TCP otherwise", isUdp);
+  cmd.Parse (argc, argv);
+
+  Experiment experiment;
+  double throughput = 0;
+  std::cout << "Protection mode" << "\t\t" << "Slot time supported" << "\t\t" << "PLCP preamble supported" << "\t\t" << "Scenario" << "\t" << "Throughput" << std::endl;
+
+  throughput = experiment.Run (false, false, false, false, isUdp, payloadSize, simulationTime);
+  if (throughput < 23 || throughput > 24)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "Disabled" << "\t\t" << "Long" << "\t\t\t\t" << "Long" << "\t\t\t\t" << "G-only" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  throughput = experiment.Run (false, true, false, false, isUdp, payloadSize, simulationTime);
+  if (throughput < 29 || throughput > 30)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "Disabled" << "\t\t" << "Short" << "\t\t\t\t" << "Long" << "\t\t\t\t" << "G-only" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  throughput = experiment.Run (false, false, false, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 23 || throughput > 24)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "Disabled" << "\t\t" << "Long" << "\t\t\t\t" << "Long" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  throughput = experiment.Run (false, false, true, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 23 || throughput > 24)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "Disabled" << "\t\t" << "Long" << "\t\t\t\t" << "Short" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  Config::SetDefault ("ns3::WifiRemoteStationManager::ProtectionMode", StringValue ("Rts-Cts"));
+  
+  throughput = experiment.Run (true, false, false, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 19 || throughput > 20)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "RTS/CTS" << "\t\t\t" << "Long" << "\t\t\t\t" << "Long" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  throughput = experiment.Run (true, false, true, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 19 || throughput > 20)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "RTS/CTS" << "\t\t\t" << "Long" << "\t\t\t\t" << "Short" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  Config::SetDefault ("ns3::WifiRemoteStationManager::ProtectionMode", StringValue ("Cts-To-Self"));
+  
+  throughput = experiment.Run (true, false, false, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 21 || throughput > 22)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "CTS-TO-SELF" << "\t\t" << "Long" << "\t\t\t\t" << "Long" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  throughput = experiment.Run (true, false, true, true, isUdp, payloadSize, simulationTime);
+  if (throughput < 21 || throughput > 22)
+    {
+      NS_LOG_ERROR ("Obtained throughput " << throughput << " is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "CTS-TO-SELF" << "\t\t" << "Long" << "\t\t\t\t" << "Short" << "\t\t\t\t" << "Mixed" << "\t\t" << throughput <<" Mbit/s" << std::endl;
+  
+  return 0;
+}
diff -Naur ns-3.24.1/examples/wireless/mixed-wireless.cc ns-3.25/examples/wireless/mixed-wireless.cc
--- ns-3.24.1/examples/wireless/mixed-wireless.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/mixed-wireless.cc	2016-03-23 21:36:53.000000000 -0700
@@ -149,7 +149,7 @@
   // our container
   //
   WifiHelper wifi;
-  NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
+  WifiMacHelper mac;
   mac.SetType ("ns3::AdhocWifiMac");
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue ("OfdmRate54Mbps"));
@@ -283,8 +283,8 @@
       //
       // Create an infrastructure network
       //
-      WifiHelper wifiInfra = WifiHelper::Default ();
-      NqosWifiMacHelper macInfra = NqosWifiMacHelper::Default ();
+      WifiHelper wifiInfra;
+      WifiMacHelper macInfra;
       wifiPhy.SetChannel (wifiChannel.Create ());
       // Create unique ssids for these networks
       std::string ssidString ("wifi-infra");
diff -Naur ns-3.24.1/examples/wireless/mixed-wireless.py ns-3.25/examples/wireless/mixed-wireless.py
--- ns-3.24.1/examples/wireless/mixed-wireless.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/mixed-wireless.py	2016-03-23 21:36:53.000000000 -0700
@@ -131,7 +131,7 @@
     #  our container
     # 
     wifi = ns.wifi.WifiHelper()
-    mac = ns.wifi.NqosWifiMacHelper.Default()
+    mac = ns.wifi.WifiMacHelper()
     mac.SetType("ns3::AdhocWifiMac")
     wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
                                   "DataMode", ns.core.StringValue("OfdmRate54Mbps"))
@@ -260,7 +260,7 @@
         wifiInfra = ns.wifi.WifiHelper.Default()
         wifiPhy.SetChannel(wifiChannel.Create())
         wifiInfra.SetRemoteStationManager('ns3::ArfWifiManager')
-        macInfra = ns.wifi.NqosWifiMacHelper.Default();
+        macInfra = ns.wifi.WifiMacHelper();
         macInfra.SetType("ns3::StaWifiMac",
                          "Ssid", ns.wifi.SsidValue(ssid),
                          "ActiveProbing", ns.core.BooleanValue(False))
diff -Naur ns-3.24.1/examples/wireless/multirate.cc ns-3.25/examples/wireless/multirate.cc
--- ns-3.24.1/examples/wireless/multirate.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/multirate.cc	2016-03-23 21:36:53.000000000 -0700
@@ -75,7 +75,7 @@
   Experiment ();
   Experiment (std::string name);
   Gnuplot2dDataset Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                        const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel, const MobilityHelper &mobility);
+                        const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel, const MobilityHelper &mobility);
 
   bool CommandSetup (int argc, char **argv);
   bool IsRouting () { return (enableRouting == 1) ? 1 : 0; }
@@ -371,7 +371,7 @@
 
 Gnuplot2dDataset
 Experiment::Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                 const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel, const MobilityHelper &mobility)
+                 const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel, const MobilityHelper &mobility)
 {
 
 
@@ -382,7 +382,7 @@
   YansWifiPhyHelper phy = wifiPhy;
   phy.SetChannel (wifiChannel.Create ());
 
-  NqosWifiMacHelper mac = wifiMac;
+  WifiMacHelper mac = wifiMac;
   NetDeviceContainer devices = wifi.Install (phy, mac, c);
 
 
@@ -576,8 +576,8 @@
   Gnuplot gnuplot;
   Gnuplot2dDataset dataset;
 
-  WifiHelper wifi = WifiHelper::Default ();
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiHelper wifi;
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   Ssid ssid = Ssid ("Testbed");
diff -Naur ns-3.24.1/examples/wireless/ofdm-vht-validation.cc ns-3.25/examples/wireless/ofdm-vht-validation.cc
--- ns-3.24.1/examples/wireless/ofdm-vht-validation.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/ofdm-vht-validation.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,8 +36,8 @@
 int main (int argc, char *argv[])
 {
   uint32_t FrameSize = 2000; //bytes
-  std::ofstream yansfile ("yans-frame-success-rate-n.plt");
-  std::ofstream nistfile ("nist-frame-success-rate-n.plt");
+  std::ofstream yansfile ("yans-frame-success-rate-ac.plt");
+  std::ofstream nistfile ("nist-frame-success-rate-ac.plt");
   std::vector <std::string> modes;
 
   modes.push_back ("VhtMcs0");
@@ -54,8 +54,8 @@
   cmd.AddValue ("FrameSize", "The frame size", FrameSize);
   cmd.Parse (argc, argv);
 
-  Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-n.eps");
-  Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-n.eps");
+  Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-ac.eps");
+  Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-ac.eps");
 
   Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
   Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
diff -Naur ns-3.24.1/examples/wireless/power-adaptation-distance.cc ns-3.25/examples/wireless/power-adaptation-distance.cc
--- ns-3.24.1/examples/wireless/power-adaptation-distance.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/power-adaptation-distance.cc	2016-03-23 21:36:53.000000000 -0700
@@ -172,7 +172,7 @@
       WifiMode mode = phy->GetMode (i);
       WifiTxVector txVector;
       txVector.SetMode (mode);
-      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency (), 0, 0), mode));
+      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency ()), mode));
     }
 }
 
@@ -343,9 +343,9 @@
   NodeContainer wifiStaNodes;
   wifiStaNodes.Create (1);
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
 
diff -Naur ns-3.24.1/examples/wireless/power-adaptation-interference.cc ns-3.25/examples/wireless/power-adaptation-interference.cc
--- ns-3.24.1/examples/wireless/power-adaptation-interference.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/power-adaptation-interference.cc	2016-03-23 21:36:53.000000000 -0700
@@ -168,7 +168,7 @@
       WifiMode mode = phy->GetMode (i);
       WifiTxVector txVector;
       txVector.SetMode (mode);
-      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency (), 0, 0), mode));
+      timeTable.push_back (std::make_pair (phy->CalculateTxDuration (packetSize, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency ()), mode));
     }
 }
 
@@ -381,9 +381,9 @@
   NodeContainer wifiStaNodes;
   wifiStaNodes.Create (2);
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
 
diff -Naur ns-3.24.1/examples/wireless/rate-adaptation-distance.cc ns-3.25/examples/wireless/rate-adaptation-distance.cc
--- ns-3.24.1/examples/wireless/rate-adaptation-distance.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/rate-adaptation-distance.cc	2016-03-23 21:36:53.000000000 -0700
@@ -43,6 +43,9 @@
  * Another example (moving towards the AP):
  * ./waf --run "rate-adaptation-distance --manager=ns3::MinstrelWifiManager --outputFileName=minstrel --stepsSize=1 --STA1_x=-200"
  *
+ * Example for HT rates with SGI and channel width of 40MHz:
+ * ./waf --run "rate-adaptation-distance --manager=ns3::MinstrelHtWifiManager --outputFileName=minstrelHt --shortGuardInterval=true --channelWidth=40"
+ *
  * To enable the log of rate changes:
  * export NS_LOG=RateAdaptationDistance=level_info
  */
@@ -134,27 +137,37 @@
 }
 
 
-void RateCallback (std::string path, uint32_t rate, Mac48Address dest)
+void RateCallback (std::string path, uint64_t rate, Mac48Address dest)
 {
-  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate);
+  NS_LOG_INFO ((Simulator::Now ()).GetSeconds () << " " << dest << " Rate " <<  rate / 1000000.0);
 }
 
 int main (int argc, char *argv[])
 {
-  uint32_t rtsThreshold = 2346;
-  std::string manager = "ns3::MinstrelWifiManager";
-  std::string outputFileName = "minstrel";
+  uint32_t rtsThreshold = 65535;
+  std::string staManager = "ns3::MinstrelHtWifiManager";
+  std::string apManager = "ns3::MinstrelHtWifiManager";
+  std::string standard = "802.11n-5GHz";
+  std::string outputFileName = "minstrelHT";
+  uint32_t BE_MaxAmpduSize = 65535;
+  bool shortGuardInterval = false;
+  uint32_t chWidth = 20;
   int ap1_x = 0;
   int ap1_y = 0;
   int sta1_x = 5;
   int sta1_y = 0;
-  int steps = 200;
+  int steps = 100;
   int stepsSize = 1;
   int stepsTime = 1;
 
   CommandLine cmd;
-  cmd.AddValue ("manager", "PRC Manager", manager);
+  cmd.AddValue ("staManager", "PRC Manager of the STA", staManager);
+  cmd.AddValue ("apManager", "PRC Manager of the AP", apManager);
+  cmd.AddValue ("standard", "Wifi Phy Standard", standard);
+  cmd.AddValue ("shortGuardInterval", "Enable Short Guard Interval in all stations", shortGuardInterval);
+  cmd.AddValue ("channelWidth", "Channel width of all the stations", chWidth);
   cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("BE_MaxAmpduSize", "BE Mac A-MPDU size", BE_MaxAmpduSize);
   cmd.AddValue ("outputFileName", "Output filename", outputFileName);
   cmd.AddValue ("steps", "How many different distances to try", steps);
   cmd.AddValue ("stepsTime", "Time on each step", stepsTime);
@@ -175,38 +188,114 @@
   NodeContainer wifiStaNodes;
   wifiStaNodes.Create (1);
 
-  WifiHelper wifi = WifiHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
-
   wifiPhy.SetChannel (wifiChannel.Create ());
 
+  wifiPhy.Set("ShortGuardEnabled", BooleanValue(shortGuardInterval));
+
   NetDeviceContainer wifiApDevices;
   NetDeviceContainer wifiStaDevices;
   NetDeviceContainer wifiDevices;
 
-  //Configure the STA node
-  wifi.SetRemoteStationManager (manager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
-
-  Ssid ssid = Ssid ("AP");
-  wifiMac.SetType ("ns3::StaWifiMac",
-                   "Ssid", SsidValue (ssid),
-                   "ActiveProbing", BooleanValue (false));
-  wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
-
-  //Configure the AP node
-  wifi.SetRemoteStationManager (manager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
-
-  ssid = Ssid ("AP");
-  wifiMac.SetType ("ns3::ApWifiMac",
-                   "Ssid", SsidValue (ssid));
-  wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+  WifiHelper wifi;
+  if (standard == "802.11a" || standard == "802.11b" || standard == "802.11g")
+    {
+      if (standard == "802.11a")
+        {
+          wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
+        }
+      else if (standard == "802.11b")
+        {
+          wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
+        }
+      else if (standard == "802.11g")
+        {
+          wifi.SetStandard (WIFI_PHY_STANDARD_80211g);
+        }
+      NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+
+      //Configure the STA node
+      wifi.SetRemoteStationManager (staManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      Ssid ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false));
+      wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+      //Configure the AP node
+      wifi.SetRemoteStationManager (apManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid));
+      wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+    }
+  else if (standard == "802.11n-2.4GHz" || standard == "802.11n-5GHz")
+    {
+      if (standard == "802.11n-2.4GHz")
+        {
+          wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
+        }
+      else if (standard == "802.11n-5GHz")
+        {
+          wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+        }
+
+      HtWifiMacHelper wifiMac = HtWifiMacHelper::Default ();
+
+      //Configure the STA node
+      wifi.SetRemoteStationManager (staManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      Ssid ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false),
+                       "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize));
+      wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+      //Configure the AP node
+      wifi.SetRemoteStationManager (apManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize));
+      wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+    }
+  else if (standard == "802.11ac")
+    {
+      wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
+      VhtWifiMacHelper wifiMac = VhtWifiMacHelper::Default ();
+
+      //Configure the STA node
+      wifi.SetRemoteStationManager (staManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      Ssid ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::StaWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "ActiveProbing", BooleanValue (false),
+                       "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize));
+      wifiStaDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiStaNodes.Get (0)));
+
+      //Configure the AP node
+      wifi.SetRemoteStationManager (apManager, "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+      ssid = Ssid ("AP");
+      wifiMac.SetType ("ns3::ApWifiMac",
+                       "Ssid", SsidValue (ssid),
+                       "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize));
+      wifiApDevices.Add (wifi.Install (wifiPhy, wifiMac, wifiApNodes.Get (0)));
+    }
 
   wifiDevices.Add (wifiStaDevices);
   wifiDevices.Add (wifiApDevices);
 
+  // Set channel width
+  Config::Set ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelWidth", UintegerValue (chWidth));
+
   // Configure the mobility.
   MobilityHelper mobility;
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
@@ -239,7 +328,7 @@
   ApplicationContainer apps_sink = sink.Install (wifiStaNodes.Get (0));
 
   OnOffHelper onoff ("ns3::UdpSocketFactory", InetSocketAddress (sinkAddress, port));
-  onoff.SetConstantRate (DataRate ("54Mb/s"), 1420);
+  onoff.SetConstantRate (DataRate ("200Mb/s"), 1420);
   onoff.SetAttribute ("StartTime", TimeValue (Seconds (0.5)));
   onoff.SetAttribute ("StopTime", TimeValue (Seconds (simuTime)));
   ApplicationContainer apps_source = onoff.Install (wifiApNodes.Get (0));
@@ -256,7 +345,7 @@
                    MakeCallback (&NodeStatistics::RxCallback, &atpCounter));
 
   //Callbacks to print every change of rate
-  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + manager + "/RateChange",
+  Config::Connect ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$" + apManager + "/RateChange",
                    MakeCallback (RateCallback));
 
   Simulator::Stop (Seconds (simuTime));
diff -Naur ns-3.24.1/examples/wireless/simple-ht-hidden-stations.cc ns-3.25/examples/wireless/simple-ht-hidden-stations.cc
--- ns-3.24.1/examples/wireless/simple-ht-hidden-stations.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/simple-ht-hidden-stations.cc	2016-03-23 21:36:53.000000000 -0700
@@ -52,6 +52,7 @@
   uint32_t payloadSize = 1472; //bytes
   uint64_t simulationTime = 10; //seconds
   uint32_t nMpdus = 1;
+  uint32_t maxAmpduSize = 0;
   bool enableRts = 0;
 
   CommandLine cmd;
@@ -72,6 +73,9 @@
 
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
 
+  //Set the maximum size for A-MPDU with regards to the payload size
+  maxAmpduSize = nMpdus * (payloadSize + 200);
+
   // Set the maximum wireless range to 5 meters in order to reproduce a hidden nodes scenario, i.e. the distance between hidden stations is larger than 5 meters
   Config::SetDefault ("ns3::RangePropagationLossModel::MaxRange", DoubleValue (5));
 
@@ -87,24 +91,16 @@
   phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
   phy.SetChannel (channel.Create ());
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+  WifiMacHelper mac;
 
   Ssid ssid = Ssid ("simple-mpdu-aggregation");
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
-
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled
-
-    }
-  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
-                                                                                             //i.e. nMpdus aggregated packets in an A-MPDU
+               "ActiveProbing", BooleanValue (false),
+               "BE_MaxAmpduSize", UintegerValue (maxAmpduSize));
 
   NetDeviceContainer staDevices;
   staDevices = wifi.Install (phy, mac, wifiStaNodes);
@@ -112,16 +108,8 @@
   mac.SetType ("ns3::ApWifiMac",
                "Ssid", SsidValue (ssid),
                "BeaconInterval", TimeValue (MicroSeconds (102400)),
-               "BeaconGeneration", BooleanValue (true));
-
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled
-
-    }
-  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes,
-                                                                                             //i.e. nMpdus aggregated packets in an A-MPDU
+               "BeaconGeneration", BooleanValue (true),
+               "BE_MaxAmpduSize", UintegerValue (maxAmpduSize));
 
   NetDeviceContainer apDevice;
   apDevice = wifi.Install (phy, mac, wifiApNode);
diff -Naur ns-3.24.1/examples/wireless/simple-mpdu-aggregation.cc ns-3.25/examples/wireless/simple-mpdu-aggregation.cc
--- ns-3.24.1/examples/wireless/simple-mpdu-aggregation.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/simple-mpdu-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,176 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2015 SÃ©bastien Deronne
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/wifi-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/internet-module.h"
-
-// This is a simple example in order to show how 802.11n MPDU aggregation feature works.
-// The throughput is obtained for a given number of aggregated MPDUs.
-//
-// The number of aggregated MPDUs can be chosen by the user through the nMpdus attibute.
-// A value of 1 means that no MPDU aggregation is performed.
-//
-// Example: ./waf --run "simple-mpdu-aggregation --nMpdus=64"
-//
-// Network topology:
-//
-//   Wifi 192.168.1.0
-//
-//        AP
-//   *    *
-//   |    |
-//   n1   n2
-//
-// Packets in this simulation aren't marked with a QosTag so they are considered
-// belonging to BestEffort Access Class (AC_BE).
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("SimpleMpduAggregation");
-
-int main (int argc, char *argv[])
-{
-  uint32_t payloadSize = 1472; //bytes
-  uint64_t simulationTime = 10; //seconds
-  uint32_t nMpdus = 1;
-  bool enableRts = 0;
-
-  CommandLine cmd;
-  cmd.AddValue ("nMpdus", "Number of aggregated MPDUs", nMpdus); //number of aggregated MPDUs specified by the user
-  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts);
-  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
-  cmd.Parse (argc, argv);
-
-  if (!enableRts)
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
-    }
-  else
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-    }
-
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-
-  NodeContainer wifiStaNode;
-  wifiStaNode.Create (1);
-  NodeContainer wifiApNode;
-  wifiApNode.Create (1);
-
-  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
-  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
-  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create ());
-
-  WifiHelper wifi = WifiHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
-
-  Ssid ssid = Ssid ("simple-mpdu-aggregation");
-  mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
-
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
-
-    }
-  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
-
-  NetDeviceContainer staDevice;
-  staDevice = wifi.Install (phy, mac, wifiStaNode);
-
-  mac.SetType ("ns3::ApWifiMac",
-               "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds (102400)),
-               "BeaconGeneration", BooleanValue (true));
-
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2);             //enable Block ACK when A-MPDU is enabled (i.e. nMpdus > 1)
-
-    }
-  mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                              "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 100))); //enable MPDU aggregation for AC_BE with a maximum aggregated size of nMpdus*(payloadSize+100) bytes, i.e. nMpdus aggregated packets in an A-MPDU
-
-  NetDeviceContainer apDevice;
-  apDevice = wifi.Install (phy, mac, wifiApNode);
-
-  /* Setting mobility model */
-  MobilityHelper mobility;
-  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-
-  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
-  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
-  mobility.SetPositionAllocator (positionAlloc);
-
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-
-  mobility.Install (wifiApNode);
-  mobility.Install (wifiStaNode);
-
-  /* Internet stack*/
-  InternetStackHelper stack;
-  stack.Install (wifiApNode);
-  stack.Install (wifiStaNode);
-
-  Ipv4AddressHelper address;
-
-  address.SetBase ("192.168.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer StaInterface;
-  StaInterface = address.Assign (staDevice);
-  Ipv4InterfaceContainer ApInterface;
-  ApInterface = address.Assign (apDevice);
-
-  /* Setting applications */
-  UdpServerHelper myServer (9);
-  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
-  serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime + 1));
-
-  UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
-  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
-  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
-  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-
-  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
-  clientApp.Start (Seconds (1.0));
-  clientApp.Stop (Seconds (simulationTime + 1));
-
-  Simulator::Stop (Seconds (simulationTime + 1));
-
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
-  std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-
-  return 0;
-}
diff -Naur ns-3.24.1/examples/wireless/simple-msdu-aggregation.cc ns-3.25/examples/wireless/simple-msdu-aggregation.cc
--- ns-3.24.1/examples/wireless/simple-msdu-aggregation.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/simple-msdu-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,164 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 MIRKO BANCHI
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * 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: Mirko Banchi <mk.banchi@gmail.com>
- *          SÃ©bastien Deronne <sebastien.deronne@gmail.com>
- */
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/wifi-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/internet-module.h"
-
-// This is a simple example in order to show how 802.11n MSDU aggregation feature works.
-// The throughput is obtained for a given number of aggregated MSDUs.
-//
-// The number of aggregated MSDUs can be chosen by the user through the nMsdus attibute.
-// A value of 1 means that no MSDU aggregation is performed.
-//
-// Example: ./waf --run "simple-msdu-aggregation --nMsdus=5"
-//
-// Network topology:
-//
-//   Wifi 192.168.1.0
-//
-//        AP
-//   *    *
-//   |    |
-//   n1   n2
-//
-// Packets in this simulation aren't marked with a QosTag so they are considered
-// belonging to BestEffort Access Class (AC_BE).
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("SimpleMsduAggregation");
-
-int main (int argc, char *argv[])
-{
-  uint32_t payloadSize = 1472; //bytes
-  uint64_t simulationTime = 10; //seconds
-  uint32_t nMsdus = 1;
-  bool enableRts = 0;
-
-  CommandLine cmd;
-  cmd.AddValue ("nMsdus", "Number of aggregated MSDUs", nMsdus); //number of aggregated MSDUs specified by the user
-  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts);
-  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
-  cmd.Parse (argc, argv);
-
-  if (!enableRts)
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
-    }
-  else
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-    }
-
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-
-  NodeContainer wifiStaNode;
-  wifiStaNode.Create (1);
-  NodeContainer wifiApNode;
-  wifiApNode.Create (1);
-
-  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
-  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
-  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create ());
-
-  WifiHelper wifi = WifiHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
-
-  Ssid ssid = Ssid ("simple-msdu-aggregation");
-  mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
-
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator",
-                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
-
-  NetDeviceContainer staDevice;
-  staDevice = wifi.Install (phy, mac, wifiStaNode);
-
-  mac.SetType ("ns3::ApWifiMac",
-               "Ssid", SsidValue (ssid));
-
-  mac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator",
-                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //enable MSDU aggregation for AC_BE with a maximum aggregated size of nMsdus*(payloadSize+100) bytes, i.e. nMsdus aggregated packets in an A-MSDU
-
-  NetDeviceContainer apDevice;
-  apDevice = wifi.Install (phy, mac, wifiApNode);
-
-  /* Setting mobility model */
-  MobilityHelper mobility;
-  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-
-  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
-  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
-  mobility.SetPositionAllocator (positionAlloc);
-
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-
-  mobility.Install (wifiApNode);
-  mobility.Install (wifiStaNode);
-
-  /* Internet stack*/
-  InternetStackHelper stack;
-  stack.Install (wifiApNode);
-  stack.Install (wifiStaNode);
-
-  Ipv4AddressHelper address;
-
-  address.SetBase ("192.168.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer StaInterface;
-  StaInterface = address.Assign (staDevice);
-  Ipv4InterfaceContainer ApInterface;
-  ApInterface = address.Assign (apDevice);
-
-  /* Setting applications */
-  UdpServerHelper myServer (9);
-  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
-  serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime + 1));
-
-  UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
-  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
-  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
-  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-
-  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
-  clientApp.Start (Seconds (1.0));
-  clientApp.Stop (Seconds (simulationTime + 1));
-
-  Simulator::Stop (Seconds (simulationTime + 1));
-
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
-  std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-
-  return 0;
-}
diff -Naur ns-3.24.1/examples/wireless/simple-two-level-aggregation.cc ns-3.25/examples/wireless/simple-two-level-aggregation.cc
--- ns-3.24.1/examples/wireless/simple-two-level-aggregation.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/simple-two-level-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,214 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2015 SÃ©bastien Deronne
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/wifi-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/internet-module.h"
-
-// This is a simple example in order to show how 802.11n two-level aggregation feature works.
-// Two-level aggregation is the simultaneous use of MSDU and MPDU aggregation schemes (known as one-level aggregation techniques).
-//
-// The throughput is obtained for a given number of aggregated MSDUs and MPDUs.
-// The number of aggregated MSDUs and MPDUs can be chosen by the user through the nMsdus and nMpdus attibutes, respectively.
-//
-// Example: ./waf --run "simple-two-level-aggregation --nMsdus=3 --nMpdus=8"
-//
-// Network topology:
-//
-//   Wifi 192.168.1.0
-//
-//        AP
-//   *    *
-//   |    |
-//   n1   n2
-//
-// Packets in this simulation aren't marked with a QosTag so they are considered
-// belonging to BestEffort Access Class (AC_BE).
-//
-// Throughput gets higher as either nMsdus or nMpdus is increased (one-level aggregation),
-// or when both nMsdus and nMpdus are increases (two-level aggregation).
-// MSDU aggregation offers a better header reduction compare to MPDU aggregation,
-// while MPDU aggregation is more robust against transmission errors than MSDU aggregation.
-// The good setting of nMsdu and nMpdus will depends on various factors (payload size, channel conditions, ...).
-// Since this example considers an ideal channel, the highest throughput is obtained with the largest values for nMsdus and nMpdus parameters.
-// Users should nevertheless take care that the standard rules limit the maximum MSDU size to 7935 bytes and the MPDU size to 65535 bytes.
-// Consequently, more packets should be aggregated if their payload is small with standard-compliant parameters.
-// Users should also note that the maximum duration of the frame is limited by the standard.
-// As a result, higher values for nMsdus and nMpdus may not always provide throughput improvements.
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("SimpleTwoLevelAggregation");
-
-int main (int argc, char *argv[])
-{
-  uint32_t payloadSize = 1472; //bytes
-  uint64_t simulationTime = 10; //seconds
-  uint32_t nMsdus = 1;
-  uint32_t nMpdus = 1;
-  bool enableRts = 0;
-
-  CommandLine cmd;
-  cmd.AddValue ("nMsdus", "Number of aggregated MSDUs", nMsdus); //number of aggregated MSDUs specified by the user
-  cmd.AddValue ("nMpdus", "Number of aggregated MPDUs", nMpdus); //number of aggregated MPDUs specified by the user
-  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
-  cmd.AddValue ("enableRts", "Enable RTS/CTS", enableRts);
-  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
-  cmd.Parse (argc, argv);
-
-  if (!enableRts)
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
-    }
-  else
-    {
-      Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("0"));
-    }
-
-  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("990000"));
-
-  NodeContainer wifiStaNode;
-  wifiStaNode.Create (1);
-  NodeContainer wifiApNode;
-  wifiApNode.Create (1);
-
-  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
-  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
-  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
-  phy.SetChannel (channel.Create ());
-
-  WifiHelper wifi = WifiHelper::Default ();
-  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
-  //We consider a constant bitrate since HT rate adaptation algorithms are not supported yet in the simulator
-  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
-                                "DataMode", StringValue ("HtMcs7"),
-                                "ControlMode", StringValue ("HtMcs0"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
-
-  Ssid ssid = Ssid ("simple-two-level-aggregation");
-  mac.SetType ("ns3::StaWifiMac",
-               "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
-
-
-  //Enable aggregation at the station side
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable BlockAck when A-MPDU is used
-    }
-  if (nMsdus > 0)
-    {
-      mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                                  "MaxAmpduSize", UintegerValue (nMpdus * (nMsdus * (payloadSize + 100)))); //Set the maximum size for A-MPDU with regards to the payload size and the number of MSDUs expected in each MPDU.
-    }
-  else //MPDU aggregation only (one-level aggregation)
-    {
-      mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                                  "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 200))); //Set the maximum size for A-MPDU with regards to the payload size
-    }
-  mac.SetMsduAggregatorForAc (AC_BE,"ns3::MsduStandardAggregator",
-                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //Set the maximum size for A-MSDU with regards to the payload size
-
-
-  NetDeviceContainer staDevice;
-  staDevice = wifi.Install (phy, mac, wifiStaNode);
-
-  mac.SetType ("ns3::ApWifiMac",
-               "Ssid", SsidValue (ssid),
-               "BeaconInterval", TimeValue (MicroSeconds (102400)),
-               "BeaconGeneration", BooleanValue (true));
-
-  //Enable aggregation at the AP side
-  if (nMpdus > 1)
-    {
-      mac.SetBlockAckThresholdForAc (AC_BE, 2); //enable BlockAck when A-MPDU is used
-    }
-  if (nMsdus > 0)
-    {
-      mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                                  "MaxAmpduSize", UintegerValue (nMpdus * (nMsdus * (payloadSize + 100)))); //Set the maximum size for A-MPDU according to the payload size and the number of MSDUs expected in each MPDU.
-    }
-  else //MPDU aggregation only (one-level aggregation)
-    {
-      mac.SetMpduAggregatorForAc (AC_BE,"ns3::MpduStandardAggregator",
-                                  "MaxAmpduSize", UintegerValue (nMpdus * (payloadSize + 200))); //Set the maximum size for A-MPDU with regards to the payload size
-    }
-  mac.SetMsduAggregatorForAc (AC_BE,"ns3::MsduStandardAggregator",
-                              "MaxAmsduSize", UintegerValue (nMsdus * (payloadSize + 100))); //Set the maximum size for A-MSDU with regards to the payload size
-
-  NetDeviceContainer apDevice;
-  apDevice = wifi.Install (phy, mac, wifiApNode);
-
-  /* Setting mobility model */
-  MobilityHelper mobility;
-  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
-
-  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
-  positionAlloc->Add (Vector (1.0, 0.0, 0.0));
-  mobility.SetPositionAllocator (positionAlloc);
-
-  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
-
-  mobility.Install (wifiApNode);
-  mobility.Install (wifiStaNode);
-
-  /* Internet stack*/
-  InternetStackHelper stack;
-  stack.Install (wifiApNode);
-  stack.Install (wifiStaNode);
-
-  Ipv4AddressHelper address;
-
-  address.SetBase ("192.168.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer StaInterface;
-  StaInterface = address.Assign (staDevice);
-  Ipv4InterfaceContainer ApInterface;
-  ApInterface = address.Assign (apDevice);
-
-  /* Setting applications */
-  UdpServerHelper myServer (9);
-  ApplicationContainer serverApp = myServer.Install (wifiStaNode.Get (0));
-  serverApp.Start (Seconds (0.0));
-  serverApp.Stop (Seconds (simulationTime + 1));
-
-  UdpClientHelper myClient (StaInterface.GetAddress (0), 9);
-  myClient.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
-  myClient.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
-  myClient.SetAttribute ("PacketSize", UintegerValue (payloadSize));
-
-  ApplicationContainer clientApp = myClient.Install (wifiApNode.Get (0));
-  clientApp.Start (Seconds (1.0));
-  clientApp.Stop (Seconds (simulationTime + 1));
-
-  Simulator::Stop (Seconds (simulationTime + 1));
-
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverApp.Get (0))->GetReceived ();
-  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
-  std::cout << "Throughput: " << throughput << " Mbit/s" << '\n';
-
-  return 0;
-}
diff -Naur ns-3.24.1/examples/wireless/vht-wifi-network.cc ns-3.25/examples/wireless/vht-wifi-network.cc
--- ns-3.24.1/examples/wireless/vht-wifi-network.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/vht-wifi-network.cc	2016-03-23 21:36:53.000000000 -0700
@@ -94,13 +94,14 @@
               // Set guard interval
               phy.Set ("ShortGuardEnabled", BooleanValue (k));
 
-              WifiHelper wifi = WifiHelper::Default ();
+              WifiHelper wifi;
               wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
-              VhtWifiMacHelper mac = VhtWifiMacHelper::Default ();
+              WifiMacHelper mac;
                 
-              StringValue DataRate = VhtWifiMacHelper::DataRateForMcs (i);
-              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", DataRate,
-                                            "ControlMode", DataRate);
+              std::ostringstream oss;
+              oss << "VhtMcs" << i;
+              wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager","DataMode", StringValue (oss.str ()),
+                                            "ControlMode", StringValue (oss.str ()));
                 
               Ssid ssid = Ssid ("ns3-80211ac");
 
diff -Naur ns-3.24.1/examples/wireless/wifi-adhoc.cc ns-3.25/examples/wireless/wifi-adhoc.cc
--- ns-3.24.1/examples/wireless/wifi-adhoc.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-adhoc.cc	2016-03-23 21:36:53.000000000 -0700
@@ -37,7 +37,7 @@
   Experiment ();
   Experiment (std::string name);
   Gnuplot2dDataset Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                        const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
+                        const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
 private:
   void ReceivePacket (Ptr<Socket> socket);
   void SetPosition (Ptr<Node> node, Vector position);
@@ -112,7 +112,7 @@
 
 Gnuplot2dDataset
 Experiment::Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                 const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
+                 const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
 {
   m_bytesTotal = 0;
 
@@ -125,7 +125,7 @@
   YansWifiPhyHelper phy = wifiPhy;
   phy.SetChannel (wifiChannel.Create ());
 
-  NqosWifiMacHelper mac = wifiMac;
+  WifiMacHelper mac = wifiMac;
   NetDeviceContainer devices = wifi.Install (phy, mac, c);
 
   MobilityHelper mobility;
@@ -172,9 +172,9 @@
   Gnuplot gnuplot = Gnuplot ("reference-rates.png");
 
   Experiment experiment;
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   Gnuplot2dDataset dataset;
diff -Naur ns-3.24.1/examples/wireless/wifi-aggregation.cc ns-3.25/examples/wireless/wifi-aggregation.cc
--- ns-3.24.1/examples/wireless/wifi-aggregation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/wireless/wifi-aggregation.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,307 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 SÃ©bastien Deronne
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: SÃ©bastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/internet-module.h"
+
+// This is an example that illustrates how 802.11n aggregation is configured.
+// It defines 4 independant Wi-Fi networks (working on different channels).
+// Each network contains one access point and one station. Each station
+// continously transmits data packets to its respective AP.
+//
+// Network topology (numbers in parentheses are channel numbers):
+//
+//  Network A (36)   Network B (40)   Network C (44)   Network D (48)
+//   *      *          *      *         *      *          *      *
+//   |      |          |      |         |      |          |      |
+//  AP A   STA A      AP B   STA B     AP C   STA C      AP D   STA D
+//
+// The aggregation parameters are configured differently on the 4 stations:
+// - station A uses default aggregation parameter values (A-MSDU disabled, A-MPDU enabled with maximum size of 65 kB);
+// - station B doesn't use aggregation (both A-MPDU and A-MSDU are disabled);
+// - station C enables A-MSDU (with maximum size of 8 kB) but disables A-MPDU;
+// - station C uses two-level aggregation (A-MPDU with maximum size of 32 kB and A-MSDU with maximum size of 4 kB).
+//
+// Packets in this simulation aren't marked with a QosTag so they
+// are considered belonging to BestEffort Access Class (AC_BE).
+//
+// The user can select the distance between the stations and the APs and can enable/disable the RTS/CTS mechanism.
+// Example: ./waf --run "wifi-aggregation --distance=10 --enableRts=0 --simulationTime=20"
+//
+// The output prints the throughput measured for the 4 cases/networks decribed above. When default aggregation parameters are enabled, the
+// maximum A-MPDU size is 65 kB and the throughput is maximal. When aggregation is disabled, the thoughput is about the half of the
+// physical bitrate as in legacy wifi networks. When only A-MSDU is enabled, the throughput is increased but is not maximal, since the maximum
+// A-MSDU size is limited to 7935 bytes (whereas the maximum A-MPDU size is limited to 65535 bytes). When A-MSDU and A-MPDU are both enabled
+// (= two-level aggregation), the throughput is slightly smaller than the first scenario since we set a smaller maximum A-MPDU size.
+//
+// When the distance is increased, the frame error rate gets higher, and the output shows how it affects the throughput for the 4 networks.
+// Even through A-MSDU has less overheads than A-MPDU, A-MSDU is less robust against transmission errors than A-MPDU. When the distance is
+// augmented, the throughput for the third scenario is more affected than the throughput obtained in other networks.
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("SimpleMpduAggregation");
+
+int main (int argc, char *argv[])
+{
+  uint32_t payloadSize = 1472; //bytes
+  uint64_t simulationTime = 10; //seconds
+  double distance = 5; //meters
+  bool enablePcap = 0;
+
+  CommandLine cmd;
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("distance", "Distance in meters between the station and the access point", distance);
+  cmd.AddValue ("enablePcap", "Enable/disable pcap file generation", enablePcap);
+  cmd.Parse (argc, argv);
+
+  NodeContainer wifiStaNode;
+  wifiStaNode.Create (4);
+  NodeContainer wifiApNode;
+  wifiApNode.Create (4);
+
+  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();
+  YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
+  phy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetChannel (channel.Create ());
+
+  WifiHelper wifi;
+  wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+  wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("HtMcs7"), "ControlMode", StringValue ("HtMcs0"));
+  WifiMacHelper mac;
+  
+  NetDeviceContainer staDeviceA, staDeviceB, staDeviceC, staDeviceD, apDeviceA, apDeviceB, apDeviceC, apDeviceD;
+  Ssid ssid;
+
+  //Network A
+  ssid = Ssid ("network-A");
+  phy.Set ("ChannelNumber", UintegerValue(36));
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false));
+  staDeviceA = wifi.Install (phy, mac, wifiStaNode.Get(0));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceA = wifi.Install (phy, mac, wifiApNode.Get(0));
+  
+  //Network B
+  ssid = Ssid ("network-B");
+  phy.Set ("ChannelNumber", UintegerValue(40));
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false),
+               "BE_MaxAmpduSize", UintegerValue (0)); //Disable A-MPDU
+
+  staDeviceB = wifi.Install (phy, mac, wifiStaNode.Get(1));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceB = wifi.Install (phy, mac, wifiApNode.Get(1));
+  
+  //Network C
+  ssid = Ssid ("network-C");
+  phy.Set ("ChannelNumber", UintegerValue(44));
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false),
+               "BE_MaxAmpduSize", UintegerValue (0), //Disable A-MPDU
+               "BE_MaxAmsduSize", UintegerValue (7935)); //Enable A-MSDU with the highest maximum size allowed by the standard (7935 bytes)
+
+  staDeviceC = wifi.Install (phy, mac, wifiStaNode.Get(2));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceC = wifi.Install (phy, mac, wifiApNode.Get(2));
+  
+  //Network D
+  ssid = Ssid ("network-D");
+  phy.Set ("ChannelNumber", UintegerValue(48));
+  mac.SetType ("ns3::StaWifiMac",
+               "Ssid", SsidValue (ssid),
+               "ActiveProbing", BooleanValue (false),
+               "BE_MaxAmpduSize", UintegerValue (32768), //Enable A-MPDU with a smaller size than the default one
+               "BE_MaxAmsduSize", UintegerValue (3839)); //Enable A-MSDU with the smallest maximum size allowed by the standard (3839 bytes)
+
+  staDeviceD = wifi.Install (phy, mac, wifiStaNode.Get(3));
+
+  mac.SetType ("ns3::ApWifiMac",
+               "Ssid", SsidValue (ssid),
+               "BeaconInterval", TimeValue (MicroSeconds (102400)),
+               "BeaconGeneration", BooleanValue (true));
+  apDeviceD = wifi.Install (phy, mac, wifiApNode.Get(3));
+
+  /* Setting mobility model */
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+
+  //Set position for APs
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (10.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (20.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (30.0, 0.0, 0.0));
+  //Set position for STAs
+  positionAlloc->Add (Vector (distance, 0.0, 0.0));
+  positionAlloc->Add (Vector (10 + distance, 0.0, 0.0));
+  positionAlloc->Add (Vector (20 + distance, 0.0, 0.0));
+  positionAlloc->Add (Vector (30 + distance, 0.0, 0.0));
+  //Remark: while we set these positions 10 meters apart, the networks do not interact
+  //and the only variable that affects transmission performance is the distance.
+  
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.Install (wifiApNode);
+  mobility.Install (wifiStaNode);
+
+  /* Internet stack */
+  InternetStackHelper stack;
+  stack.Install (wifiApNode);
+  stack.Install (wifiStaNode);
+
+  Ipv4AddressHelper address;
+
+  address.SetBase ("192.168.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterfaceA;
+  StaInterfaceA = address.Assign (staDeviceA);
+  Ipv4InterfaceContainer ApInterfaceA;
+  ApInterfaceA = address.Assign (apDeviceA);
+  
+  address.SetBase ("192.168.2.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterfaceB;
+  StaInterfaceB = address.Assign (staDeviceB);
+  Ipv4InterfaceContainer ApInterfaceB;
+  ApInterfaceB = address.Assign (apDeviceB);
+  
+  address.SetBase ("192.168.3.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterfaceC;
+  StaInterfaceC = address.Assign (staDeviceC);
+  Ipv4InterfaceContainer ApInterfaceC;
+  ApInterfaceC = address.Assign (apDeviceC);
+  
+  address.SetBase ("192.168.4.0", "255.255.255.0");
+  Ipv4InterfaceContainer StaInterfaceD;
+  StaInterfaceD = address.Assign (staDeviceD);
+  Ipv4InterfaceContainer ApInterfaceD;
+  ApInterfaceD = address.Assign (apDeviceD);
+
+  /* Setting applications */
+  UdpServerHelper myServerA (9);
+  ApplicationContainer serverAppA = myServerA.Install (wifiStaNode.Get (0));
+  serverAppA.Start (Seconds (0.0));
+  serverAppA.Stop (Seconds (simulationTime + 1));
+
+  UdpClientHelper myClientA (StaInterfaceA.GetAddress (0), 9);
+  myClientA.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClientA.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClientA.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+  ApplicationContainer clientAppA = myClientA.Install (wifiApNode.Get (0));
+  clientAppA.Start (Seconds (1.0));
+  clientAppA.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerB (9);
+  ApplicationContainer serverAppB = myServerB.Install (wifiStaNode.Get (1));
+  serverAppB.Start (Seconds (0.0));
+  serverAppB.Stop (Seconds (simulationTime + 1));
+
+  UdpClientHelper myClientB (StaInterfaceB.GetAddress (0), 9);
+  myClientB.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClientB.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClientB.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+  ApplicationContainer clientAppB = myClientB.Install (wifiApNode.Get (1));
+  clientAppB.Start (Seconds (1.0));
+  clientAppB.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerC (9);
+  ApplicationContainer serverAppC = myServerC.Install (wifiStaNode.Get (2));
+  serverAppC.Start (Seconds (0.0));
+  serverAppC.Stop (Seconds (simulationTime + 1));
+
+  UdpClientHelper myClientC (StaInterfaceC.GetAddress (0), 9);
+  myClientC.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClientC.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClientC.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+  ApplicationContainer clientAppC = myClientC.Install (wifiApNode.Get (2));
+  clientAppC.Start (Seconds (1.0));
+  clientAppC.Stop (Seconds (simulationTime + 1));
+  
+  UdpServerHelper myServerD (9);
+  ApplicationContainer serverAppD = myServerD.Install (wifiStaNode.Get (3));
+  serverAppD.Start (Seconds (0.0));
+  serverAppD.Stop (Seconds (simulationTime + 1));
+
+  UdpClientHelper myClientD (StaInterfaceD.GetAddress (0), 9);
+  myClientD.SetAttribute ("MaxPackets", UintegerValue (4294967295u));
+  myClientD.SetAttribute ("Interval", TimeValue (Time ("0.00002"))); //packets/s
+  myClientD.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+
+  ApplicationContainer clientAppD = myClientD.Install (wifiApNode.Get (3));
+  clientAppD.Start (Seconds (1.0));
+  clientAppD.Stop (Seconds (simulationTime + 1));
+  
+  if (enablePcap)
+    {
+      phy.EnablePcap ("AP_A", apDeviceA.Get (0));
+      phy.EnablePcap ("STA_A", staDeviceA.Get (0));
+      phy.EnablePcap ("AP_B", apDeviceB.Get (0));
+      phy.EnablePcap ("STA_B", staDeviceB.Get (0));
+      phy.EnablePcap ("AP_C", apDeviceC.Get (0));
+      phy.EnablePcap ("STA_C", staDeviceC.Get (0));
+      phy.EnablePcap ("AP_D", apDeviceD.Get (0));
+      phy.EnablePcap ("STA_D", staDeviceD.Get (0));
+    }
+
+  Simulator::Stop (Seconds (simulationTime + 1));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  /* Show results */
+  uint32_t totalPacketsThrough = DynamicCast<UdpServer> (serverAppA.Get (0))->GetReceived ();
+  double throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput with default configuration (A-MPDU aggregation enabled, 65kB): " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppB.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput with aggregation disabled: " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppC.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput with A-MPDU disabled and A-MSDU enabled (8kB): " << throughput << " Mbit/s" << '\n';
+  
+  totalPacketsThrough = DynamicCast<UdpServer> (serverAppD.Get (0))->GetReceived ();
+  throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0);
+  std::cout << "Throughput with A-MPDU enabled (32kB) and A-MSDU enabled (4kB): " << throughput << " Mbit/s" << '\n';
+
+  return 0;
+}
diff -Naur ns-3.24.1/examples/wireless/wifi-ap.cc ns-3.25/examples/wireless/wifi-ap.cc
--- ns-3.24.1/examples/wireless/wifi-ap.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-ap.cc	2016-03-23 21:36:53.000000000 -0700
@@ -128,7 +128,7 @@
   // disable fragmentation
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   MobilityHelper mobility;
   NodeContainer stas;
   NodeContainer ap;
@@ -142,7 +142,7 @@
   packetSocket.Install (stas);
   packetSocket.Install (ap);
 
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
diff -Naur ns-3.24.1/examples/wireless/wifi-ap.py ns-3.25/examples/wireless/wifi-ap.py
--- ns-3.24.1/examples/wireless/wifi-ap.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-ap.py	2016-03-23 21:36:53.000000000 -0700
@@ -124,7 +124,7 @@
 
     ssid = ns.wifi.Ssid("wifi-default")
     wifi.SetRemoteStationManager("ns3::ArfWifiManager")
-    wifiMac = ns.wifi.NqosWifiMacHelper.Default()
+    wifiMac = ns.wifi.WifiMacHelper()
 
     # setup stas.
     wifiMac.SetType("ns3::StaWifiMac",
diff -Naur ns-3.24.1/examples/wireless/wifi-blockack.cc ns-3.25/examples/wireless/wifi-blockack.cc
--- ns-3.24.1/examples/wireless/wifi-blockack.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-blockack.cc	2016-03-23 21:36:53.000000000 -0700
@@ -19,7 +19,7 @@
  */
 
 /**
- * This is a simple example in order to show how 802.11n compressed block ack mechanism could be used.
+ * This is a simple example in order to show how 802.11e compressed block ack mechanism could be used.
  *
  * Network topology:
  * 
@@ -62,25 +62,27 @@
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetChannel (channel.Create ());
 
-  WifiHelper wifi = WifiHelper::Default ();
-  QosWifiMacHelper mac = QosWifiMacHelper::Default ();
+  WifiHelper wifi;
+  WifiMacHelper mac;
   /* disable fragmentation */
   wifi.SetRemoteStationManager ("ns3::AarfWifiManager", "FragmentationThreshold", UintegerValue (2500));
 
   Ssid ssid ("My-network");
 
   mac.SetType ("ns3::StaWifiMac",
+               "QosSupported", BooleanValue (true),
                "Ssid", SsidValue (ssid),
-               "ActiveProbing", BooleanValue (false));
+               "ActiveProbing", BooleanValue (false),
   /* setting blockack threshold for sta's BE queue */
-  mac.SetBlockAckThresholdForAc (AC_BE, 2);
-  /* setting block inactivity timeout to 3*1024 = 3072 microseconds */ 
-  //mac.SetBlockAckInactivityTimeoutForAc (AC_BE, 3);
+               "BE_BlockAckThreshold", UintegerValue (2),
+  /* setting block inactivity timeout to 3*1024 = 3072 microseconds */
+               "BE_BlockAckInactivityTimeout", UintegerValue (3));
   NetDeviceContainer staDevice = wifi.Install (phy, mac, sta);
 
   mac.SetType ("ns3::ApWifiMac",
-               "Ssid", SsidValue (ssid));
-  mac.SetBlockAckThresholdForAc (AC_BE, 0);
+               "QosSupported", BooleanValue (true),
+               "Ssid", SsidValue (ssid),
+               "BE_BlockAckThreshold", UintegerValue (0));
   NetDeviceContainer apDevice = wifi.Install (phy, mac, ap);
 
   /* Setting mobility model */
diff -Naur ns-3.24.1/examples/wireless/wifi-clear-channel-cmu.cc ns-3.25/examples/wireless/wifi-clear-channel-cmu.cc
--- ns-3.24.1/examples/wireless/wifi-clear-channel-cmu.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-clear-channel-cmu.cc	2016-03-23 21:36:53.000000000 -0700
@@ -40,7 +40,7 @@
   Experiment ();
   Experiment (std::string name);
   uint32_t Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
+                const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
 private:
   void ReceivePacket (Ptr<Socket> socket);
   void SetPosition (Ptr<Node> node, Vector position);
@@ -116,7 +116,7 @@
 
 uint32_t
 Experiment::Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
-                 const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
+                 const WifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
 {
   m_pktsTotal = 0;
 
@@ -129,7 +129,7 @@
   YansWifiPhyHelper phy = wifiPhy;
   phy.SetChannel (wifiChannel.Create ());
 
-  NqosWifiMacHelper mac = wifiMac;
+  WifiMacHelper mac = wifiMac;
   NetDeviceContainer devices = wifi.Install (phy, mac, c);
 
   MobilityHelper mobility;
@@ -194,7 +194,7 @@
  
           WifiHelper wifi;
           wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-          NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+          WifiMacHelper wifiMac;
           Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
                               StringValue (modes[i]));
           wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
diff -Naur ns-3.24.1/examples/wireless/wifi-hidden-terminal.cc ns-3.25/examples/wireless/wifi-hidden-terminal.cc
--- ns-3.24.1/examples/wireless/wifi-hidden-terminal.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-hidden-terminal.cc	2016-03-23 21:36:53.000000000 -0700
@@ -76,7 +76,7 @@
                                 "ControlMode",StringValue ("DsssRate1Mbps"));
   YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
   wifiPhy.SetChannel (wifiChannel);
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac"); // use ad-hoc MAC
   NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, nodes);
 
diff -Naur ns-3.24.1/examples/wireless/wifi-simple-adhoc.cc ns-3.25/examples/wireless/wifi-simple-adhoc.cc
--- ns-3.24.1/examples/wireless/wifi-simple-adhoc.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-simple-adhoc.cc	2016-03-23 21:36:53.000000000 -0700
@@ -146,8 +146,8 @@
   wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue (rss));
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
diff -Naur ns-3.24.1/examples/wireless/wifi-simple-adhoc-grid.cc ns-3.25/examples/wireless/wifi-simple-adhoc-grid.cc
--- ns-3.24.1/examples/wireless/wifi-simple-adhoc-grid.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-simple-adhoc-grid.cc	2016-03-23 21:36:53.000000000 -0700
@@ -171,8 +171,8 @@
   wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add an upper mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
diff -Naur ns-3.24.1/examples/wireless/wifi-simple-infra.cc ns-3.25/examples/wireless/wifi-simple-infra.cc
--- ns-3.24.1/examples/wireless/wifi-simple-infra.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-simple-infra.cc	2016-03-23 21:36:53.000000000 -0700
@@ -147,13 +147,13 @@
   wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue (rss));
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
 
-  // Setup the rest of the upper mac
+  // Setup the rest of the mac
   Ssid ssid = Ssid ("wifi-default");
   // setup sta.
   wifiMac.SetType ("ns3::StaWifiMac",
diff -Naur ns-3.24.1/examples/wireless/wifi-simple-interference.cc ns-3.25/examples/wireless/wifi-simple-interference.cc
--- ns-3.24.1/examples/wireless/wifi-simple-interference.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-simple-interference.cc	2016-03-23 21:36:53.000000000 -0700
@@ -200,8 +200,8 @@
   wifiChannel.AddPropagationLoss ("ns3::LogDistancePropagationLossModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
diff -Naur ns-3.24.1/examples/wireless/wifi-sleep.cc ns-3.25/examples/wireless/wifi-sleep.cc
--- ns-3.24.1/examples/wireless/wifi-sleep.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-sleep.cc	2016-03-23 21:36:53.000000000 -0700
@@ -146,8 +146,8 @@
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and set the selected tx power level
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and set the selected tx power level
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ArfWifiManager", "DefaultTxPowerLevel", UintegerValue (txPowerLevel));
   // Set it to adhoc mode
   wifiMac.SetType ("ns3::AdhocWifiMac");
diff -Naur ns-3.24.1/examples/wireless/wifi-tcp.cc ns-3.25/examples/wireless/wifi-tcp.cc
--- ns-3.24.1/examples/wireless/wifi-tcp.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/examples/wireless/wifi-tcp.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,197 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015, IMDEA Networks Institute
+ *
+ * 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: Hany Assasa <hany.assasa@gmail.com>
+.*
+ * This is a simple example to test TCP over 802.11n (with MPDU aggregation enabled).
+ *
+ * Network topology:
+ *
+ *   Ap    STA
+ *   *      *
+ *   |      |
+ *   n1     n2
+ *
+ * In this example, an HT station sends TCP packets to the access point. 
+ * We report the total throughput received during a window of 100ms. 
+ * The user can specify the application data rate and choose the variant
+ * of TCP i.e. congestion control algorithm to use.
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/wifi-module.h"
+
+NS_LOG_COMPONENT_DEFINE ("wifi-tcp");
+
+using namespace ns3;
+
+Ptr<PacketSink> sink;                         /* Pointer to the packet sink application */
+uint64_t lastTotalRx = 0;                     /* The value of the last total received bytes */
+
+void
+CalculateThroughput ()
+{
+  Time now = Simulator::Now ();                                         /* Return the simulator's virtual time. */
+  double cur = (sink->GetTotalRx() - lastTotalRx) * (double) 8/1e5;     /* Convert Application RX Packets to MBits. */
+  std::cout << now.GetSeconds () << "s: \t" << cur << " Mbit/s" << std::endl;
+  lastTotalRx = sink->GetTotalRx ();
+  Simulator::Schedule (MilliSeconds (100), &CalculateThroughput);
+}
+
+int
+main(int argc, char *argv[])
+{
+  uint32_t payloadSize = 1472;                       /* Transport layer payload size in bytes. */
+  std::string dataRate = "100Mbps";                  /* Application layer datarate. */
+  std::string tcpVariant = "ns3::TcpNewReno";        /* TCP variant type. */
+  std::string phyRate = "HtMcs7";                    /* Physical layer bitrate. */
+  double simulationTime = 10;                        /* Simulation time in seconds. */
+  bool pcapTracing = false;                          /* PCAP Tracing is enabled or not. */
+
+  /* Command line argument parser setup. */
+  CommandLine cmd;
+  cmd.AddValue ("payloadSize", "Payload size in bytes", payloadSize);
+  cmd.AddValue ("dataRate", "Application data ate", dataRate);
+  cmd.AddValue ("tcpVariant", "Transport protocol to use: TcpTahoe, TcpReno, TcpNewReno, TcpWestwood, TcpWestwoodPlus ", tcpVariant);
+  cmd.AddValue ("phyRate", "Physical layer bitrate", phyRate);
+  cmd.AddValue ("simulationTime", "Simulation time in seconds", simulationTime);
+  cmd.AddValue ("pcap", "Enable/disable PCAP Tracing", pcapTracing);
+  cmd.Parse (argc, argv);
+
+  /* No fragmentation and no RTS/CTS */
+  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("999999"));
+  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("999999"));
+
+  /* Configure TCP Options */
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (payloadSize));
+
+  WifiMacHelper wifiMac;
+  WifiHelper wifiHelper;
+  wifiHelper.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+
+  /* Set up Legacy Channel */
+  YansWifiChannelHelper wifiChannel ;
+  wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
+  wifiChannel.AddPropagationLoss ("ns3::FriisPropagationLossModel", "Frequency", DoubleValue (5e9));
+
+  /* Setup Physical Layer */
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  wifiPhy.SetChannel (wifiChannel.Create ());
+  wifiPhy.Set ("TxPowerStart", DoubleValue (10.0));
+  wifiPhy.Set ("TxPowerEnd", DoubleValue (10.0));
+  wifiPhy.Set ("TxPowerLevels", UintegerValue (1));
+  wifiPhy.Set ("TxGain", DoubleValue (0));
+  wifiPhy.Set ("RxGain", DoubleValue (0));
+  wifiPhy.Set ("RxNoiseFigure", DoubleValue (10));
+  wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-79));
+  wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-79 + 3));
+  wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel");
+  wifiHelper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
+                                      "DataMode", StringValue (phyRate),
+                                      "ControlMode", StringValue ("HtMcs0"));
+
+  NodeContainer networkNodes;
+  networkNodes.Create (2);
+  Ptr<Node> apWifiNode = networkNodes.Get (0);
+  Ptr<Node> staWifiNode = networkNodes.Get (1);
+
+  /* Configure AP */
+  Ssid ssid = Ssid ("network");
+  wifiMac.SetType ("ns3::ApWifiMac",
+                    "Ssid", SsidValue (ssid));
+
+  NetDeviceContainer apDevice;
+  apDevice = wifiHelper.Install (wifiPhy, wifiMac, apWifiNode);
+
+  /* Configure STA */
+  wifiMac.SetType ("ns3::StaWifiMac",
+                    "Ssid", SsidValue (ssid),
+                    "ActiveProbing", BooleanValue (false));
+
+  NetDeviceContainer staDevices;
+  staDevices = wifiHelper.Install (wifiPhy, wifiMac, staWifiNode);
+
+  /* Mobility model */
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
+  positionAlloc->Add (Vector (1.0, 1.0, 0.0));
+
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (apWifiNode);
+  mobility.Install (staWifiNode);
+
+  /* Internet stack */
+  InternetStackHelper stack;
+  stack.Install (networkNodes);
+
+  Ipv4AddressHelper address;
+  address.SetBase ("10.0.0.0", "255.255.255.0");
+  Ipv4InterfaceContainer apInterface;
+  apInterface = address.Assign (apDevice);
+  Ipv4InterfaceContainer staInterface;
+  staInterface = address.Assign (staDevices);
+
+  /* Populate routing table */
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  /* Install TCP Receiver on the access point */
+  PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), 9));
+  ApplicationContainer sinkApp = sinkHelper.Install (apWifiNode);
+  sink = StaticCast<PacketSink> (sinkApp.Get (0));
+
+  /* Install TCP/UDP Transmitter on the station */
+  OnOffHelper server ("ns3::TcpSocketFactory", (InetSocketAddress (apInterface.GetAddress (0), 9)));
+  server.SetAttribute ("PacketSize", UintegerValue (payloadSize));
+  server.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  server.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  server.SetAttribute ("DataRate", DataRateValue (DataRate (dataRate)));
+  ApplicationContainer serverApp = server.Install (staWifiNode);
+
+  /* Start Applications */
+  sinkApp.Start (Seconds (0.0));
+  serverApp.Start (Seconds (1.0));
+  Simulator::Schedule (Seconds (1.1), &CalculateThroughput);
+
+  /* Enable Traces */
+  if (pcapTracing)
+    {
+      wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
+      wifiPhy.EnablePcap ("AccessPoint", apDevice);
+      wifiPhy.EnablePcap ("Station", staDevices);
+    }
+
+  /* Start Simulation */
+  Simulator::Stop (Seconds (simulationTime + 1));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  double averageThroughput = ((sink->GetTotalRx() * 8) / (1e6  * simulationTime));
+  if (averageThroughput < 50)
+    {
+      NS_LOG_ERROR ("Obtained throughput is not in the expected boundaries!");
+      exit (1);
+    }
+  std::cout << "\nAverage throughtput: " << averageThroughput << " Mbit/s" << std::endl;
+  return 0;
+}
diff -Naur ns-3.24.1/examples/wireless/wifi-timing-attributes.cc ns-3.25/examples/wireless/wifi-timing-attributes.cc
--- ns-3.24.1/examples/wireless/wifi-timing-attributes.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-timing-attributes.cc	2016-03-23 21:36:53.000000000 -0700
@@ -82,12 +82,12 @@
   phy.SetChannel (channel.Create ());
 
   //Default IEEE 802.11n (2.4 GHz)
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue("OfdmRate65MbpsBW20MHz"),
                                 "ControlMode", StringValue("OfdmRate6_5MbpsBW20MHz"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
+  WifiMacHelper mac;
 
   //Install PHY and MAC
   Ssid ssid = Ssid ("ns3-wifi");
diff -Naur ns-3.24.1/examples/wireless/wifi-wired-bridging.cc ns-3.25/examples/wireless/wifi-wired-bridging.cc
--- ns-3.24.1/examples/wireless/wifi-wired-bridging.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wifi-wired-bridging.cc	2016-03-23 21:36:53.000000000 -0700
@@ -110,8 +110,8 @@
       Ipv4InterfaceContainer apInterface;
       MobilityHelper mobility;
       BridgeHelper bridge;
-      WifiHelper wifi = WifiHelper::Default ();
-      NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+      WifiHelper wifi;
+      WifiMacHelper wifiMac;
       YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
       wifiPhy.SetChannel (wifiChannel.Create ());
 
diff -Naur ns-3.24.1/examples/wireless/wscript ns-3.25/examples/wireless/wscript
--- ns-3.24.1/examples/wireless/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/examples/wireless/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -22,9 +22,6 @@
     obj = bld.create_ns3_program('wifi-wired-bridging', ['internet', 'mobility', 'wifi', 'csma', 'bridge', 'applications'])
     obj.source = 'wifi-wired-bridging.cc'
 
-    obj = bld.create_ns3_program('simple-msdu-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
-    obj.source = 'simple-msdu-aggregation.cc'
-
     obj = bld.create_ns3_program('multirate', ['internet', 'mobility', 'wifi', 'stats', 'flow-monitor', 'olsr', 'applications', 'point-to-point'])
     obj.source = 'multirate.cc'
 
@@ -76,11 +73,17 @@
     obj = bld.create_ns3_program('rate-adaptation-distance', ['core', 'mobility', 'wifi', 'applications', 'flow-monitor'])
     obj.source = 'rate-adaptation-distance.cc'
 
-    obj = bld.create_ns3_program('simple-mpdu-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
-    obj.source = 'simple-mpdu-aggregation.cc'
-
-    obj = bld.create_ns3_program('simple-two-level-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
-    obj.source = 'simple-two-level-aggregation.cc'
+    obj = bld.create_ns3_program('wifi-aggregation', ['internet', 'mobility', 'wifi', 'applications'])
+    obj.source = 'wifi-aggregation.cc'
 
     obj = bld.create_ns3_program('simple-ht-hidden-stations', ['internet', 'mobility', 'wifi', 'applications'])    
     obj.source = 'simple-ht-hidden-stations.cc'
+
+    obj = bld.create_ns3_program('80211n-mimo', ['core','internet', 'mobility', 'wifi', 'applications', 'propagation'])
+    obj.source = '80211n-mimo.cc'
+
+    obj = bld.create_ns3_program('mixed-bg-network', ['internet', 'mobility', 'wifi', 'applications'])    
+    obj.source = 'mixed-bg-network.cc'
+
+    obj = bld.create_ns3_program('wifi-tcp', ['internet', 'mobility', 'wifi', 'applications'])    
+    obj.source = 'wifi-tcp.cc'
diff -Naur ns-3.24.1/RELEASE_NOTES ns-3.25/RELEASE_NOTES
--- ns-3.24.1/RELEASE_NOTES	2015-09-30 12:15:32.000000000 -0700
+++ ns-3.25/RELEASE_NOTES	2016-03-23 21:36:52.000000000 -0700
@@ -9,6 +9,195 @@
 Consult the file CHANGES.html for more detailed information about changed
 API and behavior across ns-3 releases.
 
+Release 3.25
+============
+
+Availability
+------------
+This release is available from:
+https://www.nsnam.org/release/ns-allinone-3.25.tar.bz2
+
+Supported platforms
+-------------------
+This release has been tested on the following platforms:
+- Ubuntu 15.10 (64 bit) with g++-5.2.1
+- Ubuntu 14.04 (64 bit) with g++-4.8.2
+- Fedora Core 23 (64 bit) with g++-5.3.1
+- Fedora Core 22 (32 bit) with g++-5.1.1
+- Fedora Core 21 (64 bit) with g++-4.9.2
+- Arch Linux (64 bit) with g++-5.3.0 and clang++-3.7.1
+- CentOS/RHEL 6.7 (64-bit) with g++-4.4.7
+- OS X El Capitan 10.11.4 with Xcode 7.3 and Apple LLVM version 7.3.0
+- OS X El Capitan 10.11.3 with Xcode 7.2.1 and Apple LLVM version 7.0.2
+- OS X Yosemite 10.10.5 with Xcode 7.2.1 and Apple LLVM version 7.0.2
+- FreeBSD 10.2-RELEASE (64 bit) with clang-3.4.1
+
+New user-visible features
+-------------------------
+- (internet) The native TCP implementation has been refactored, for the 
+  following improvements:  
+    1) congestion control has been aligned with the Linux architecture, 
+       to facilitate easier coding of new congestion control algorithms
+        or porting implementations from the Linux kernel, 
+    2) Fast Retransmit and Fast Recovery algorithms, compliant to RFCs, are 
+       shared by all TCP variants, unlike previous releases. 
+    3) TCP Hybla and TCP HighSpeed variants have been added.
+
+- (routing) The PrintRoutingTable* functions now print the following information
+  each time they are called: 
+    1) the node ID, 
+    2) the global time, 
+    3) the local time (allowing for future introduction of per-node clocks), 
+    4) the routing protocol type
+
+- (traffic control) A traffic control sublayer has been added with the aim of
+  introducing an equivalent of the Linux Traffic +Control infrastructure into 
+  ns-3. This layer sits in between the NetDevices (L2) and the network 
+  protocol (e.g. IP). It is in charge of processing packets and performing 
+  actions on them: scheduling, dropping, marking, policing, etc.  Initial
+  support for flow control has been added to the PointToPointNetDevice;
+  backward-compatible support for other device types is provided.
+
+- (traffic control) A three band priority queue modelled after Linux
+  pfifo_fast queueing discipline has been added.
+
+- (traffic control) Adaptive RED extensions have been added to the RED model
+
+- (wifi) A number of changes related to improving support for 802.11n/ac
+  models have been introduced.
+  1) Two rate controls compatible with High Throughput (HT) Wi-Fi modes
+     (e.g. 802.11n/ac), Ideal and MinstrelHT, have been added  
+  2) Support for multiple spatial streams (MIMO) using existing SISO
+     error models
+  3) The WiFi helper API for the WifiMac sublayer, and the configuration
+     of HT modes and parameters, has been simplified
+  4) Better support for backward compatibilty with legacy modes
+
+- (wifi) 802.11g was made backward compatible with 802.11b networks
+
+- (internet) L4 protocols (e.g., TCP, UDP, ICMP, etc.) can be demultiplexed 
+  by IP according to the incoming interface. In other words, it is now 
+  possible to use specialized L4 protocols according to the interface.
+
+- (internet) Ipv6Address::IsAllHostsMulticast() is now deprecated. 
+  FF02::3 is not in the official reserved IPv6 multicast address list.
+
+- (internet) Ipv6Address::IsAll[Nodes,Routers]Multicast() now checks the 
+  address scope beyond the simple link-local. Nodes are checked for 
+  Interface-Local, Link-Local and Realm-Local, Routers for the above plus 
+  Site-Local.
+
+- (internet) Ipv6 routing protocols must now *not* forward packets to upper 
+  layers unless for extremey specific cases. The Ipv6L3protocol handles 
+  almost all the packets directed to the host.
+
+- (internet) Ipv6 can now reject packets directed to an address not configured 
+  on the interface they are received from (Strong End System Model, RFC 1222).
+
+- (internet) UDP and Ipv6 RAW sockets can now join Ipv6 multicast groups.
+  Incoming packets will be filtered according to if there's a socket listening 
+  to that group. Source filtering is left to the application.
+
+- (network) ns-3 is now capable of serializing cooked (SLL) headers. This is 
+  used in DCE to allow the generation of pcap directly readable by wireshark.
+
+- (internet) It is now possible to set custom values for RipNg Link Down 
+  (standard is 16).
+
+- (internet) permanent (static) NDISC entries can be created for IPv6
+
+- (internet) IPv4 RIPv2 protocol model is now available.
+
+Bugs fixed
+----------
+- Bug 1132 - useless for loops in block-ack-test-suite.cc
+- Bug 1205 - EDCA is incorrectly modelled as DCF
+- Bug 1571 - TCP zero-window and flow control window updates by the receiver
+- Bug 1631 - Acoustic modem Energy consumption calc is wrong
+- Bug 1761 - Rounding with olsr::EmfToSeconds
+- Bug 1783 - BytesInFlight value fixed
+- Bug 1954 - Serialized size of wifi-net-device differ for TX and RX trace
+- Bug 1999 - PointToPointRemoteChannel invokes PointToPointChannel constructor
+- Bug 2003 - Missing DSSS short PLCP preamble
+- Bug 2041 - TCP RTO needs unit tests
+- Bug 2068 - Timestamp option conforms to RFC 7323
+- Bug 2102 - Make global routing robust to bridged links
+- Bug 2116 - refactoring aggregation API
+- Bug 2120 - 802.11g networks are not compatible with 802.11b clients
+- Bug 2141 - TCP DataSent callback now correctly notifies sent data, without missing bytes in particular conditions
+- Bug 2150 - The TCP sender keeps retransmitting and does not terminate the connection after some retries.
+- Bug 2159 - TCP advertises wrong receive window
+- Bug 2176 - Building IPv4 address from char* doesn't look reliable
+- Bug 2183 - LiIonEnergySourceHelper is not in the energy wscript
+- Bug 2184 - Integer overflow in Wi-Fi MacLow; remove dependency between tx and rx reference number field in MPDU status
+- Bug 2185 - WiFi MacLow may respond to errored frames that it should ignore
+- Bug 2193 - Simulation fails when transmitting very small MPDU subframes
+- Bug 2195 - Udp[*]Client can't send packets to broadcast address
+- Bug 2201 - Simulation fails when active probing is used in 802.11n/ac with channel bonding enabled
+- Bug 2206 - Split internet-apps from applications
+- Bug 2207 - Print node ID and time when printing routing tables
+- Bug 2208 - Interface index based L4 protocols
+- Bug 2210 - set Order field to 0 for HT/VHT 
+- Bug 2211 - Ipv{4,6}EndPoint can cause memory corruption
+- Bug 2213 - Inconsistencies may exist between the selected WifiMacHelper and the chosen 802.11 version
+- Bug 2219 - SixLowPanNetDevice hangs trying to decode a IPv6 Fragment extension header
+- Bug 2224 - scope of GetAmpduExist() in EdcaTxopN
+- Bug 2233 - Implement RFC 1222 - Strong End System Model
+- Bug 2234 - Ipv6L3Protocol should trash multicast packets not interesting for the node
+- Bug 2238 - Ipv6 routing reorganization
+- Bug 2242 - Mobility of both sender PHY and receiver PHY set to sender mobility in lr-wpan-phy-test.cc example.
+- Bug 2243 - TCP Socket Fork() fails to copy some parameters, causing connections to close prematurely on retransmit
+- Bug 2246 - Some DSR LogComponents and classes are not defined in a unique way.
+- Bug 2247 - Disabled Fast retransmit after an RTO
+- Bug 2249 - LTE perl speed tests possibly broken
+- Bug 2252 - Nix needs StaticRouting to work
+- Bug 2254 - Ipv[4,6]RawSocket can return the wrong number of bytes sent.
+- Bug 2255 - Ipv6RawSocket does not call data sent callbacks.
+- Bug 2257 - Ipv[4,6]InterfaceContainer::Add are not consistent
+- Bug 2258 - TcpSocketBase updated options and RTT for out of range segments.
+- Bug 2259 - GSL not successfully enabled for Wi-Fi DSSS error rate model
+- Bug 2262 - Corrected initial slow start threshold value
+- Bug 2266 - NixRouting info are not copied during a packet fragmentation.
+- Bug 2267 - Wrong channel bandwidth value in pcap files
+- Bug 2271 - Decision to enable RTS/CTS handshake for A-MPDUs should be based on the comparison between RtsCtsThreshold and the total A-MPDU size
+- Bug 2272 - SixLowPan NetDevice can not send uncompressed packets larger than 802.15.4 MTU
+- Bug 2273 - WeakEs model should be enforced in Static and Global routing
+- Bug 2275 - AdhocWifiMac not compatible with 802.11n/ac
+- Bug 2279 - Ipv[4,6]L3Protocol::GetInterfaceForDevice speedup.
+- Bug 2283 - Add capability to use pcap trace files with nanosecond precision timestamps
+- Bug 2286 - Support for SLL header (de)serialization.
+- Bug 2287 - FlowMonitor is confused by IP over IP.
+- Bug 2288 - Ipv4 broadcast and multicast packets are replicated on all the interfaces.
+- Bug 2289 - RIP v2 implementation
+- Bug 2290 - Cannot run click examples from test.py
+- Bug 2292 - Uninitialized variables since commit 7c60a9f8f271
+- Bug 2293 - Red Queue Estimator spins when trying to compute queue average size under long idle times.
+- Bug 2297 - 802.11n/ac networks are not compatible with legacy clients
+- Bug 2302 - Fixing RTT calculation inside TCP Socket
+- Bug 2303 - WifiMacQueue::GetSize should cleanup queue beforehand
+- Bug 2304 - DSCP Set/Get are using 8 bit values instead of 6
+- Bug 2307 - m_receivedAtLeastOneMpdu is not always reset
+- Bug 2311 - save Ht/Vht capabilities info on a per-station basis
+- Bug 2313 - Assert failed when using aggregation and RTS/CTS
+- Bug 2315 - Problem when BACK Request is part of an A-MPDU
+- Bug 2316 - MacLow shall use a single TXVECTOR for all MPDUs belonging to a same A-MPDU
+- Bug 2317 - Get the non-HT reference rate of a HT MCS
+- Bug 2318 - MPDU Aggregation fails with TCP
+- Bug 2319 - BlockAckTimeout value is too low for 802.11n operating at 2.4 GHz
+- Bug 2320 - Add method to check whether a WifiTxVector contains a valid combination of WifiMode, number of spatial streams and channel width
+- Bug 2321 - Wifi rate managers should not be triggered for each MPDU when A-MPDU is used
+- Bug 2327 - CWmin value selection for 802.11g is not compliant with the standard rules
+- Bug 2328 - changes to antenna configuration should update HT MCS set
+- Bug 2331 - Wrong mobility model in vanet-routing-compare example
+- Bug 2332 - Assert failed when using aggregation and two pairs of AP-STA
+- Bug 2337 - WifiPhy uses channel width in Hz iso MHz
+- Bug 2338 - WifiMode selected for control frames may sometimes be invalid
+
+Known issues
+------------
+In general, known issues are tracked on the project tracker available
+at http://www.nsnam.org/bugzilla/
+
 Release 3.24.1
 ==============
 
@@ -49,18 +238,13 @@
 - Bug 2182 - pybindgen required version is now a string literal
 - Bug 2184 - integer overflow in MacLow
 
-Known issues
-------------
-In general, known issues are tracked on the project tracker available
-at http://www.nsnam.org/bugzilla/
-
 Release 3.24
 ============
 
 Availability
 ------------
 This release is available from:
-http://www.nsnam.org/release/ns-allinone-3.24.tar.bz2
+https://www.nsnam.org/release/ns-allinone-3.24.tar.bz2
 
 Supported platforms
 -------------------
@@ -71,7 +255,7 @@
 - Ubuntu 14.04 (64 bit) with g++-4.8.2
 - Ubuntu 12.04.4 (32/64 bit) with g++-4.6.3
 - CentOS/RHEL 6.7 (64-bit) with g++-4.4.7
-- OS X Yosemite 10.10.5 with Xcode 6.4 and Apple LLVM version 6.1.0
+- OS X Yosemite 10.10.4 with Xcode 6.4 and Apple LLVM version 6.1.0
 - FreeBSD 10.1-RELEASE (64 bit) with clang-3.4.1
 
 New user-visible features
diff -Naur ns-3.24.1/src/aodv/bindings/callbacks_list.py ns-3.25/src/aodv/bindings/callbacks_list.py
--- ns-3.24.1/src/aodv/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,7 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::Socket::SocketErrno', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Ipv4Route>', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::WifiMacHeader const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::ArpCache const>', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
@@ -9,4 +10,5 @@
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/aodv/bindings/modulegen__gcc_ILP32.py ns-3.25/src/aodv/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/aodv/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## 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]
@@ -152,6 +152,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -182,6 +184,18 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -202,12 +216,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -216,6 +234,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -236,6 +256,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -264,6 +286,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -274,6 +300,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
@@ -290,6 +318,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## 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,6 +360,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -346,19 +380,27 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     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=u'list')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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
@@ -384,6 +426,12 @@
     nested_module = module.add_cpp_namespace('aodv')
     register_types_ns3_aodv(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -422,6 +470,30 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
@@ -464,6 +536,10 @@
     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_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -512,6 +588,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -523,6 +600,10 @@
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -533,9 +614,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -546,6 +629,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -558,11 +642,14 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
@@ -571,6 +658,7 @@
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     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'])
@@ -589,6 +677,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -597,12 +687,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
@@ -1361,6 +1454,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1376,6 +1474,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1670,7 +1773,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2564,6 +2667,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2780,6 +2917,7 @@
     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_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'))
@@ -2789,7 +2927,6 @@
     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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3161,6 +3298,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3340,6 +3825,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3376,6 +3873,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3467,6 +3976,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3492,6 +4006,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4224,6 +4753,74 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -4984,9 +5581,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -5040,10 +5637,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -5052,10 +5649,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -5149,6 +5746,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -5263,6 +5901,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -5535,6 +6206,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_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')])
@@ -5610,6 +6314,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5625,6 +6334,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5640,6 +6354,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5690,6 +6414,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5816,10 +6545,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -5844,6 +6573,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -5933,6 +6666,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5948,6 +6686,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5975,7 +6718,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -6034,6 +6783,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -6414,7 +7168,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -6541,6 +7295,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6620,6 +7460,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6994,6 +7839,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7067,6 +7933,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7184,6 +8083,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -8240,6 +9173,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -8258,6 +9192,9 @@
 def register_functions_ns3_aodv(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/aodv/bindings/modulegen__gcc_LP64.py ns-3.25/src/aodv/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/aodv/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -21,7 +21,7 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## 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]
@@ -152,6 +152,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -182,6 +184,18 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -202,12 +216,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -216,6 +234,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -236,6 +256,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -264,6 +286,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -274,6 +300,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
@@ -290,6 +318,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## 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,6 +360,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -346,19 +380,27 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     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=u'list')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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
@@ -384,6 +426,12 @@
     nested_module = module.add_cpp_namespace('aodv')
     register_types_ns3_aodv(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -422,6 +470,30 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
@@ -464,6 +536,10 @@
     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_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -512,6 +588,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -523,6 +600,10 @@
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -533,9 +614,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -546,6 +629,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -558,11 +642,14 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
@@ -571,6 +658,7 @@
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     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'])
@@ -589,6 +677,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -597,12 +687,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
@@ -1361,6 +1454,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1376,6 +1474,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1670,7 +1773,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2564,6 +2667,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -2780,6 +2917,7 @@
     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_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'))
@@ -2789,7 +2927,6 @@
     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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3161,6 +3298,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3340,6 +3825,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3376,6 +3873,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3467,6 +3976,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3492,6 +4006,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4224,6 +4753,74 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -4984,9 +5581,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -5040,10 +5637,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -5052,10 +5649,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -5149,6 +5746,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -5263,6 +5901,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -5535,6 +6206,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_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')])
@@ -5610,6 +6314,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5625,6 +6334,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5640,6 +6354,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5690,6 +6414,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5816,10 +6545,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -5844,6 +6573,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -5933,6 +6666,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5948,6 +6686,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5975,7 +6718,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -6034,6 +6783,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -6414,7 +7168,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -6541,6 +7295,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6620,6 +7460,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6994,6 +7839,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -7067,6 +7933,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -7184,6 +8083,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -8240,6 +9173,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_aodv(module.get_submodule('aodv'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -8258,6 +9192,9 @@
 def register_functions_ns3_aodv(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/aodv/examples/aodv.cc ns-3.25/src/aodv/examples/aodv.cc
--- ns-3.24.1/src/aodv/examples/aodv.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/examples/aodv.cc	2016-03-23 21:36:53.000000000 -0700
@@ -168,12 +168,12 @@
 void
 AodvExample::CreateDevices ()
 {
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate6Mbps"), "RtsCtsThreshold", UintegerValue (0));
   devices = wifi.Install (wifiPhy, wifiMac, nodes); 
 
diff -Naur ns-3.24.1/src/aodv/examples/wscript ns-3.25/src/aodv/examples/wscript
--- ns-3.24.1/src/aodv/examples/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -2,5 +2,5 @@
 
 def build(bld):
     obj = bld.create_ns3_program('aodv',
-                                 ['wifi', 'internet', 'aodv', 'applications'])
+                                 ['wifi', 'internet', 'aodv', 'internet-apps'])
     obj.source = 'aodv.cc'
diff -Naur ns-3.24.1/src/aodv/model/aodv-routing-protocol.cc ns-3.25/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.24.1/src/aodv/model/aodv-routing-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/model/aodv-routing-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -298,8 +298,13 @@
 void
 RoutingProtocol::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
 {
-  *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId () << " Time: " << Simulator::Now ().GetSeconds () << "s ";
+  *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId ()
+                        << "; Time: " << Now().As (Time::S)
+                        << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+                        << ", AODV Routing table" << std::endl;
+
   m_routingTable.Print (stream);
+  *stream->GetStream () << std::endl;
 }
 
 int64_t
diff -Naur ns-3.24.1/src/aodv/test/aodv-regression.cc ns-3.25/src/aodv/test/aodv-regression.cc
--- ns-3.24.1/src/aodv/test/aodv-regression.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/test/aodv-regression.cc	2016-03-23 21:36:53.000000000 -0700
@@ -34,7 +34,6 @@
 #include "ns3/mobility-model.h"
 #include "ns3/pcap-file.h"
 #include "ns3/aodv-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/config.h"
 #include "ns3/pcap-test.h"
 #include "ns3/rng-seed-manager.h"
@@ -159,7 +158,7 @@
 {
   // 1. Setup WiFi
   int64_t streamsUsed = 0;
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
@@ -167,7 +166,7 @@
   wifiPhy.SetChannel (chan);
   // This test suite output was originally based on YansErrorRateModel
   wifiPhy.SetErrorRateModel ("ns3::YansErrorRateModel"); 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate6Mbps"), "RtsCtsThreshold", StringValue ("2200"));
   NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, *m_nodes); 
 
diff -Naur ns-3.24.1/src/aodv/test/bug-772.cc ns-3.25/src/aodv/test/bug-772.cc
--- ns-3.24.1/src/aodv/test/bug-772.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/test/bug-772.cc	2016-03-23 21:36:53.000000000 -0700
@@ -37,7 +37,6 @@
 #include "ns3/pcap-file.h"
 #include "ns3/aodv-helper.h"
 #include "ns3/v4ping-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/config.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/data-rate.h"
@@ -116,7 +115,7 @@
 {
   int64_t streamsUsed = 0;
   // 1. Setup WiFi
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   // This test suite output was originally based on YansErrorRateModel
@@ -124,7 +123,7 @@
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   Ptr<YansWifiChannel> chan = wifiChannel.Create ();
   wifiPhy.SetChannel (chan);
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate6Mbps"), "RtsCtsThreshold", StringValue ("2200"));
   NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, *m_nodes); 
 
diff -Naur ns-3.24.1/src/aodv/test/loopback.cc ns-3.25/src/aodv/test/loopback.cc
--- ns-3.24.1/src/aodv/test/loopback.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/test/loopback.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,6 @@
 #include "ns3/pcap-file.h"
 #include "ns3/aodv-helper.h"
 #include "ns3/v4ping.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/config.h"
 #include "ns3/constant-position-mobility-model.h"
 #include "ns3/names.h"
@@ -118,12 +117,12 @@
   m->SetPosition (Vector (0, 0, 0));
   nodes.Get (0)->AggregateObject (m);
   // Setup WiFi
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate6Mbps"), "RtsCtsThreshold", StringValue ("2200"));
   NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, nodes); 
 
diff -Naur ns-3.24.1/src/aodv/test/tcp-chain-test-0-0.pcap ns-3.25/src/aodv/test/tcp-chain-test-0-0.pcap
--- ns-3.24.1/src/aodv/test/tcp-chain-test-0-0.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/test/tcp-chain-test-0-0.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -64,7 +64,7 @@
   Ð       )        Ô€              Ð)  X   X   €<                  ªª    E  4   8  
 
 
- 	À     €z    
+ 	À     €€     
   ð  è         à)        Ô€              .*  (  (  €<                € ªª    E    @  
 
 
@@ -100,8 +100,8 @@
        >Ò       Ô€              ùÒ X   X   €<                 ªª    E  4   8  
 
 
- 	À     €~€    
-  «  e         	Ó       Ô€              {Ó p  p  €<                À ªª    E L   @  
+ 	À     €€     
+  «  ò         	Ó       Ô€              {Ó p  p  €<                À ªª    E L   @  
 
 
 À 	     €€     
@@ -140,7 +140,7 @@
 
 
  	À     
-1€}t    
+1€€     
   ï  â         z       Ô€              Ø¸ p  p  €<                ð ªª    E L   @  
 
 
@@ -164,8 +164,8 @@
   _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         äê       Ô€              –ë X   X   €<                �ªª    E  4   8  
 
 
- 	À     Ñ€|Œ    
-  g  _         ¦ë       Ô€               ¡ p  p  €<                ªª    E L 
+ 	À     Ñ€€     
+  g  â         ¦ë       Ô€               ¡ p  p  €<                ªª    E L 
   @  
 
 
@@ -190,8 +190,8 @@
   Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ãÕ       Ô€              •Ö X   X   €<                Àªª    E  4   8  
 
 
- 	À     ¹€{’    
-  ä  Ü         ¥Ö       Ô€              h‰	 p  p  €<                0ªª    E L   @  
+ 	À     ¹€€     
+  ä  _         ¥Ö       Ô€              h‰	 p  p  €<                0ªª    E L   @  
 
 
 À 	  ‰   €€     
@@ -214,8 +214,8 @@
   Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         >»	       Ô€              ð»	 X   X   €<                ðªª    E  4   8  
 
 
- 	À     ¡€z˜    
-  a  Y          ¼	       Ô€              °q p  p  €<                Pªª    E L   @  
+ 	À     ¡€€     
+  a  Ü          ¼	       Ô€              °q p  p  €<                Pªª    E L   @  
 
 
 À 	  q   €€     
@@ -238,8 +238,8 @@
   Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         D        Ô€              ö  X   X   €<                 ªª    E  4   8  
 
 
- 	À     ‰€yž    
-  Þ  Ö         ¡       Ô€              øY p  p  €<                pªª    E L   @  
+ 	À     ‰€€     
+  Þ  Y         ¡       Ô€              øY p  p  €<                pªª    E L   @  
 
 
 À 	  Y   €€     
@@ -262,8 +262,8 @@
   S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         LŒ       Ô€              þŒ X   X   €<                Pªª    E  4   8  
 
 
- 	À     q€x¤    
-  [  S         �       Ô€                  p  p  €<                �ªª    E L   @  
+ 	À     q€€     
+  [  Ö         �       Ô€                  p  p  €<                �ªª    E L   @  
 
 
 À 	  A   €€     
@@ -295,8 +295,8 @@
   Ð       >        Ô€              Ð>  X   X   €<                �ªª    E  4 	  8  
 
 
- 	À     !Y€wª    
-  Ø  Ð         à>        Ô€              Hè p  p  €<                Àªª    E L   @  
+ 	À     !Y€€     
+  Ø  S         à>        Ô€              Hè p  p  €<                Àªª    E L   @  
 
 
 À 	  #)   €€     
@@ -320,8 +320,8 @@
   8  
 
 
- 	À     %A€v°    
-  U  M         ©$       Ô€              èë @   @   €  ÿÿÿÿÿÿ          àªª           
+ 	À     %A€€     
+  U  Ð         ©$       Ô€              èë @   @   €  ÿÿÿÿÿÿ          àªª           
 ÿÿÿÿÿÿ
        êì @   @   €<                Ðªª           
      
@@ -352,8 +352,8 @@
        Ü‰       Ô€               Š X   X   €<                0ªª    E  4   8  
 
 
- 	À     ))€u¶    
-  		  Ê         °Š       Ô€              Ø¸ p  p  €<                 ªª    E L   @  
+ 	À     ))€€     
+  		  M         °Š       Ô€              Ø¸ p  p  €<                 ªª    E L   @  
 
 
 À 	  *ù   €€     
@@ -376,8 +376,8 @@
   	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         èð       Ô€              šñ X   X   €<                `ªª    E  4   8  
 
 
- 	À     -€t¼    
-  	O  	G         ªñ       Ô€               ¡ p  p  €<                @ªª    E L   @  
+ 	À     -€€     
+  	O  Ê         ªñ       Ô€               ¡ p  p  €<                @ªª    E L   @  
 
 
 À 	  .á   €€     
@@ -401,8 +401,8 @@
   	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ÕÕ       Ô€              ‡Ö X   X   €<                �ªª    E  4   8  
 
 
- 	À     0ù€sÂ    
-  	Ì  	Ä         —Ö       Ô€              h‰	 p  p  €<                `ªª    E L   @  
+ 	À     0ù€€     
+  	Ì  	G         —Ö       Ô€              h‰	 p  p  €<                `ªª    E L   @  
 
 
 À 	  2É   €€     
@@ -430,10 +430,9 @@
 A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         BÀ	       Ô€              ôÀ	 X   X   €<                Àªª    E  4   8  
 
 
- 	À     4á€rÈ    
+ 	À     4á€€     
   
-I  
-A         Á	       Ô€              °q p  p  €<                €ªª    E L   @  
+I  	Ä         Á	       Ô€              °q p  p  €<                €ªª    E L   @  
 
 
 À 	  6±   €€     
@@ -466,10 +465,10 @@
 I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         `ž       Ô€              Ÿ X   X   €<                ðªª    E  4   8  
 
 
- 	À     8É€qÎ    
+ 	À     8É€€     
   
 Æ  
-¾         "Ÿ       Ô€              øY p  p  €<                 ªª    E L    @  
+A         "Ÿ       Ô€              øY p  p  €<                 ªª    E L    @  
 
 
 À 	  :™   €€     
@@ -497,5 +496,6 @@
 Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ªŒ       Ô€              \� X   X   €<                 ªª    E  4   8  
 
 
- 	À     <±€pÔ    
-  C  ;         l�       Ô€           
\ No newline at end of file
+ 	À     <±€€     
+  C  
+¾         l�       Ô€           
\ No newline at end of file
diff -Naur ns-3.24.1/src/aodv/test/tcp-chain-test-9-0.pcap ns-3.25/src/aodv/test/tcp-chain-test-9-0.pcap
--- ns-3.24.1/src/aodv/test/tcp-chain-test-9-0.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/aodv/test/tcp-chain-test-9-0.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -59,11 +59,11 @@
   è   b                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ô€              i!  X   X   €<                @ ªª    E  4   @  
 
 
- 	À     €z    
+ 	À     €€     
   ð  è         6"        Ô€              K#  X   X   €<                ° ªª    E  4   ?  
 
 
- 	À     €z    
+ 	À     €€     
   ð  è         þD        Ô€              H  (  (  €<                À ªª    E    8  
 
 
@@ -100,14 +100,14 @@
               Ô€              ¶ X   X   €<                € ªª    E  4   @  
 
 
- 	À     €~€    
-  «  e         ƒ       Ô€              ß8 @   @   €  ÿÿÿÿÿÿ           ªª           
+ 	À     €€     
+  «  ò         ƒ       Ô€              ß8 @   @   €  ÿÿÿÿÿÿ           ªª           
 	ÿÿÿÿÿÿ
        ®9       Ô€              –: X   X   €<                0ªª    E  4   ?  
 
 
- 	À     €~€    
-  «  e         ñ       Ô€              ‡ô p  p  €<                @ªª    E L   8  
+ 	À     €€     
+  «  ò         ñ       Ô€              ‡ô p  p  €<                @ªª    E L   8  
 
 
 À 	     €€     
@@ -119,27 +119,27 @@
 
 
  	À     
-1€}t    
+1€€     
   ï  â                Ô€              ë X   X   €<                `ªª    E  4   ?  
 
 
  	À     
-1€}t    
+1€€     
   ï  â         ' X   X   ˆ<                `ªª    E  4   ?  
 
 
  	À     
-1€}t    
+1€€     
   ï  â         ™ X   X   ˆ<                `ªª    E  4   ?  
 
 
  	À     
-1€}t    
+1€€     
   ï  â         X X   X   ˆ<                `ªª    E  4   ?  
 
 
  	À     
-1€}t    
+1€€     
   ï  â                Ô€              Á à  à  €<                pªª    E ¼   8  
 
 
@@ -152,12 +152,12 @@
   _  ï                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 óÙ       Ô€              AÚ X   X   €<                  ªª    E  4   @  
 
 
- 	À     Ñ€|Œ    
-  g  _         Û       Ô€              ÉÛ X   X   €<                �ªª    E  4   ?  
+ 	À     Ñ€€     
+  g  â         Û       Ô€              ÉÛ X   X   €<                �ªª    E  4   ?  
 
 
- 	À     Ñ€|Œ    
-  g  _         \ê       Ô€              ví (  (  €<                 ªª    E  	  8  
+ 	À     Ñ€€     
+  g  â         \ê       Ô€              ví (  (  €<                 ªª    E  	  8  
 
 
 À 	  Ñ   €€     
@@ -169,12 +169,12 @@
   Ü  g                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;Â       Ô€              ‰Â X   X   €<                ° ªª    E  4   @  
 
 
- 	À     ¹€{’    
-  ä  Ü         VÃ       Ô€              PÄ X   X   €<                Àªª    E  4   ?  
+ 	À     ¹€€     
+  ä  _         VÃ       Ô€              PÄ X   X   €<                Àªª    E  4   ?  
 
 
- 	À     ¹€{’    
-  ä  Ü         [Õ       Ô€              uØ (  (  €<                Ðªª    E    8  
+ 	À     ¹€€     
+  ä  _         [Õ       Ô€              uØ (  (  €<                Ðªª    E    8  
 
 
 À 	  ¹   €€     
@@ -185,16 +185,16 @@
   Y  ä                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ƒª	       Ô€              Ñª	 X   X   €<                À ªª    E  4   @  
 
 
- 	À     ¡€z˜    
-  a  Y         ž«	       Ô€              ¼¬	 X   X   €<                ðªª    E  4   ?  
+ 	À     ¡€€     
+  a  Ü         ž«	       Ô€              ¼¬	 X   X   €<                ðªª    E  4   ?  
 
 
- 	À     ¡€z˜    
-  a  Y         ®	 X   X   ˆ<                ðªª    E  4   ?  
+ 	À     ¡€€     
+  a  Ü         ®	 X   X   ˆ<                ðªª    E  4   ?  
 
 
- 	À     ¡€z˜    
-  a  Y         r¶	       Ô€              Œ¹	 (  (  €<                 ªª    E    8  
+ 	À     ¡€€     
+  a  Ü         r¶	       Ô€              Œ¹	 (  (  €<                 ªª    E    8  
 
 
 À 	  ¡   €€     
@@ -205,16 +205,16 @@
   Ö  a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ë’       Ô€              “ X   X   €<                Ð ªª    E  4   @  
 
 
- 	À     ‰€yž    
-  Þ  Ö         æ“       Ô€              Î” X   X   €<                 ªª    E  4   ?  
+ 	À     ‰€€     
+  Þ  Y         æ“       Ô€              Î” X   X   €<                 ªª    E  4   ?  
 
 
- 	À     ‰€yž    
-  Þ  Ö         w™       Ô€              _š X   X   ˆ<                 ªª    E  4   ?  
+ 	À     ‰€€     
+  Þ  Y         w™       Ô€              _š X   X   ˆ<                 ªª    E  4   ?  
 
 
- 	À     ‰€yž    
-  Þ  Ö         ¿ž (  (  €<                0ªª    E    8  
+ 	À     ‰€€     
+  Þ  Y         ¿ž (  (  €<                0ªª    E    8  
 
 
 À 	  ‰   €€     
@@ -225,16 +225,16 @@
   S  Þ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 {       Ô€              a{ X   X   €<                à ªª    E  4   @  
 
 
- 	À     q€x¤    
-  [  S         .|       Ô€              } X   X   €<                Pªª    E  4   ?  
+ 	À     q€€     
+  [  Ö         .|       Ô€              } X   X   €<                Pªª    E  4   ?  
 
 
- 	À     q€x¤    
-  [  S         ë~ X   X   ˆ<                Pªª    E  4   ?  
+ 	À     q€€     
+  [  Ö         ë~ X   X   ˆ<                Pªª    E  4   ?  
 
 
- 	À     q€x¤    
-  [  S         n‡       Ô€              ˆŠ (  (  €<                `ªª    E    8  
+ 	À     q€€     
+  [  Ö         n‡       Ô€              ˆŠ (  (  €<                `ªª    E    8  
 
 
 À 	  q   €€     
@@ -245,12 +245,12 @@
   Ð  [                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 !        Ô€              i!  X   X   €<                ð ªª    E  4 	  @  
 
 
- 	À     !Y€wª    
-  Ø  Ð         6"        Ô€              ]#  X   X   €<                €ªª    E  4 	  ?  
+ 	À     !Y€€     
+  Ø  S         6"        Ô€              ]#  X   X   €<                €ªª    E  4 	  ?  
 
 
- 	À     !Y€wª    
-  Ø  Ð         a=        Ô€              {@  (  (  €<                �ªª    E    8  
+ 	À     !Y€€     
+  Ø  S         a=        Ô€              {@  (  (  €<                �ªª    E    8  
 
 
 À 	  !Y   €€     
@@ -273,14 +273,14 @@
   @  
 
 
- 	À     %A€v°    
-  U  M         ~
+ 	À     %A€€     
+  U  Ð         ~
        Ô€              � X   X   €<                Àªª    E  4 
   ?  
 
 
- 	À     %A€v°    
-  U  M         ü"       Ô€              & (  (  €<                Ðªª    E    8  
+ 	À     %A€€     
+  U  Ð         ü"       Ô€              & (  (  €<                Ðªª    E    8  
 
 
 À 	  %A   €€     
@@ -309,26 +309,26 @@
        ñß       Ô€              Zà X   X   €<                @ªª    E  4   @  
 
 
- 	À     ))€u¶    
-  		  Ê         'á       Ô€              ³ü @   @   €  ÿÿÿÿÿÿ          0ªª           
+ 	À     ))€€     
+  		  M         'á       Ô€              ³ü @   @   €  ÿÿÿÿÿÿ          0ªª           
 	ÿÿÿÿÿÿ
        ‚ý       Ô€              =þ X   X   €<                @ªª    E  4   ?  
 
 
- 	À     ))€u¶    
-  		  Ê         iÖ       Ô€              ãÙ p  p  €<                Pªª    E L   8  
+ 	À     ))€€     
+  		  M         iÖ       Ô€              ãÙ p  p  €<                Pªª    E L   8  
 
 
 À 	  *ù   €€     
   	G  		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 óÙ       Ô€              AÚ X   X   €<                Pªª    E  4   @  
 
 
- 	À     -€t¼    
-  	O  	G         Û       Ô€              #Ü X   X   €<                `ªª    E  4   ?  
+ 	À     -€€     
+  	O  Ê         Û       Ô€              #Ü X   X   €<                `ªª    E  4   ?  
 
 
- 	À     -€t¼    
-  	O  	G         `ð       Ô€              zó (  (  €<                pªª    E    8  
+ 	À     -€€     
+  	O  Ê         `ð       Ô€              zó (  (  €<                pªª    E    8  
 
 
 À 	  -   €€     
@@ -339,12 +339,12 @@
   	Ä  	O                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ;Â       Ô€              ‰Â X   X   €<                `ªª    E  4   @  
 
 
- 	À     0ù€sÂ    
-  	Ì  	Ä         VÃ       Ô€              PÄ X   X   €<                �ªª    E  4   ?  
+ 	À     0ù€€     
+  	Ì  	G         VÃ       Ô€              PÄ X   X   €<                �ªª    E  4   ?  
 
 
- 	À     0ù€sÂ    
-  	Ì  	Ä         Ñ       Ô€              5Ô (  (  €<                 ªª    E    8  
+ 	À     0ù€€     
+  	Ì  	G         Ñ       Ô€              5Ô (  (  €<                 ªª    E    8  
 
 
 À 	  0ù   €€     
@@ -356,22 +356,19 @@
 A  	Ì                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ƒª	       Ô€              Ñª	 X   X   €<                pªª    E  4   @  
 
 
- 	À     4á€rÈ    
+ 	À     4á€€     
   
-I  
-A         ž«	       Ô€              Å¬	 X   X   €<                Àªª    E  4   ?  
+I  	Ä         ž«	       Ô€              Å¬	 X   X   €<                Àªª    E  4   ?  
 
 
- 	À     4á€rÈ    
+ 	À     4á€€     
   
-I  
-A         £®	 X   X   ˆ<                Àªª    E  4   ?  
+I  	Ä         £®	 X   X   ˆ<                Àªª    E  4   ?  
 
 
- 	À     4á€rÈ    
+ 	À     4á€€     
   
-I  
-A         d»	       Ô€              ~¾	 (  (  €<                Ðªª    E    8  
+I  	Ä         d»	       Ô€              ~¾	 (  (  €<                Ðªª    E    8  
 
 
 À 	  4á   €€     
@@ -385,16 +382,16 @@
 I                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Ë’       Ô€              “ X   X   €<                €ªª    E  4   @  
 
 
- 	À     8É€qÎ    
+ 	À     8É€€     
   
 Æ  
-¾         æ“       Ô€              • X   X   €<                ðªª    E  4   ?  
+A         æ“       Ô€              • X   X   €<                ðªª    E  4   ?  
 
 
- 	À     8É€qÎ    
+ 	À     8É€€     
   
 Æ  
-¾         ž       Ô€               ¡ (  (  €<                 ªª    E    8  
+A         ž       Ô€               ¡ (  (  €<                 ªª    E    8  
 
 
 À 	  8É   €€     
@@ -408,12 +405,14 @@
 Æ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 {       Ô€              a{ X   X   €<                �ªª    E  4   @  
 
 
- 	À     <±€pÔ    
-  C  ;         .|       Ô€              ò| X   X   €<                 ªª    E  4   ?  
+ 	À     <±€€     
+  C  
+¾         .|       Ô€              ò| X   X   €<                 ªª    E  4   ?  
 
 
- 	À     <±€pÔ    
-  C  ;         ±‡       Ô€              ËŠ (  (  €<                0ªª    E  !  8  
+ 	À     <±€€     
+  C  
+¾         ±‡       Ô€              ËŠ (  (  €<                0ªª    E  !  8  
 
 
 À 	  <±   €€     
diff -Naur ns-3.24.1/src/applications/bindings/callbacks_list.py ns-3.25/src/applications/bindings/callbacks_list.py
--- ns-3.24.1/src/applications/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,5 @@
 callback_classes = [
+    ['void', 'ns3::empty', 'ns3::empty', '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::Address const&', 'ns3::NetDevice::PacketType', '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::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
@@ -6,4 +7,5 @@
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/applications/bindings/modulegen__gcc_ILP32.py ns-3.25/src/applications/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/applications/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -40,8 +40,6 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## average.h (module 'stats'): ns3::Average<double> [class]
-    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
     ## buffer.h (module 'network'): ns3::Buffer [class]
     module.add_class('Buffer', import_from_module='ns.network')
     ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
@@ -157,13 +155,9 @@
     ## 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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
-    module.add_class('Ping6Helper')
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper [class]
-    module.add_class('RadvdHelper')
     ## simple-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper [class]
     module.add_class('SimpleNetDeviceHelper', import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -180,6 +174,8 @@
     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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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,8 +194,6 @@
     module.add_class('UdpServerHelper')
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper [class]
     module.add_class('UdpTraceClientHelper')
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper [class]
-    module.add_class('V4PingHelper')
     ## 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]
@@ -248,12 +242,6 @@
     module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
-    ## red-queue.h (module 'network'): ns3::RedQueue [class]
-    module.add_class('RedQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
-    ## red-queue.h (module 'network'): ns3::RedQueue [enumeration]
-    module.add_enum('', ['DTYPE_NONE', 'DTYPE_FORCED', 'DTYPE_UNFORCED'], outer_class=root_module['ns3::RedQueue'], import_from_module='ns.network')
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats [struct]
-    module.add_class('Stats', import_from_module='ns.network', outer_class=root_module['ns3::RedQueue'])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader [class]
     module.add_class('SeqTsHeader', parent=root_module['ns3::Header'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -270,6 +258,8 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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]
@@ -284,18 +274,22 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::PbbPacket', 'ns3::Header', 'ns3::DefaultDeleter<ns3::PbbPacket>'], parent=root_module['ns3::Header'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::PbbTlv', 'ns3::empty', 'ns3::DefaultDeleter<ns3::PbbTlv>'], 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::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdInterface', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdInterface>'], 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::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdPrefix', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdPrefix>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
+    ## sll-header.h (module 'network'): ns3::SllHeader [class]
+    module.add_class('SllHeader', import_from_module='ns.network', parent=root_module['ns3::Header'])
+    ## sll-header.h (module 'network'): ns3::SllHeader::PacketType [enumeration]
+    module.add_enum('PacketType', ['UNICAST_FROM_PEER_TO_ME', 'BROADCAST_BY_PEER', 'MULTICAST_BY_PEER', 'INTERCEPTED_PACKET', 'SENT_BY_US'], outer_class=root_module['ns3::SllHeader'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket [class]
     module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -426,14 +420,16 @@
     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'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
-    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
     module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## 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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -480,16 +476,10 @@
     module.add_class('PbbPacket', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     ## packetbb.h (module 'network'): ns3::PbbTlv [class]
     module.add_class('PbbTlv', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
-    ## ping6.h (module 'applications'): ns3::Ping6 [class]
-    module.add_class('Ping6', parent=root_module['ns3::Application'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
-    ## radvd.h (module 'applications'): ns3::Radvd [class]
-    module.add_class('Radvd', parent=root_module['ns3::Application'])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface [class]
-    module.add_class('RadvdInterface', parent=root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix [class]
-    module.add_class('RadvdPrefix', parent=root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -518,8 +508,6 @@
     module.add_class('UdpTraceClient', parent=root_module['ns3::Application'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## v4ping.h (module 'applications'): ns3::V4Ping [class]
-    module.add_class('V4Ping', parent=root_module['ns3::Application'])
     ## 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]
@@ -536,11 +524,10 @@
     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=u'vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type=u'list')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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&')
@@ -680,7 +667,6 @@
     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_Ns3Average__Double_methods(root_module, root_module['ns3::Average< double >'])
     register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
     register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
     register_Ns3BulkSendHelper_methods(root_module, root_module['ns3::BulkSendHelper'])
@@ -729,8 +715,6 @@
     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_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
-    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
     register_Ns3SimpleNetDeviceHelper_methods(root_module, root_module['ns3::SimpleNetDeviceHelper'])
     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'])
@@ -739,6 +723,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -747,7 +732,6 @@
     register_Ns3UdpEchoServerHelper_methods(root_module, root_module['ns3::UdpEchoServerHelper'])
     register_Ns3UdpServerHelper_methods(root_module, root_module['ns3::UdpServerHelper'])
     register_Ns3UdpTraceClientHelper_methods(root_module, root_module['ns3::UdpTraceClientHelper'])
-    register_Ns3V4PingHelper_methods(root_module, root_module['ns3::V4PingHelper'])
     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'])
@@ -763,8 +747,6 @@
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
-    register_Ns3RedQueue_methods(root_module, root_module['ns3::RedQueue'])
-    register_Ns3RedQueueStats_methods(root_module, root_module['ns3::RedQueue::Stats'])
     register_Ns3SeqTsHeader_methods(root_module, root_module['ns3::SeqTsHeader'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -773,6 +755,7 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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> >'])
@@ -780,9 +763,9 @@
     register_Ns3SimpleRefCount__Ns3PbbMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3PbbMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbMessage, ns3::empty, ns3::DefaultDeleter<ns3::PbbMessage> >'])
     register_Ns3SimpleRefCount__Ns3PbbPacket_Ns3Header_Ns3DefaultDeleter__lt__ns3PbbPacket__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     register_Ns3SimpleRefCount__Ns3PbbTlv_Ns3Empty_Ns3DefaultDeleter__lt__ns3PbbTlv__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
-    register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
-    register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SllHeader_methods(root_module, root_module['ns3::SllHeader'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
     register_Ns3SocketFactory_methods(root_module, root_module['ns3::SocketFactory'])
@@ -847,9 +830,10 @@
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
-    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
     register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -873,11 +857,8 @@
     register_Ns3PbbMessageIpv6_methods(root_module, root_module['ns3::PbbMessageIpv6'])
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
-    register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
-    register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
-    register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
-    register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
@@ -891,7 +872,6 @@
     register_Ns3UdpServer_methods(root_module, root_module['ns3::UdpServer'])
     register_Ns3UdpTraceClient_methods(root_module, root_module['ns3::UdpTraceClient'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
-    register_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3ApplicationPacketProbe_methods(root_module, root_module['ns3::ApplicationPacketProbe'])
@@ -1218,71 +1198,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Average__Double_methods(root_module, cls):
-    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
-    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
-    cls.add_constructor([])
-    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
-    cls.add_method('Avg', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
-    cls.add_method('Count', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
-    cls.add_method('Error90', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
-    cls.add_method('Error95', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
-    cls.add_method('Error99', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
-    cls.add_method('Max', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
-    cls.add_method('Mean', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
-    cls.add_method('Min', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
-    cls.add_method('Stddev', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('double const &', 'x')])
-    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
-    cls.add_method('Var', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3Buffer_methods(root_module, cls):
     ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
     cls.add_constructor([])
@@ -2021,6 +1936,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -2036,6 +1956,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2212,7 +2137,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -3408,10 +3333,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3493,72 +3422,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3Ping6Helper_methods(root_module, cls):
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper::Ping6Helper(ns3::Ping6Helper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ping6Helper const &', 'arg0')])
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper::Ping6Helper() [constructor]
-    cls.add_constructor([])
-    ## ping6-helper.h (module 'applications'): ns3::ApplicationContainer ns3::Ping6Helper::Install(ns3::NodeContainer c) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'c')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetIfIndex(uint32_t ifIndex) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t', 'ifIndex')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetLocal(ns3::Ipv6Address ip) [member function]
-    cls.add_method('SetLocal', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetRemote(ns3::Ipv6Address ip) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetRoutersAddress(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
-    cls.add_method('SetRoutersAddress', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
-    return
-
-def register_Ns3RadvdHelper_methods(root_module, cls):
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper() [constructor]
-    cls.add_constructor([])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
-    cls.add_method('AddAnnouncedPrefix', 
-                   'void', 
-                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::ClearPrefixes() [member function]
-    cls.add_method('ClearPrefixes', 
-                   'void', 
-                   [])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
-    cls.add_method('DisableDefaultRouterForInterface', 
-                   'void', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
-    cls.add_method('EnableDefaultRouterForInterface', 
-                   'void', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
-    cls.add_method('GetRadvdInterface', 
-                   'ns3::Ptr< ns3::RadvdInterface >', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3SimpleNetDeviceHelper_methods(root_module, cls):
     ## simple-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper::SimpleNetDeviceHelper(ns3::SimpleNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimpleNetDeviceHelper const &', 'arg0')])
@@ -3878,6 +3741,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -4219,32 +4116,6 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
-def register_Ns3V4PingHelper_methods(root_module, cls):
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper::V4PingHelper(ns3::V4PingHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::V4PingHelper const &', 'arg0')])
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper::V4PingHelper(ns3::Ipv4Address remote) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'remote')])
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::NodeContainer nodes) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'nodes')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(std::string nodeName) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('std::string', 'nodeName')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): void ns3::V4PingHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -4736,6 +4607,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4771,18 +4646,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -4823,33 +4713,45 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
@@ -5080,74 +4982,6 @@
                    is_const=True, visibility='protected')
     return
 
-def register_Ns3RedQueue_methods(root_module, cls):
-    ## red-queue.h (module 'network'): ns3::RedQueue::RedQueue(ns3::RedQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RedQueue const &', 'arg0')])
-    ## red-queue.h (module 'network'): ns3::RedQueue::RedQueue() [constructor]
-    cls.add_constructor([])
-    ## red-queue.h (module 'network'): int64_t ns3::RedQueue::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## red-queue.h (module 'network'): ns3::Queue::QueueMode ns3::RedQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## red-queue.h (module 'network'): uint32_t ns3::RedQueue::GetQueueSize() [member function]
-    cls.add_method('GetQueueSize', 
-                   'uint32_t', 
-                   [])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats ns3::RedQueue::GetStats() [member function]
-    cls.add_method('GetStats', 
-                   'ns3::RedQueue::Stats', 
-                   [])
-    ## red-queue.h (module 'network'): static ns3::TypeId ns3::RedQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetQueueLimit(uint32_t lim) [member function]
-    cls.add_method('SetQueueLimit', 
-                   'void', 
-                   [param('uint32_t', 'lim')])
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetTh(double minTh, double maxTh) [member function]
-    cls.add_method('SetTh', 
-                   'void', 
-                   [param('double', 'minTh'), param('double', 'maxTh')])
-    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::RedQueue::DoDequeue() [member function]
-    cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): bool ns3::RedQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
-    cls.add_method('DoEnqueue', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
-                   visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
-    cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3RedQueueStats_methods(root_module, cls):
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::Stats() [constructor]
-    cls.add_constructor([])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::Stats(ns3::RedQueue::Stats const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RedQueue::Stats const &', 'arg0')])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::forcedDrop [variable]
-    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::qLimDrop [variable]
-    cls.add_instance_attribute('qLimDrop', 'uint32_t', is_const=False)
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::unforcedDrop [variable]
-    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
-    return
-
 def register_Ns3SeqTsHeader_methods(root_module, cls):
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader::SeqTsHeader(ns3::SeqTsHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SeqTsHeader const &', 'arg0')])
@@ -5311,6 +5145,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -5395,24 +5241,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter< ns3::RadvdInterface > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter< ns3::RadvdPrefix > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -5431,6 +5265,61 @@
                    is_static=True)
     return
 
+def register_Ns3SllHeader_methods(root_module, cls):
+    ## sll-header.h (module 'network'): ns3::SllHeader::SllHeader(ns3::SllHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SllHeader const &', 'arg0')])
+    ## sll-header.h (module 'network'): ns3::SllHeader::SllHeader() [constructor]
+    cls.add_constructor([])
+    ## sll-header.h (module 'network'): uint32_t ns3::SllHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sll-header.h (module 'network'): uint16_t ns3::SllHeader::GetArpType() const [member function]
+    cls.add_method('GetArpType', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sll-header.h (module 'network'): ns3::TypeId ns3::SllHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): ns3::SllHeader::PacketType ns3::SllHeader::GetPacketType() const [member function]
+    cls.add_method('GetPacketType', 
+                   'ns3::SllHeader::PacketType', 
+                   [], 
+                   is_const=True)
+    ## sll-header.h (module 'network'): uint32_t ns3::SllHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): static ns3::TypeId ns3::SllHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::SetArpType(uint16_t arphdType) [member function]
+    cls.add_method('SetArpType', 
+                   'void', 
+                   [param('uint16_t', 'arphdType')])
+    ## sll-header.h (module 'network'): void ns3::SllHeader::SetPacketType(ns3::SllHeader::PacketType type) [member function]
+    cls.add_method('SetPacketType', 
+                   'void', 
+                   [param('ns3::SllHeader::PacketType', 'type')])
+    return
+
 def register_Ns3Socket_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Socket const &', 'arg0')])
@@ -5510,6 +5399,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5535,6 +5429,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -7076,33 +6985,24 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [], 
-                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## drop-tail-queue.h (module 'network'): void ns3::DropTailQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::DropTailQueue::DoDequeue() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## drop-tail-queue.h (module 'network'): bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
     return
@@ -7952,105 +7852,35 @@
                    [param('ns3::Mac64Address const &', 'value')])
     return
 
-def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
                    [param('ns3::DataOutputCallback &', 'callback')], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
     cls.add_method('Update', 
                    'void', 
-                   [param('double const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
     cls.add_method('getCount', 
                    'long int', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
     cls.add_method('getMax', 
                    'double', 
                    [], 
@@ -8097,7 +7927,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -8224,6 +8054,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -8303,6 +8219,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -8786,6 +8707,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## packet-socket.h (module 'network'): int ns3::PacketSocket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## packet-socket.h (module 'network'): uint32_t ns3::PacketSocket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -9969,49 +9895,6 @@
                    visibility='protected')
     return
 
-def register_Ns3Ping6_methods(root_module, cls):
-    ## ping6.h (module 'applications'): ns3::Ping6::Ping6(ns3::Ping6 const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ping6 const &', 'arg0')])
-    ## ping6.h (module 'applications'): ns3::Ping6::Ping6() [constructor]
-    cls.add_constructor([])
-    ## ping6.h (module 'applications'): static ns3::TypeId ns3::Ping6::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetIfIndex(uint32_t ifIndex) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t', 'ifIndex')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetLocal(ns3::Ipv6Address ipv6) [member function]
-    cls.add_method('SetLocal', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ipv6')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetRemote(ns3::Ipv6Address ipv6) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ipv6')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetRouters(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
-    cls.add_method('SetRouters', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
 def register_Ns3Probe_methods(root_module, cls):
     ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Probe const &', 'arg0')])
@@ -10039,323 +9922,25 @@
                    is_const=True, is_virtual=True)
     return
 
-def register_Ns3Radvd_methods(root_module, cls):
-    ## radvd.h (module 'applications'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
-    ## radvd.h (module 'applications'): ns3::Radvd::Radvd() [constructor]
-    cls.add_constructor([])
-    ## radvd.h (module 'applications'): void ns3::Radvd::AddConfiguration(ns3::Ptr<ns3::RadvdInterface> routerInterface) [member function]
-    cls.add_method('AddConfiguration', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::RadvdInterface >', 'routerInterface')])
-    ## radvd.h (module 'applications'): int64_t ns3::Radvd::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## radvd.h (module 'applications'): static ns3::TypeId ns3::Radvd::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
-    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
-    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
-    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
-    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
-def register_Ns3RadvdInterface_methods(root_module, cls):
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(ns3::RadvdInterface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdInterface const &', 'arg0')])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(uint32_t interface) [constructor]
-    cls.add_constructor([param('uint32_t', 'interface')])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval) [constructor]
-    cls.add_constructor([param('uint32_t', 'interface'), param('uint32_t', 'maxRtrAdvInterval'), param('uint32_t', 'minRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::AddPrefix(ns3::Ptr<ns3::RadvdPrefix> routerPrefix) [member function]
-    cls.add_method('AddPrefix', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::RadvdPrefix >', 'routerPrefix')])
-    ## radvd-interface.h (module 'applications'): uint8_t ns3::RadvdInterface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetDefaultLifeTime() const [member function]
-    cls.add_method('GetDefaultLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint8_t ns3::RadvdInterface::GetDefaultPreference() const [member function]
-    cls.add_method('GetDefaultPreference', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetHomeAgentLifeTime() const [member function]
-    cls.add_method('GetHomeAgentLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetHomeAgentPreference() const [member function]
-    cls.add_method('GetHomeAgentPreference', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetInterface() const [member function]
-    cls.add_method('GetInterface', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
-    cls.add_method('GetLastRaTxTime', 
-                   'ns3::Time', 
-                   [])
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
-    cls.add_method('GetLinkMtu', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMaxRtrAdvInterval() const [member function]
-    cls.add_method('GetMaxRtrAdvInterval', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMinDelayBetweenRAs() const [member function]
-    cls.add_method('GetMinDelayBetweenRAs', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMinRtrAdvInterval() const [member function]
-    cls.add_method('GetMinRtrAdvInterval', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): std::list<ns3::Ptr<ns3::RadvdPrefix>, std::allocator<ns3::Ptr<ns3::RadvdPrefix> > > ns3::RadvdInterface::GetPrefixes() const [member function]
-    cls.add_method('GetPrefixes', 
-                   'std::list< ns3::Ptr< ns3::RadvdPrefix > >', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsHomeAgentFlag() const [member function]
-    cls.add_method('IsHomeAgentFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsHomeAgentInfo() const [member function]
-    cls.add_method('IsHomeAgentInfo', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
-    cls.add_method('IsInitialRtrAdv', 
-                   'bool', 
-                   [])
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
-    cls.add_method('IsIntervalOpt', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsManagedFlag() const [member function]
-    cls.add_method('IsManagedFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsMobRtrSupportFlag() const [member function]
-    cls.add_method('IsMobRtrSupportFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsOtherConfigFlag() const [member function]
-    cls.add_method('IsOtherConfigFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsSendAdvert() const [member function]
-    cls.add_method('IsSendAdvert', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsSourceLLAddress() const [member function]
-    cls.add_method('IsSourceLLAddress', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetDefaultLifeTime(uint32_t defaultLifeTime) [member function]
-    cls.add_method('SetDefaultLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'defaultLifeTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetDefaultPreference(uint8_t defaultPreference) [member function]
-    cls.add_method('SetDefaultPreference', 
-                   'void', 
-                   [param('uint8_t', 'defaultPreference')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentFlag(bool homeAgentFlag) [member function]
-    cls.add_method('SetHomeAgentFlag', 
-                   'void', 
-                   [param('bool', 'homeAgentFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentInfo(bool homeAgentFlag) [member function]
-    cls.add_method('SetHomeAgentInfo', 
-                   'void', 
-                   [param('bool', 'homeAgentFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentLifeTime(uint32_t homeAgentLifeTime) [member function]
-    cls.add_method('SetHomeAgentLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'homeAgentLifeTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentPreference(uint32_t homeAgentPreference) [member function]
-    cls.add_method('SetHomeAgentPreference', 
-                   'void', 
-                   [param('uint32_t', 'homeAgentPreference')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetIntervalOpt(bool intervalOpt) [member function]
-    cls.add_method('SetIntervalOpt', 
-                   'void', 
-                   [param('bool', 'intervalOpt')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
-    cls.add_method('SetLastRaTxTime', 
-                   'void', 
-                   [param('ns3::Time', 'now')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
-    cls.add_method('SetLinkMtu', 
-                   'void', 
-                   [param('uint32_t', 'linkMtu')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetManagedFlag(bool managedFlag) [member function]
-    cls.add_method('SetManagedFlag', 
-                   'void', 
-                   [param('bool', 'managedFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMaxRtrAdvInterval(uint32_t maxRtrAdvInterval) [member function]
-    cls.add_method('SetMaxRtrAdvInterval', 
-                   'void', 
-                   [param('uint32_t', 'maxRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMinDelayBetweenRAs(uint32_t minDelayBetweenRAs) [member function]
-    cls.add_method('SetMinDelayBetweenRAs', 
-                   'void', 
-                   [param('uint32_t', 'minDelayBetweenRAs')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMinRtrAdvInterval(uint32_t minRtrAdvInterval) [member function]
-    cls.add_method('SetMinRtrAdvInterval', 
-                   'void', 
-                   [param('uint32_t', 'minRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMobRtrSupportFlag(bool mobRtrSupportFlag) [member function]
-    cls.add_method('SetMobRtrSupportFlag', 
-                   'void', 
-                   [param('bool', 'mobRtrSupportFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetOtherConfigFlag(bool otherConfigFlag) [member function]
-    cls.add_method('SetOtherConfigFlag', 
-                   'void', 
-                   [param('bool', 'otherConfigFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetReachableTime(uint32_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint32_t', 'reachableTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetRetransTimer(uint32_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint32_t', 'retransTimer')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetSendAdvert(bool sendAdvert) [member function]
-    cls.add_method('SetSendAdvert', 
-                   'void', 
-                   [param('bool', 'sendAdvert')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetSourceLLAddress(bool sourceLLAddress) [member function]
-    cls.add_method('SetSourceLLAddress', 
-                   'void', 
-                   [param('bool', 'sourceLLAddress')])
-    return
-
-def register_Ns3RadvdPrefix_methods(root_module, cls):
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix::RadvdPrefix(ns3::RadvdPrefix const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdPrefix const &', 'arg0')])
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix::RadvdPrefix(ns3::Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime=604800, uint32_t validLifeTime=2592000, bool onLinkFlag=true, bool autonomousFlag=true, bool routerAddrFlag=false) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('uint8_t', 'prefixLength'), param('uint32_t', 'preferredLifeTime', default_value='604800'), param('uint32_t', 'validLifeTime', default_value='2592000'), param('bool', 'onLinkFlag', default_value='true'), param('bool', 'autonomousFlag', default_value='true'), param('bool', 'routerAddrFlag', default_value='false')])
-    ## radvd-prefix.h (module 'applications'): ns3::Ipv6Address ns3::RadvdPrefix::GetNetwork() const [member function]
-    cls.add_method('GetNetwork', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint32_t ns3::RadvdPrefix::GetPreferredLifeTime() const [member function]
-    cls.add_method('GetPreferredLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint8_t ns3::RadvdPrefix::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint8_t', 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
                    [], 
                    is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint32_t ns3::RadvdPrefix::GetValidLifeTime() const [member function]
-    cls.add_method('GetValidLifeTime', 
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
                    'uint32_t', 
                    [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsAutonomousFlag() const [member function]
-    cls.add_method('IsAutonomousFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsOnLinkFlag() const [member function]
-    cls.add_method('IsOnLinkFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsRouterAddrFlag() const [member function]
-    cls.add_method('IsRouterAddrFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetAutonomousFlag(bool autonomousFlag) [member function]
-    cls.add_method('SetAutonomousFlag', 
-                   'void', 
-                   [param('bool', 'autonomousFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetNetwork(ns3::Ipv6Address network) [member function]
-    cls.add_method('SetNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetOnLinkFlag(bool onLinkFlag) [member function]
-    cls.add_method('SetOnLinkFlag', 
-                   'void', 
-                   [param('bool', 'onLinkFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetPreferredLifeTime(uint32_t preferredLifeTime) [member function]
-    cls.add_method('SetPreferredLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'preferredLifeTime')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetPrefixLength(uint8_t prefixLength) [member function]
-    cls.add_method('SetPrefixLength', 
-                   'void', 
-                   [param('uint8_t', 'prefixLength')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetRouterAddrFlag(bool routerAddrFlag) [member function]
-    cls.add_method('SetRouterAddrFlag', 
-                   'void', 
-                   [param('bool', 'routerAddrFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetValidLifeTime(uint32_t validLifeTime) [member function]
-    cls.add_method('SetValidLifeTime', 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('uint32_t', 'validLifeTime')])
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3RateErrorModel_methods(root_module, cls):
@@ -10499,7 +10084,7 @@
     cls.add_constructor([param('ns3::SimpleNetDevice const &', 'arg0')])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice::SimpleNetDevice() [constructor]
     cls.add_constructor([])
-    ## simple-net-device.h (module 'network'): void ns3::SimpleNetDevice::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]
+    ## simple-net-device.h (module 'network'): void ns3::SimpleNetDevice::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')], 
@@ -10983,33 +10568,6 @@
                    [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3V4Ping_methods(root_module, cls):
-    ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
-    ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping() [constructor]
-    cls.add_constructor([])
-    ## v4ping.h (module 'applications'): static ns3::TypeId ns3::V4Ping::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/applications/bindings/modulegen__gcc_LP64.py ns-3.25/src/applications/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/applications/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -40,8 +40,6 @@
     module.add_class('AttributeConstructionList', import_from_module='ns.core')
     ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
     module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
-    ## average.h (module 'stats'): ns3::Average<double> [class]
-    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
     ## buffer.h (module 'network'): ns3::Buffer [class]
     module.add_class('Buffer', import_from_module='ns.network')
     ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
@@ -157,13 +155,9 @@
     ## 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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper [class]
-    module.add_class('Ping6Helper')
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper [class]
-    module.add_class('RadvdHelper')
     ## simple-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper [class]
     module.add_class('SimpleNetDeviceHelper', import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -180,6 +174,8 @@
     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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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,8 +194,6 @@
     module.add_class('UdpServerHelper')
     ## udp-client-server-helper.h (module 'applications'): ns3::UdpTraceClientHelper [class]
     module.add_class('UdpTraceClientHelper')
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper [class]
-    module.add_class('V4PingHelper')
     ## 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]
@@ -248,12 +242,6 @@
     module.add_enum('', ['VHT_FLAGS_NONE', 'VHT_FLAGS_STBC', 'VHT_FLAGS_TXOP_PS_NOT_ALLOWED', 'VHT_FLAGS_GUARD_INTERVAL', 'VHT_FLAGS_SHORT_GI_NSYM_DISAMBIGUATION', 'VHT_FLAGS__LDPC_EXTRA_OFDM_SYMBOL', 'VHT_FLAGS_BEAMFORMED'], outer_class=root_module['ns3::RadiotapHeader'], import_from_module='ns.network')
     ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
     module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
-    ## red-queue.h (module 'network'): ns3::RedQueue [class]
-    module.add_class('RedQueue', import_from_module='ns.network', parent=root_module['ns3::Queue'])
-    ## red-queue.h (module 'network'): ns3::RedQueue [enumeration]
-    module.add_enum('', ['DTYPE_NONE', 'DTYPE_FORCED', 'DTYPE_UNFORCED'], outer_class=root_module['ns3::RedQueue'], import_from_module='ns.network')
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats [struct]
-    module.add_class('Stats', import_from_module='ns.network', outer_class=root_module['ns3::RedQueue'])
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader [class]
     module.add_class('SeqTsHeader', parent=root_module['ns3::Header'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -270,6 +258,8 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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]
@@ -284,18 +274,22 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::PbbPacket', 'ns3::Header', 'ns3::DefaultDeleter<ns3::PbbPacket>'], parent=root_module['ns3::Header'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::PbbTlv', 'ns3::empty', 'ns3::DefaultDeleter<ns3::PbbTlv>'], 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::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdInterface', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdInterface>'], 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::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdPrefix', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdPrefix>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
+    ## sll-header.h (module 'network'): ns3::SllHeader [class]
+    module.add_class('SllHeader', import_from_module='ns.network', parent=root_module['ns3::Header'])
+    ## sll-header.h (module 'network'): ns3::SllHeader::PacketType [enumeration]
+    module.add_enum('PacketType', ['UNICAST_FROM_PEER_TO_ME', 'BROADCAST_BY_PEER', 'MULTICAST_BY_PEER', 'INTERCEPTED_PACKET', 'SENT_BY_US'], outer_class=root_module['ns3::SllHeader'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket [class]
     module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -426,14 +420,16 @@
     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'])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
-    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int> [class]
     module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['unsigned int'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
     ## 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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -480,16 +476,10 @@
     module.add_class('PbbPacket', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     ## packetbb.h (module 'network'): ns3::PbbTlv [class]
     module.add_class('PbbTlv', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
-    ## ping6.h (module 'applications'): ns3::Ping6 [class]
-    module.add_class('Ping6', parent=root_module['ns3::Application'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
-    ## radvd.h (module 'applications'): ns3::Radvd [class]
-    module.add_class('Radvd', parent=root_module['ns3::Application'])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface [class]
-    module.add_class('RadvdInterface', parent=root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix [class]
-    module.add_class('RadvdPrefix', parent=root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -518,8 +508,6 @@
     module.add_class('UdpTraceClient', parent=root_module['ns3::Application'])
     ## uinteger.h (module 'core'): ns3::UintegerValue [class]
     module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## v4ping.h (module 'applications'): ns3::V4Ping [class]
-    module.add_class('V4Ping', parent=root_module['ns3::Application'])
     ## 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]
@@ -536,11 +524,10 @@
     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=u'vector')
     module.add_container('std::list< ns3::Ptr< ns3::Packet > >', 'ns3::Ptr< ns3::Packet >', container_type=u'list')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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&')
@@ -680,7 +667,6 @@
     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_Ns3Average__Double_methods(root_module, root_module['ns3::Average< double >'])
     register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
     register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
     register_Ns3BulkSendHelper_methods(root_module, root_module['ns3::BulkSendHelper'])
@@ -729,8 +715,6 @@
     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_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
-    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
     register_Ns3SimpleNetDeviceHelper_methods(root_module, root_module['ns3::SimpleNetDeviceHelper'])
     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'])
@@ -739,6 +723,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -747,7 +732,6 @@
     register_Ns3UdpEchoServerHelper_methods(root_module, root_module['ns3::UdpEchoServerHelper'])
     register_Ns3UdpServerHelper_methods(root_module, root_module['ns3::UdpServerHelper'])
     register_Ns3UdpTraceClientHelper_methods(root_module, root_module['ns3::UdpTraceClientHelper'])
-    register_Ns3V4PingHelper_methods(root_module, root_module['ns3::V4PingHelper'])
     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'])
@@ -763,8 +747,6 @@
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
     register_Ns3RadiotapHeader_methods(root_module, root_module['ns3::RadiotapHeader'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
-    register_Ns3RedQueue_methods(root_module, root_module['ns3::RedQueue'])
-    register_Ns3RedQueueStats_methods(root_module, root_module['ns3::RedQueue::Stats'])
     register_Ns3SeqTsHeader_methods(root_module, root_module['ns3::SeqTsHeader'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -773,6 +755,7 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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> >'])
@@ -780,9 +763,9 @@
     register_Ns3SimpleRefCount__Ns3PbbMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3PbbMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbMessage, ns3::empty, ns3::DefaultDeleter<ns3::PbbMessage> >'])
     register_Ns3SimpleRefCount__Ns3PbbPacket_Ns3Header_Ns3DefaultDeleter__lt__ns3PbbPacket__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbPacket, ns3::Header, ns3::DefaultDeleter<ns3::PbbPacket> >'])
     register_Ns3SimpleRefCount__Ns3PbbTlv_Ns3Empty_Ns3DefaultDeleter__lt__ns3PbbTlv__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
-    register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
-    register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3SllHeader_methods(root_module, root_module['ns3::SllHeader'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
     register_Ns3SocketFactory_methods(root_module, root_module['ns3::SocketFactory'])
@@ -847,9 +830,10 @@
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3Mac64AddressChecker_methods(root_module, root_module['ns3::Mac64AddressChecker'])
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
-    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
     register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< unsigned int >'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -873,11 +857,8 @@
     register_Ns3PbbMessageIpv6_methods(root_module, root_module['ns3::PbbMessageIpv6'])
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
-    register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
-    register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
-    register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
-    register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
@@ -891,7 +872,6 @@
     register_Ns3UdpServer_methods(root_module, root_module['ns3::UdpServer'])
     register_Ns3UdpTraceClient_methods(root_module, root_module['ns3::UdpTraceClient'])
     register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
-    register_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3ApplicationPacketProbe_methods(root_module, root_module['ns3::ApplicationPacketProbe'])
@@ -1218,71 +1198,6 @@
     cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
     return
 
-def register_Ns3Average__Double_methods(root_module, cls):
-    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
-    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
-    cls.add_constructor([])
-    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
-    cls.add_method('Avg', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
-    cls.add_method('Count', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
-    cls.add_method('Error90', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
-    cls.add_method('Error95', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
-    cls.add_method('Error99', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
-    cls.add_method('Max', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
-    cls.add_method('Mean', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
-    cls.add_method('Min', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
-    cls.add_method('Stddev', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('double const &', 'x')])
-    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
-    cls.add_method('Var', 
-                   'double', 
-                   [], 
-                   is_const=True)
-    return
-
 def register_Ns3Buffer_methods(root_module, cls):
     ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
     cls.add_constructor([])
@@ -2021,6 +1936,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -2036,6 +1956,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2212,7 +2137,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -3408,10 +3333,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3493,72 +3422,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3Ping6Helper_methods(root_module, cls):
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper::Ping6Helper(ns3::Ping6Helper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ping6Helper const &', 'arg0')])
-    ## ping6-helper.h (module 'applications'): ns3::Ping6Helper::Ping6Helper() [constructor]
-    cls.add_constructor([])
-    ## ping6-helper.h (module 'applications'): ns3::ApplicationContainer ns3::Ping6Helper::Install(ns3::NodeContainer c) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'c')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetIfIndex(uint32_t ifIndex) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t', 'ifIndex')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetLocal(ns3::Ipv6Address ip) [member function]
-    cls.add_method('SetLocal', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetRemote(ns3::Ipv6Address ip) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ip')])
-    ## ping6-helper.h (module 'applications'): void ns3::Ping6Helper::SetRoutersAddress(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
-    cls.add_method('SetRoutersAddress', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
-    return
-
-def register_Ns3RadvdHelper_methods(root_module, cls):
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
-    ## radvd-helper.h (module 'applications'): ns3::RadvdHelper::RadvdHelper() [constructor]
-    cls.add_constructor([])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
-    cls.add_method('AddAnnouncedPrefix', 
-                   'void', 
-                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::ClearPrefixes() [member function]
-    cls.add_method('ClearPrefixes', 
-                   'void', 
-                   [])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
-    cls.add_method('DisableDefaultRouterForInterface', 
-                   'void', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
-    cls.add_method('EnableDefaultRouterForInterface', 
-                   'void', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
-    cls.add_method('GetRadvdInterface', 
-                   'ns3::Ptr< ns3::RadvdInterface >', 
-                   [param('uint32_t', 'interface')])
-    ## radvd-helper.h (module 'applications'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## radvd-helper.h (module 'applications'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3SimpleNetDeviceHelper_methods(root_module, cls):
     ## simple-net-device-helper.h (module 'network'): ns3::SimpleNetDeviceHelper::SimpleNetDeviceHelper(ns3::SimpleNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimpleNetDeviceHelper const &', 'arg0')])
@@ -3878,6 +3741,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -4219,32 +4116,6 @@
                    [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
     return
 
-def register_Ns3V4PingHelper_methods(root_module, cls):
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper::V4PingHelper(ns3::V4PingHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::V4PingHelper const &', 'arg0')])
-    ## v4ping-helper.h (module 'applications'): ns3::V4PingHelper::V4PingHelper(ns3::Ipv4Address remote) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'remote')])
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::NodeContainer nodes) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::NodeContainer', 'nodes')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): ns3::ApplicationContainer ns3::V4PingHelper::Install(std::string nodeName) const [member function]
-    cls.add_method('Install', 
-                   'ns3::ApplicationContainer', 
-                   [param('std::string', 'nodeName')], 
-                   is_const=True)
-    ## v4ping-helper.h (module 'applications'): void ns3::V4PingHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
-    cls.add_method('SetAttribute', 
-                   'void', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
-    return
-
 def register_Ns3Empty_methods(root_module, cls):
     ## empty.h (module 'core'): ns3::empty::empty() [constructor]
     cls.add_constructor([])
@@ -4736,6 +4607,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4771,18 +4646,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -4823,33 +4713,45 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
@@ -5080,74 +4982,6 @@
                    is_const=True, visibility='protected')
     return
 
-def register_Ns3RedQueue_methods(root_module, cls):
-    ## red-queue.h (module 'network'): ns3::RedQueue::RedQueue(ns3::RedQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RedQueue const &', 'arg0')])
-    ## red-queue.h (module 'network'): ns3::RedQueue::RedQueue() [constructor]
-    cls.add_constructor([])
-    ## red-queue.h (module 'network'): int64_t ns3::RedQueue::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## red-queue.h (module 'network'): ns3::Queue::QueueMode ns3::RedQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## red-queue.h (module 'network'): uint32_t ns3::RedQueue::GetQueueSize() [member function]
-    cls.add_method('GetQueueSize', 
-                   'uint32_t', 
-                   [])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats ns3::RedQueue::GetStats() [member function]
-    cls.add_method('GetStats', 
-                   'ns3::RedQueue::Stats', 
-                   [])
-    ## red-queue.h (module 'network'): static ns3::TypeId ns3::RedQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetQueueLimit(uint32_t lim) [member function]
-    cls.add_method('SetQueueLimit', 
-                   'void', 
-                   [param('uint32_t', 'lim')])
-    ## red-queue.h (module 'network'): void ns3::RedQueue::SetTh(double minTh, double maxTh) [member function]
-    cls.add_method('SetTh', 
-                   'void', 
-                   [param('double', 'minTh'), param('double', 'maxTh')])
-    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::RedQueue::DoDequeue() [member function]
-    cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): bool ns3::RedQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
-    cls.add_method('DoEnqueue', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
-                   visibility='private', is_virtual=True)
-    ## red-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::RedQueue::DoPeek() const [member function]
-    cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
-def register_Ns3RedQueueStats_methods(root_module, cls):
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::Stats() [constructor]
-    cls.add_constructor([])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::Stats(ns3::RedQueue::Stats const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RedQueue::Stats const &', 'arg0')])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::forcedDrop [variable]
-    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::qLimDrop [variable]
-    cls.add_instance_attribute('qLimDrop', 'uint32_t', is_const=False)
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats::unforcedDrop [variable]
-    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
-    return
-
 def register_Ns3SeqTsHeader_methods(root_module, cls):
     ## seq-ts-header.h (module 'applications'): ns3::SeqTsHeader::SeqTsHeader(ns3::SeqTsHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SeqTsHeader const &', 'arg0')])
@@ -5311,6 +5145,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -5395,24 +5241,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount() [constructor]
-    cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter< ns3::RadvdInterface > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::Cleanup() [member function]
-    cls.add_method('Cleanup', 
-                   'void', 
-                   [], 
-                   is_static=True)
-    return
-
-def register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter< ns3::RadvdPrefix > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -5431,6 +5265,61 @@
                    is_static=True)
     return
 
+def register_Ns3SllHeader_methods(root_module, cls):
+    ## sll-header.h (module 'network'): ns3::SllHeader::SllHeader(ns3::SllHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SllHeader const &', 'arg0')])
+    ## sll-header.h (module 'network'): ns3::SllHeader::SllHeader() [constructor]
+    cls.add_constructor([])
+    ## sll-header.h (module 'network'): uint32_t ns3::SllHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## sll-header.h (module 'network'): uint16_t ns3::SllHeader::GetArpType() const [member function]
+    cls.add_method('GetArpType', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## sll-header.h (module 'network'): ns3::TypeId ns3::SllHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): ns3::SllHeader::PacketType ns3::SllHeader::GetPacketType() const [member function]
+    cls.add_method('GetPacketType', 
+                   'ns3::SllHeader::PacketType', 
+                   [], 
+                   is_const=True)
+    ## sll-header.h (module 'network'): uint32_t ns3::SllHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): static ns3::TypeId ns3::SllHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## sll-header.h (module 'network'): void ns3::SllHeader::SetArpType(uint16_t arphdType) [member function]
+    cls.add_method('SetArpType', 
+                   'void', 
+                   [param('uint16_t', 'arphdType')])
+    ## sll-header.h (module 'network'): void ns3::SllHeader::SetPacketType(ns3::SllHeader::PacketType type) [member function]
+    cls.add_method('SetPacketType', 
+                   'void', 
+                   [param('ns3::SllHeader::PacketType', 'type')])
+    return
+
 def register_Ns3Socket_methods(root_module, cls):
     ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Socket const &', 'arg0')])
@@ -5510,6 +5399,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -5535,6 +5429,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -7076,33 +6985,24 @@
     cls.add_constructor([param('ns3::DropTailQueue const &', 'arg0')])
     ## drop-tail-queue.h (module 'network'): ns3::DropTailQueue::DropTailQueue() [constructor]
     cls.add_constructor([])
-    ## drop-tail-queue.h (module 'network'): ns3::Queue::QueueMode ns3::DropTailQueue::GetMode() const [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [], 
-                   is_const=True)
     ## drop-tail-queue.h (module 'network'): static ns3::TypeId ns3::DropTailQueue::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## drop-tail-queue.h (module 'network'): void ns3::DropTailQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::DropTailQueue::DoDequeue() [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::DropTailQueue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## drop-tail-queue.h (module 'network'): bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    visibility='private', is_virtual=True)
-    ## drop-tail-queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::DropTailQueue::DoPeek() const [member function]
+    ## drop-tail-queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::DropTailQueue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
     return
@@ -7952,105 +7852,35 @@
                    [param('ns3::Mac64Address const &', 'value')])
     return
 
-def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
+def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
     cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
     cls.add_method('Output', 
                    'void', 
                    [param('ns3::DataOutputCallback &', 'callback')], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
     cls.add_method('Reset', 
                    'void', 
                    [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
     cls.add_method('Update', 
                    'void', 
-                   [param('double const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
+                   [param('unsigned int const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
     cls.add_method('getCount', 
                    'long int', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
-    cls.add_method('getMax', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
-    cls.add_method('getMean', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
-    cls.add_method('getMin', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
-    cls.add_method('getSqrSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
-    cls.add_method('getStddev', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
-    cls.add_method('getSum', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
-    cls.add_method('getVariance', 
-                   'double', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3MinMaxAvgTotalCalculator__Unsigned_int_methods(root_module, cls):
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<unsigned int> const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< unsigned int > const &', 'arg0')])
-    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<unsigned int>::MinMaxAvgTotalCalculator() [constructor]
-    cls.add_constructor([])
-    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<unsigned int>::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Output(ns3::DataOutputCallback & callback) const [member function]
-    cls.add_method('Output', 
-                   'void', 
-                   [param('ns3::DataOutputCallback &', 'callback')], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Reset() [member function]
-    cls.add_method('Reset', 
-                   'void', 
-                   [])
-    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<unsigned int>::Update(unsigned int const i) [member function]
-    cls.add_method('Update', 
-                   'void', 
-                   [param('unsigned int const', 'i')])
-    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<unsigned int>::getCount() const [member function]
-    cls.add_method('getCount', 
-                   'long int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<unsigned int>::getMax() const [member function]
     cls.add_method('getMax', 
                    'double', 
                    [], 
@@ -8097,7 +7927,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -8224,6 +8054,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -8303,6 +8219,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -8786,6 +8707,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## packet-socket.h (module 'network'): int ns3::PacketSocket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## packet-socket.h (module 'network'): uint32_t ns3::PacketSocket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -9969,49 +9895,6 @@
                    visibility='protected')
     return
 
-def register_Ns3Ping6_methods(root_module, cls):
-    ## ping6.h (module 'applications'): ns3::Ping6::Ping6(ns3::Ping6 const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Ping6 const &', 'arg0')])
-    ## ping6.h (module 'applications'): ns3::Ping6::Ping6() [constructor]
-    cls.add_constructor([])
-    ## ping6.h (module 'applications'): static ns3::TypeId ns3::Ping6::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetIfIndex(uint32_t ifIndex) [member function]
-    cls.add_method('SetIfIndex', 
-                   'void', 
-                   [param('uint32_t', 'ifIndex')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetLocal(ns3::Ipv6Address ipv6) [member function]
-    cls.add_method('SetLocal', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ipv6')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetRemote(ns3::Ipv6Address ipv6) [member function]
-    cls.add_method('SetRemote', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'ipv6')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::SetRouters(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
-    cls.add_method('SetRouters', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
-    ## ping6.h (module 'applications'): void ns3::Ping6::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## ping6.h (module 'applications'): void ns3::Ping6::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
 def register_Ns3Probe_methods(root_module, cls):
     ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Probe const &', 'arg0')])
@@ -10039,323 +9922,25 @@
                    is_const=True, is_virtual=True)
     return
 
-def register_Ns3Radvd_methods(root_module, cls):
-    ## radvd.h (module 'applications'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
-    ## radvd.h (module 'applications'): ns3::Radvd::Radvd() [constructor]
-    cls.add_constructor([])
-    ## radvd.h (module 'applications'): void ns3::Radvd::AddConfiguration(ns3::Ptr<ns3::RadvdInterface> routerInterface) [member function]
-    cls.add_method('AddConfiguration', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::RadvdInterface >', 'routerInterface')])
-    ## radvd.h (module 'applications'): int64_t ns3::Radvd::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## radvd.h (module 'applications'): static ns3::TypeId ns3::Radvd::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
-    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
-    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
-    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
-    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## radvd.h (module 'applications'): void ns3::Radvd::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
-def register_Ns3RadvdInterface_methods(root_module, cls):
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(ns3::RadvdInterface const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdInterface const &', 'arg0')])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(uint32_t interface) [constructor]
-    cls.add_constructor([param('uint32_t', 'interface')])
-    ## radvd-interface.h (module 'applications'): ns3::RadvdInterface::RadvdInterface(uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval) [constructor]
-    cls.add_constructor([param('uint32_t', 'interface'), param('uint32_t', 'maxRtrAdvInterval'), param('uint32_t', 'minRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::AddPrefix(ns3::Ptr<ns3::RadvdPrefix> routerPrefix) [member function]
-    cls.add_method('AddPrefix', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::RadvdPrefix >', 'routerPrefix')])
-    ## radvd-interface.h (module 'applications'): uint8_t ns3::RadvdInterface::GetCurHopLimit() const [member function]
-    cls.add_method('GetCurHopLimit', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetDefaultLifeTime() const [member function]
-    cls.add_method('GetDefaultLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint8_t ns3::RadvdInterface::GetDefaultPreference() const [member function]
-    cls.add_method('GetDefaultPreference', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetHomeAgentLifeTime() const [member function]
-    cls.add_method('GetHomeAgentLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetHomeAgentPreference() const [member function]
-    cls.add_method('GetHomeAgentPreference', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetInterface() const [member function]
-    cls.add_method('GetInterface', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
-    cls.add_method('GetLastRaTxTime', 
-                   'ns3::Time', 
-                   [])
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
-    cls.add_method('GetLinkMtu', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMaxRtrAdvInterval() const [member function]
-    cls.add_method('GetMaxRtrAdvInterval', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMinDelayBetweenRAs() const [member function]
-    cls.add_method('GetMinDelayBetweenRAs', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetMinRtrAdvInterval() const [member function]
-    cls.add_method('GetMinRtrAdvInterval', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): std::list<ns3::Ptr<ns3::RadvdPrefix>, std::allocator<ns3::Ptr<ns3::RadvdPrefix> > > ns3::RadvdInterface::GetPrefixes() const [member function]
-    cls.add_method('GetPrefixes', 
-                   'std::list< ns3::Ptr< ns3::RadvdPrefix > >', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetReachableTime() const [member function]
-    cls.add_method('GetReachableTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): uint32_t ns3::RadvdInterface::GetRetransTimer() const [member function]
-    cls.add_method('GetRetransTimer', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsHomeAgentFlag() const [member function]
-    cls.add_method('IsHomeAgentFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsHomeAgentInfo() const [member function]
-    cls.add_method('IsHomeAgentInfo', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
-    cls.add_method('IsInitialRtrAdv', 
-                   'bool', 
-                   [])
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
-    cls.add_method('IsIntervalOpt', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsManagedFlag() const [member function]
-    cls.add_method('IsManagedFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsMobRtrSupportFlag() const [member function]
-    cls.add_method('IsMobRtrSupportFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsOtherConfigFlag() const [member function]
-    cls.add_method('IsOtherConfigFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsSendAdvert() const [member function]
-    cls.add_method('IsSendAdvert', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): bool ns3::RadvdInterface::IsSourceLLAddress() const [member function]
-    cls.add_method('IsSourceLLAddress', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetCurHopLimit(uint8_t curHopLimit) [member function]
-    cls.add_method('SetCurHopLimit', 
-                   'void', 
-                   [param('uint8_t', 'curHopLimit')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetDefaultLifeTime(uint32_t defaultLifeTime) [member function]
-    cls.add_method('SetDefaultLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'defaultLifeTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetDefaultPreference(uint8_t defaultPreference) [member function]
-    cls.add_method('SetDefaultPreference', 
-                   'void', 
-                   [param('uint8_t', 'defaultPreference')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentFlag(bool homeAgentFlag) [member function]
-    cls.add_method('SetHomeAgentFlag', 
-                   'void', 
-                   [param('bool', 'homeAgentFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentInfo(bool homeAgentFlag) [member function]
-    cls.add_method('SetHomeAgentInfo', 
-                   'void', 
-                   [param('bool', 'homeAgentFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentLifeTime(uint32_t homeAgentLifeTime) [member function]
-    cls.add_method('SetHomeAgentLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'homeAgentLifeTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetHomeAgentPreference(uint32_t homeAgentPreference) [member function]
-    cls.add_method('SetHomeAgentPreference', 
-                   'void', 
-                   [param('uint32_t', 'homeAgentPreference')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetIntervalOpt(bool intervalOpt) [member function]
-    cls.add_method('SetIntervalOpt', 
-                   'void', 
-                   [param('bool', 'intervalOpt')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
-    cls.add_method('SetLastRaTxTime', 
-                   'void', 
-                   [param('ns3::Time', 'now')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
-    cls.add_method('SetLinkMtu', 
-                   'void', 
-                   [param('uint32_t', 'linkMtu')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetManagedFlag(bool managedFlag) [member function]
-    cls.add_method('SetManagedFlag', 
-                   'void', 
-                   [param('bool', 'managedFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMaxRtrAdvInterval(uint32_t maxRtrAdvInterval) [member function]
-    cls.add_method('SetMaxRtrAdvInterval', 
-                   'void', 
-                   [param('uint32_t', 'maxRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMinDelayBetweenRAs(uint32_t minDelayBetweenRAs) [member function]
-    cls.add_method('SetMinDelayBetweenRAs', 
-                   'void', 
-                   [param('uint32_t', 'minDelayBetweenRAs')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMinRtrAdvInterval(uint32_t minRtrAdvInterval) [member function]
-    cls.add_method('SetMinRtrAdvInterval', 
-                   'void', 
-                   [param('uint32_t', 'minRtrAdvInterval')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetMobRtrSupportFlag(bool mobRtrSupportFlag) [member function]
-    cls.add_method('SetMobRtrSupportFlag', 
-                   'void', 
-                   [param('bool', 'mobRtrSupportFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetOtherConfigFlag(bool otherConfigFlag) [member function]
-    cls.add_method('SetOtherConfigFlag', 
-                   'void', 
-                   [param('bool', 'otherConfigFlag')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetReachableTime(uint32_t reachableTime) [member function]
-    cls.add_method('SetReachableTime', 
-                   'void', 
-                   [param('uint32_t', 'reachableTime')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetRetransTimer(uint32_t retransTimer) [member function]
-    cls.add_method('SetRetransTimer', 
-                   'void', 
-                   [param('uint32_t', 'retransTimer')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetSendAdvert(bool sendAdvert) [member function]
-    cls.add_method('SetSendAdvert', 
-                   'void', 
-                   [param('bool', 'sendAdvert')])
-    ## radvd-interface.h (module 'applications'): void ns3::RadvdInterface::SetSourceLLAddress(bool sourceLLAddress) [member function]
-    cls.add_method('SetSourceLLAddress', 
-                   'void', 
-                   [param('bool', 'sourceLLAddress')])
-    return
-
-def register_Ns3RadvdPrefix_methods(root_module, cls):
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix::RadvdPrefix(ns3::RadvdPrefix const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::RadvdPrefix const &', 'arg0')])
-    ## radvd-prefix.h (module 'applications'): ns3::RadvdPrefix::RadvdPrefix(ns3::Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime=604800, uint32_t validLifeTime=2592000, bool onLinkFlag=true, bool autonomousFlag=true, bool routerAddrFlag=false) [constructor]
-    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('uint8_t', 'prefixLength'), param('uint32_t', 'preferredLifeTime', default_value='604800'), param('uint32_t', 'validLifeTime', default_value='2592000'), param('bool', 'onLinkFlag', default_value='true'), param('bool', 'autonomousFlag', default_value='true'), param('bool', 'routerAddrFlag', default_value='false')])
-    ## radvd-prefix.h (module 'applications'): ns3::Ipv6Address ns3::RadvdPrefix::GetNetwork() const [member function]
-    cls.add_method('GetNetwork', 
-                   'ns3::Ipv6Address', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint32_t ns3::RadvdPrefix::GetPreferredLifeTime() const [member function]
-    cls.add_method('GetPreferredLifeTime', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint8_t ns3::RadvdPrefix::GetPrefixLength() const [member function]
-    cls.add_method('GetPrefixLength', 
-                   'uint8_t', 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
                    [], 
                    is_const=True)
-    ## radvd-prefix.h (module 'applications'): uint32_t ns3::RadvdPrefix::GetValidLifeTime() const [member function]
-    cls.add_method('GetValidLifeTime', 
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
                    'uint32_t', 
                    [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsAutonomousFlag() const [member function]
-    cls.add_method('IsAutonomousFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsOnLinkFlag() const [member function]
-    cls.add_method('IsOnLinkFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): bool ns3::RadvdPrefix::IsRouterAddrFlag() const [member function]
-    cls.add_method('IsRouterAddrFlag', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetAutonomousFlag(bool autonomousFlag) [member function]
-    cls.add_method('SetAutonomousFlag', 
-                   'void', 
-                   [param('bool', 'autonomousFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetNetwork(ns3::Ipv6Address network) [member function]
-    cls.add_method('SetNetwork', 
-                   'void', 
-                   [param('ns3::Ipv6Address', 'network')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetOnLinkFlag(bool onLinkFlag) [member function]
-    cls.add_method('SetOnLinkFlag', 
-                   'void', 
-                   [param('bool', 'onLinkFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetPreferredLifeTime(uint32_t preferredLifeTime) [member function]
-    cls.add_method('SetPreferredLifeTime', 
-                   'void', 
-                   [param('uint32_t', 'preferredLifeTime')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetPrefixLength(uint8_t prefixLength) [member function]
-    cls.add_method('SetPrefixLength', 
-                   'void', 
-                   [param('uint8_t', 'prefixLength')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetRouterAddrFlag(bool routerAddrFlag) [member function]
-    cls.add_method('SetRouterAddrFlag', 
-                   'void', 
-                   [param('bool', 'routerAddrFlag')])
-    ## radvd-prefix.h (module 'applications'): void ns3::RadvdPrefix::SetValidLifeTime(uint32_t validLifeTime) [member function]
-    cls.add_method('SetValidLifeTime', 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('uint32_t', 'validLifeTime')])
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3RateErrorModel_methods(root_module, cls):
@@ -10499,7 +10084,7 @@
     cls.add_constructor([param('ns3::SimpleNetDevice const &', 'arg0')])
     ## simple-net-device.h (module 'network'): ns3::SimpleNetDevice::SimpleNetDevice() [constructor]
     cls.add_constructor([])
-    ## simple-net-device.h (module 'network'): void ns3::SimpleNetDevice::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]
+    ## simple-net-device.h (module 'network'): void ns3::SimpleNetDevice::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')], 
@@ -10983,33 +10568,6 @@
                    [param('uint64_t const &', 'value')])
     return
 
-def register_Ns3V4Ping_methods(root_module, cls):
-    ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
-    ## v4ping.h (module 'applications'): ns3::V4Ping::V4Ping() [constructor]
-    cls.add_constructor([])
-    ## v4ping.h (module 'applications'): static ns3::TypeId ns3::V4Ping::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::StartApplication() [member function]
-    cls.add_method('StartApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## v4ping.h (module 'applications'): void ns3::V4Ping::StopApplication() [member function]
-    cls.add_method('StopApplication', 
-                   'void', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    return
-
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/applications/helper/ping6-helper.cc ns-3.25/src/applications/helper/ping6-helper.cc
--- ns-3.24.1/src/applications/helper/ping6-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/ping6-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,78 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008-2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#include "ns3/ping6.h"
-#include "ns3/uinteger.h"
-
-#include "ping6-helper.h"
-
-namespace ns3
-{
-
-Ping6Helper::Ping6Helper ()
-  : m_ifIndex (0)
-{
-  m_factory.SetTypeId (Ping6::GetTypeId ());
-}
-
-void Ping6Helper::SetLocal (Ipv6Address ip)
-{
-  m_localIp = ip;
-}
-
-void Ping6Helper::SetRemote (Ipv6Address ip)
-{
-  m_remoteIp = ip;
-}
-
-void Ping6Helper::SetAttribute (std::string name, const AttributeValue& value)
-{
-  m_factory.Set (name, value);
-}
-
-ApplicationContainer Ping6Helper::Install (NodeContainer c)
-{
-  ApplicationContainer apps;
-  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
-    {
-      Ptr<Node> node = *i;
-      Ptr<Ping6> client = m_factory.Create<Ping6> ();
-      client->SetLocal (m_localIp);
-      client->SetRemote (m_remoteIp);
-      client->SetIfIndex (m_ifIndex);
-      client->SetRouters (m_routers);
-      node->AddApplication (client);
-      apps.Add (client);
-    }
-  return apps;
-}
-
-void Ping6Helper::SetIfIndex (uint32_t ifIndex)
-{
-  m_ifIndex = ifIndex;
-}
-
-void Ping6Helper::SetRoutersAddress (std::vector<Ipv6Address> routers)
-{
-  m_routers = routers;
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/helper/ping6-helper.h ns-3.25/src/applications/helper/ping6-helper.h
--- ns-3.24.1/src/applications/helper/ping6-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/ping6-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,118 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008-2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#ifndef PING6_HELPER_H
-#define PING6_HELPER_H
-
-#include <stdint.h>
-
-#include "ns3/object-factory.h"
-#include "ns3/ipv6-address.h"
-
-#include "ns3/application-container.h"
-#include "ns3/node-container.h"
-
-namespace ns3 {
-
-/**
- * \ingroup ping6
- * \class Ping6Helper
- * \brief Ping6 application helper.
- */
-class Ping6Helper
-{
-public:
-  /**
-   * \brief Constructor.
-   */
-  Ping6Helper ();
-
-  /**
-   * \brief Set the local IPv6 address.
-   * \param ip local IPv6 address
-   */
-  void SetLocal (Ipv6Address ip);
-
-  /**
-   * \brief Set the remote IPv6 address.
-   * \param ip remote IPv6 address
-   */
-  void SetRemote (Ipv6Address ip);
-
-  /**
-   * \brief Set some attributes.
-   * \param name attribute name
-   * \param value attribute value
-   */
-  void SetAttribute (std::string name, const AttributeValue& value);
-
-  /**
-   * \brief Install the application in Nodes.
-   * \param c list of Nodes
-   * \return application container
-   */
-  ApplicationContainer Install (NodeContainer c);
-
-  /**
-   * \brief Set the out interface index.
-   * This is to send to link-local (unicast or multicast) address
-   * when a node has multiple interfaces.
-   * \param ifIndex interface index
-   */
-  void SetIfIndex (uint32_t ifIndex);
-
-
-  /**
-   * \brief Set routers addresses for routing type 0.
-   * \param routers routers addresses
-   */
-  void SetRoutersAddress (std::vector<Ipv6Address> routers);
-
-private:
-  /**
-   * \brief An object factory.
-   */
-  ObjectFactory m_factory;
-
-  /**
-   * \brief The local IPv6 address.
-   */
-  Ipv6Address m_localIp;
-
-  /**
-   * \brief The remote IPv6 address.
-   */
-  Ipv6Address m_remoteIp;
-
-  /**
-   * \brief Out interface index.
-   */
-  uint32_t m_ifIndex;
-
-  /**
-   * \brief Routers addresses.
-   */
-  std::vector<Ipv6Address> m_routers;
-};
-
-} /* namespace ns3 */
-
-#endif /* PING6_HELPER_H */
-
diff -Naur ns-3.24.1/src/applications/helper/radvd-helper.cc ns-3.25/src/applications/helper/radvd-helper.cc
--- ns-3.24.1/src/applications/helper/radvd-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/radvd-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,128 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2013 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/log.h"
-#include "ns3/assert.h"
-#include "ns3/radvd.h"
-#include "ns3/radvd-interface.h"
-#include "ns3/radvd-prefix.h"
-
-#include "radvd-helper.h"
-
-namespace ns3
-{
-
-NS_LOG_COMPONENT_DEFINE ("RadvdHelper");
-
-RadvdHelper::RadvdHelper ()
-{
-  m_factory.SetTypeId (Radvd::GetTypeId ());
-}
-
-void RadvdHelper::AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength)
-{
-  NS_LOG_FUNCTION(this << int(interface) << prefix << int(prefixLength));
-  if (prefixLength != 64)
-    {
-      NS_LOG_WARN("Adding a non-64 prefix is generally a bad idea. Autoconfiguration might not work.");
-    }
-
-  bool prefixFound = false;
-  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
-    {
-      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
-    }
-  else
-    {
-      RadvdInterface::RadvdPrefixList prefixList = m_radvdInterfaces[interface]->GetPrefixes();
-      RadvdInterface::RadvdPrefixListCI iter;
-      for (iter=prefixList.begin(); iter!=prefixList.end(); iter++)
-        {
-          if ((*iter)->GetNetwork() == prefix)
-            {
-              NS_LOG_LOGIC("Not adding the same prefix twice, skipping " << prefix << " " << int(prefixLength));
-              prefixFound = true;
-              break;
-            }
-        }
-    }
-  if (!prefixFound)
-    {
-      Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix> (prefix, prefixLength);
-      m_radvdInterfaces[interface]->AddPrefix(routerPrefix);
-    }
-}
-
-void RadvdHelper::EnableDefaultRouterForInterface (uint32_t interface)
-{
-  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
-    {
-      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
-    }
-  uint32_t maxRtrAdvInterval = m_radvdInterfaces[interface]->GetMaxRtrAdvInterval();
-  m_radvdInterfaces[interface]->SetDefaultLifeTime(3*maxRtrAdvInterval/1000);
-}
-
-void RadvdHelper::DisableDefaultRouterForInterface (uint32_t interface)
-{
-  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
-    {
-      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
-    }
-  m_radvdInterfaces[interface]->SetDefaultLifeTime(0);
-}
-
-Ptr<RadvdInterface> RadvdHelper::GetRadvdInterface (uint32_t interface)
-{
-  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
-    {
-      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
-    }
-  return m_radvdInterfaces[interface];
-}
-
-void RadvdHelper::ClearPrefixes()
-{
-  m_radvdInterfaces.clear();
-}
-
-void RadvdHelper::SetAttribute (std::string name, const AttributeValue& value)
-{
-  m_factory.Set (name, value);
-}
-
-ApplicationContainer RadvdHelper::Install (Ptr<Node> node)
-{
-  ApplicationContainer apps;
-  Ptr<Radvd> radvd = m_factory.Create<Radvd> ();
-  for (RadvdInterfaceMapI iter = m_radvdInterfaces.begin(); iter != m_radvdInterfaces.end(); iter ++)
-    {
-      if (!iter->second->GetPrefixes().empty())
-        {
-          radvd->AddConfiguration(iter->second);
-        }
-    }
-  node->AddApplication (radvd);
-  apps.Add (radvd);
-  return apps;
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/helper/radvd-helper.h ns-3.25/src/applications/helper/radvd-helper.h
--- ns-3.24.1/src/applications/helper/radvd-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/radvd-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,116 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2013 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>
- */
-
-#ifndef RADVD_HELPER_H
-#define RADVD_HELPER_H
-
-#include <stdint.h>
-#include <list>
-#include <map>
-
-#include "ns3/object-factory.h"
-#include "ns3/ipv6-address.h"
-
-#include "ns3/application-container.h"
-#include "ns3/node-container.h"
-#include "ns3/radvd-interface.h"
-
-namespace ns3 {
-
-/**
- * \ingroup radvd
- * \class RadvdHelper
- * \brief Radvd application helper.
- */
-class RadvdHelper
-{
-public:
-  /**
-   * \brief Constructor.
-   */
-  RadvdHelper ();
-
-  /**
-   * \brief Add a new prefix to be announced through an interface.
-   * \param interface outgoing interface
-   * \param prefix announced IPv6 prefix
-   * \param prefixLength announced IPv6 prefix length
-   */
-  void AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength);
-
-  /**
-   * \brief Enable the router as default router for the interface.
-   * The effect is to set the Router Lifetime to the default value (30 minutes)
-   * \param interface outgoing interface
-   */
-  void EnableDefaultRouterForInterface (uint32_t interface);
-
-  /**
-   * \brief Disable the router as default router for the interface.
-   * The effect is to set the Router Lifetime to zero
-   * \param interface outgoing interface
-   */
-  void DisableDefaultRouterForInterface (uint32_t interface);
-
-  /**
-   * \brief Get the low-level RadvdInterface specification for an interface.
-   * This method is provided to enable fine-grain parameter setup.
-   * \param interface outgoing interface
-   * \returns the RadvdInterface
-   */
-  Ptr<RadvdInterface> GetRadvdInterface (uint32_t interface);
-
-  /**
-   * \brief Clear the stored Prefixes
-   */
-  void ClearPrefixes ();
-
-  /**
-   * \brief Set some attributes.
-   * \param name attribute name
-   * \param value attribute value
-   */
-  void SetAttribute (std::string name, const AttributeValue& value);
-
-  /**
-   * \brief Install the application in a Node.
-   * \param node the Node
-   * \return application container
-   */
-  ApplicationContainer Install (Ptr<Node> node);
-
-private:
-  /**
-   * \brief An object factory.
-   */
-  ObjectFactory m_factory;
-
-  /// Container: interface index, RadvdInterface
-  typedef std::map<uint32_t, Ptr<RadvdInterface> > RadvdInterfaceMap;
-  /// Container Iterator: interface index, RadvdInterface
-  typedef std::map<uint32_t, Ptr<RadvdInterface> >::iterator RadvdInterfaceMapI;
-
-  RadvdInterfaceMap m_radvdInterfaces; //!< RadvdInterface(s)
-};
-
-} /* namespace ns3 */
-
-#endif /* RADVD_HELPER_H */
-
diff -Naur ns-3.24.1/src/applications/helper/v4ping-helper.cc ns-3.25/src/applications/helper/v4ping-helper.cc
--- ns-3.24.1/src/applications/helper/v4ping-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/v4ping-helper.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,73 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 INRIA
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#include "v4ping-helper.h"
-#include "ns3/v4ping.h"
-#include "ns3/names.h"
-
-namespace ns3 {
-
-V4PingHelper::V4PingHelper (Ipv4Address remote)
-{
-  m_factory.SetTypeId ("ns3::V4Ping");
-  m_factory.Set ("Remote", Ipv4AddressValue (remote));
-}
-
-void 
-V4PingHelper::SetAttribute (std::string name, const AttributeValue &value)
-{
-  m_factory.Set (name, value);
-}
-
-ApplicationContainer
-V4PingHelper::Install (Ptr<Node> node) const
-{
-  return ApplicationContainer (InstallPriv (node));
-}
-
-ApplicationContainer
-V4PingHelper::Install (std::string nodeName) const
-{
-  Ptr<Node> node = Names::Find<Node> (nodeName);
-  return ApplicationContainer (InstallPriv (node));
-}
-
-ApplicationContainer
-V4PingHelper::Install (NodeContainer c) const
-{
-  ApplicationContainer apps;
-  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
-    {
-      apps.Add (InstallPriv (*i));
-    }
-
-  return apps;
-}
-
-Ptr<Application>
-V4PingHelper::InstallPriv (Ptr<Node> node) const
-{
-  Ptr<V4Ping> app = m_factory.Create<V4Ping> ();
-  node->AddApplication (app);
-
-  return app;
-}
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/applications/helper/v4ping-helper.h ns-3.25/src/applications/helper/v4ping-helper.h
--- ns-3.24.1/src/applications/helper/v4ping-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/helper/v4ping-helper.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,98 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 INRIA
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- */
-
-#ifndef V4PING_HELPER_H
-#define V4PING_HELPER_H
-
-#include "ns3/node-container.h"
-#include "ns3/application-container.h"
-#include "ns3/object-factory.h"
-
-namespace ns3 {
-
-/**
- * \ingroup v4ping
- * \brief Create a IPv5 ping application and associate it to a node
- *
- * This class creates one or multiple instances of ns3::V4Ping and associates
- * it/them to one/multiple node(s).
- */
-class V4PingHelper
-{
-public:
-  /**
-   * Create a V4PingHelper which is used to make life easier for people wanting
-   * to use ping Applications.
-   *
-   * \param remote The address which should be pinged
-   */
-  V4PingHelper (Ipv4Address remote);
-
-  /**
-   * Install a Ping application on each Node in the provided NodeContainer.
-   *
-   * \param nodes The NodeContainer containing all of the nodes to get a V4Ping
-   *              application.
-   *
-   * \returns A list of Ping applications, one for each input node
-   */
-  ApplicationContainer Install (NodeContainer nodes) const;
-
-  /**
-   * Install a Ping application on the provided Node.  The Node is specified
-   * directly by a Ptr<Node>
-   *
-   * \param node The node to install the V4PingApplication on.
-   *
-   * \returns An ApplicationContainer holding the Ping application created.
-   */
-  ApplicationContainer Install (Ptr<Node> node) const;
-
-  /**
-   * Install a Ping application on the provided Node.  The Node is specified
-   * by a string that must have previously been associated with a Node using the
-   * Object Name Service.
-   *
-   * \param nodeName The node to install the V4PingApplication on.
-   *
-   * \returns An ApplicationContainer holding the Ping application created.
-   */
-  ApplicationContainer Install (std::string nodeName) const;
-
-  /**
-   * \brief Configure ping applications attribute 
-   * \param name   attribute's name
-   * \param value  attribute's value
-   */
-  void SetAttribute (std::string name, const AttributeValue &value);
-private:
-  /**
-   * \brief Do the actual application installation in the node
-   * \param node the node
-   * \returns a Smart pointer to the installed application
-   */
-  Ptr<Application> InstallPriv (Ptr<Node> node) const;
-  /// Object factory
-  ObjectFactory m_factory;
-};
-
-} // namespace ns3
-
-#endif /* V4PING_HELPER_H */
diff -Naur ns-3.24.1/src/applications/model/ping6.cc ns-3.25/src/applications/model/ping6.cc
--- ns-3.24.1/src/applications/model/ping6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/ping6.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,288 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007-2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#include "ns3/log.h"
-#include "ns3/nstime.h"
-#include "ns3/simulator.h"
-#include "ns3/socket-factory.h"
-#include "ns3/packet.h"
-#include "ns3/socket.h"
-#include "ns3/uinteger.h"
-#include "ns3/ipv6.h"
-#include "ns3/ipv6-address.h"
-#include "ns3/inet6-socket-address.h"
-#include "ns3/icmpv6-header.h"
-#include "ns3/ipv6-raw-socket-factory.h"
-#include "ns3/ipv6-header.h"
-#include "ns3/ipv6-extension-header.h"
-
-#include "ping6.h"
-
-namespace ns3 
-{
-
-NS_LOG_COMPONENT_DEFINE ("Ping6Application");
-
-NS_OBJECT_ENSURE_REGISTERED (Ping6);
-
-TypeId Ping6::GetTypeId ()
-{
-  static TypeId tid = TypeId ("ns3::Ping6")
-    .SetParent<Application>()
-    .SetGroupName("Applications")
-    .AddConstructor<Ping6>()
-    .AddAttribute ("MaxPackets", 
-                   "The maximum number of packets the application will send",
-                   UintegerValue (100),
-                   MakeUintegerAccessor (&Ping6::m_count),
-                   MakeUintegerChecker<uint32_t>())
-    .AddAttribute ("Interval", 
-                   "The time to wait between packets",
-                   TimeValue (Seconds (1.0)),
-                   MakeTimeAccessor (&Ping6::m_interval),
-                   MakeTimeChecker ())
-    .AddAttribute ("RemoteIpv6", 
-                   "The Ipv6Address of the outbound packets",
-                   Ipv6AddressValue (),
-                   MakeIpv6AddressAccessor (&Ping6::m_peerAddress),
-                   MakeIpv6AddressChecker ())
-    .AddAttribute ("LocalIpv6", 
-                   "Local Ipv6Address of the sender",
-                   Ipv6AddressValue (),
-                   MakeIpv6AddressAccessor (&Ping6::m_localAddress),
-                   MakeIpv6AddressChecker ())
-    .AddAttribute ("PacketSize", 
-                   "Size of packets generated",
-                   UintegerValue (100),
-                   MakeUintegerAccessor (&Ping6::m_size),
-                   MakeUintegerChecker<uint32_t>())
-  ;
-  return tid;
-}
-
-Ping6::Ping6 ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  m_sent = 0;
-  m_socket = 0;
-  m_seq = 0;
-  m_sendEvent = EventId ();
-}
-
-Ping6::~Ping6 ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  m_socket = 0;
-}
-
-void Ping6::DoDispose ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  Application::DoDispose ();
-}
-
-void Ping6::StartApplication ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  if (!m_socket)
-    {
-      TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
-      m_socket = Socket::CreateSocket (GetNode (), tid);
-
-      NS_ASSERT (m_socket);
-
-      m_socket->Bind (Inet6SocketAddress (m_localAddress, 0));
-      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
-      m_socket->SetRecvCallback (MakeCallback (&Ping6::HandleRead, this));
-    }
-
-  ScheduleTransmit (Seconds (0.));
-}
-
-void Ping6::SetLocal (Ipv6Address ipv6) 
-{
-  NS_LOG_FUNCTION (this << ipv6);
-  m_localAddress = ipv6;
-}
-
-void Ping6::SetRemote (Ipv6Address ipv6)
-{
-  NS_LOG_FUNCTION (this << ipv6);
-  m_peerAddress = ipv6;
-}
-
-void Ping6::StopApplication ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-
-  if (m_socket)
-    {
-      m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> >());
-    }
-
-  Simulator::Cancel (m_sendEvent);
-}
-
-void Ping6::SetIfIndex (uint32_t ifIndex)
-{
-  m_ifIndex = ifIndex;
-}
-
-void Ping6::ScheduleTransmit (Time dt)
-{
-  NS_LOG_FUNCTION (this << dt);
-  m_sendEvent = Simulator::Schedule (dt, &Ping6::Send, this);
-}
-
-void Ping6::SetRouters (std::vector<Ipv6Address> routers)
-{
-  m_routers = routers;
-}
-
-void Ping6::Send ()
-{
-  NS_LOG_FUNCTION_NOARGS ();
-  NS_ASSERT (m_sendEvent.IsExpired ());
-  Ptr<Packet> p = 0;
-  uint8_t* data = new uint8_t[m_size];
-  Ipv6Address src;
-  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
-
-  if (m_ifIndex > 0)
-    {
-      /* hack to have ifIndex in Ipv6RawSocketImpl
-       * maybe add a SetIfIndex in Ipv6RawSocketImpl directly 
-       */
-      for (uint32_t i = 0; i < GetNode ()->GetObject<Ipv6> ()->GetNAddresses (m_ifIndex); i++)
-        {
-          Ipv6InterfaceAddress srcIa;
-          srcIa = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, i);
-
-          if (srcIa.IsInSameSubnet (m_peerAddress))
-            {
-              src = srcIa.GetAddress ();
-              break;
-            }
-        }
-     }
-  else
-    {
-      src = m_localAddress;
-    }
-
-  NS_ASSERT_MSG (m_size >= 4, "ICMPv6 echo request payload size must be >= 4");
-  data[0] = 0xDE;
-  data[1] = 0xAD;
-  data[2] = 0xBE;
-  data[3] = 0xEF;
-
-  p = Create<Packet> (data, 4);
-  p->AddAtEnd (Create<Packet> (m_size - 4));
-  Icmpv6Echo req (1);
-
-  req.SetId (0xBEEF);
-  req.SetSeq (m_seq);
-  m_seq++;
-
-  /* we do not calculate pseudo header checksum here, because we are not sure about 
-   * source IPv6 address. Checksum is calculated in Ipv6RawSocketImpl.
-   */
-
-  p->AddHeader (req);
-  m_socket->Bind (Inet6SocketAddress (src, 0));
-
-  /* use Loose Routing (routing type 0) */
-  if (m_routers.size ())
-    {
-      Ipv6ExtensionLooseRoutingHeader routingHeader;
-      routingHeader.SetNextHeader (Ipv6Header::IPV6_ICMPV6);
-      routingHeader.SetLength (m_routers.size () * 16 + 8);
-      routingHeader.SetTypeRouting (0);
-      routingHeader.SetSegmentsLeft (m_routers.size ());
-      routingHeader.SetRoutersAddress (m_routers);
-      p->AddHeader (routingHeader);
-      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_EXT_ROUTING));
-    }
-
-  m_socket->SendTo (p, 0, Inet6SocketAddress (m_peerAddress, 0));
-  ++m_sent;
-
-  NS_LOG_INFO ("Sent " << p->GetSize () << " bytes to " << m_peerAddress);
-
-  if (m_sent < m_count)
-    {
-      ScheduleTransmit (m_interval);
-    }
-
-  delete[] data;
-}
-
-void Ping6::HandleRead (Ptr<Socket> socket)
-{
-  NS_LOG_FUNCTION (this << socket);
-
-  Ptr<Packet> packet=0;
-  Address from;
-  while ((packet = socket->RecvFrom (from)))
-    {
-      if (Inet6SocketAddress::IsMatchingType (from))
-        {
-          Ipv6Header hdr;
-          Icmpv6Echo reply (0);
-          Icmpv6DestinationUnreachable destUnreach;
-          Icmpv6TimeExceeded timeExceeded;
-          Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
-
-          packet->RemoveHeader (hdr);
-
-          uint8_t type;
-          packet->CopyData (&type, sizeof(type));
-
-          switch (type)
-            {
-            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 () <<
-                           " 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:
-              break;
-            }
-        }
-    }
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/model/ping6.h ns-3.25/src/applications/model/ping6.h
--- ns-3.24.1/src/applications/model/ping6.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/ping6.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,188 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2007-2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#ifndef PING6_H
-#define PING6_H
-
-#include "ns3/application.h"
-#include "ns3/event-id.h"
-#include "ns3/ptr.h"
-#include "ns3/ipv6-address.h"
-
-namespace ns3
-{
-
-class Packet;
-class Socket;
-
-/**
- * \ingroup applications 
- * \defgroup ping6 Ping6
- */
-
-/**
- * \ingroup ping6
- * \class Ping6
- * \brief A ping6 application.
- */
-class Ping6 : public Application
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return type ID
-   */
-  static TypeId GetTypeId ();
-
-  /**
-   * \brief Constructor.
-   */
-  Ping6 ();
-
-  /**
-   * \brief Destructor.
-   */
-  virtual ~Ping6 ();
-
-  /**
-   * \brief Set the local address.
-   * \param ipv6 the local IPv6 address
-   */
-  void SetLocal (Ipv6Address ipv6);
-
-  /**
-   * \brief Set the remote peer.
-   * \param ipv6 IPv6 address of the peer
-   */
-  void SetRemote (Ipv6Address ipv6);
-
-  /**
-   * \brief Set the out interface index.
-   * This is to send to link-local (unicast or multicast) address
-   * when a node has multiple interfaces.
-   * \param ifIndex interface index
-   */
-  void SetIfIndex (uint32_t ifIndex);
-
-  /**
-   * \brief Set routers for routing type 0 (loose routing).
-   * \param routers routers addresses
-   */
-  void SetRouters (std::vector<Ipv6Address> routers);
-
-protected:
-  /**
-   * \brief Dispose this object;
-   */
-  virtual void DoDispose ();
-
-private:
-  /**
-   * \brief Start the application.
-   */
-  virtual void StartApplication ();
-
-  /**
-   * \brief Stop the application.
-   */
-  virtual void StopApplication ();
-
-  /**
-   * \brief Schedule sending a packet.
-   * \param dt interval between packet
-   */
-  void ScheduleTransmit (Time dt);
-
-  /**
-   * \brief Send a packet.
-   */
-  void Send ();
-
-  /**
-   * \brief Receive method.
-   * \param socket socket that receive a packet
-   */
-  void HandleRead (Ptr<Socket> socket);
-
-  /**
-   * \brief Peer IPv6 address.
-   */
-  Ipv6Address m_address;
-
-  /**
-   * \brief Number of "Echo request" packets that will be sent.
-   */
-  uint32_t m_count;
-
-  /**
-   * \brief Number of packets sent.
-   */
-  uint32_t m_sent;
-
-  /**
-   * \brief Size of the packet.
-   */
-  uint32_t m_size;
-
-  /**
-   * \brief Intervall between packets sent.
-   */
-  Time m_interval;
-
-  /**
-   * \brief Local address.
-   */
-  Ipv6Address m_localAddress;
-
-  /**
-   * \brief Peer address.
-   */
-  Ipv6Address m_peerAddress;
-
-  /**
-   * \brief Local socket.
-   */
-  Ptr<Socket> m_socket;
-
-  /**
-   * \brief Sequence number.
-   */
-  uint16_t m_seq;
-
-  /**
-   * \brief Event ID.
-   */
-  EventId m_sendEvent;
-
-  /**
-   * \brief Out interface (i.e. for link-local communication).
-   */
-  uint32_t m_ifIndex;
-
-  /**
-   * \brief Routers addresses for routing type 0.
-   */
-  std::vector<Ipv6Address> m_routers;
-};
-
-} /* namespace ns3 */
-
-#endif /* PING6_H */
-
diff -Naur ns-3.24.1/src/applications/model/radvd.cc ns-3.25/src/applications/model/radvd.cc
--- ns-3.24.1/src/applications/model/radvd.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,367 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 Telecom Bretagne
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
- */
-
-#include "ns3/log.h"
-#include "ns3/abort.h"
-#include "ns3/ipv6-address.h"
-#include "ns3/nstime.h"
-#include "ns3/simulator.h"
-#include "ns3/packet.h"
-#include "ns3/net-device.h"
-#include "ns3/uinteger.h"
-#include "ns3/inet6-socket-address.h"
-#include "ns3/ipv6.h"
-#include "ns3/ipv6-l3-protocol.h"
-#include "ns3/ipv6-interface.h"
-#include "ns3/ipv6-raw-socket-factory.h"
-#include "ns3/ipv6-packet-info-tag.h"
-#include "ns3/ipv6-header.h"
-#include "ns3/icmpv6-header.h"
-#include "ns3/string.h"
-#include "ns3/pointer.h"
-
-#include "radvd.h"
-
-namespace ns3
-{
-
-NS_LOG_COMPONENT_DEFINE ("RadvdApplication");
-
-NS_OBJECT_ENSURE_REGISTERED (Radvd);
-
-TypeId Radvd::GetTypeId ()
-{
-  static TypeId tid = TypeId ("ns3::Radvd")
-    .SetParent<Application> ()
-    .SetGroupName("Applications")
-    .AddConstructor<Radvd> ()
-    .AddAttribute ("AdvertisementJitter",
-                   "Uniform variable to provide jitter between min and max values of AdvInterval",
-                   StringValue("ns3::UniformRandomVariable"),
-                   MakePointerAccessor (&Radvd::m_jitter),
-                   MakePointerChecker<UniformRandomVariable> ());
-  ;
-  return tid;
-}
-
-Radvd::Radvd ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-Radvd::~Radvd ()
-{
-  NS_LOG_FUNCTION (this);
-  for (RadvdInterfaceListI it = m_configurations.begin (); it != m_configurations.end (); ++it)
-    {
-      *it = 0;
-    }
-  m_configurations.clear ();
-  m_recvSocket = 0;
-}
-
-void Radvd::DoDispose ()
-{
-  NS_LOG_FUNCTION (this);
-
-  m_recvSocket->Close ();
-  m_recvSocket = 0;
-
-  for (SocketMapI it = m_sendSockets.begin (); it != m_sendSockets.end (); ++it)
-    {
-      it->second->Close ();
-      it->second = 0;
-    }
-
-  Application::DoDispose ();
-}
-
-void Radvd::StartApplication ()
-{
-  NS_LOG_FUNCTION (this);
-
-  TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
-
-  if (!m_recvSocket)
-    {
-      m_recvSocket = Socket::CreateSocket (GetNode (), tid);
-
-      NS_ASSERT (m_recvSocket);
-
-      m_recvSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAllRoutersMulticast (), 0));
-      m_recvSocket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
-      m_recvSocket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
-      m_recvSocket->ShutdownSend ();
-      m_recvSocket->SetRecvPktInfo (true);
-    }
-
-  for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
-    {
-      if ((*it)->IsSendAdvert ())
-        {
-          m_unsolicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (Seconds (0.), &Radvd::Send,
-                                                                               this, (*it), Ipv6Address::GetAllNodesMulticast (), true);
-        }
-
-      if (m_sendSockets.find ((*it)->GetInterface ()) == m_sendSockets.end ())
-        {
-          Ptr<Ipv6L3Protocol> ipv6 = GetNode ()->GetObject<Ipv6L3Protocol> ();
-          Ptr<Ipv6Interface> iFace = ipv6->GetInterface ((*it)->GetInterface ());
-
-          m_sendSockets[(*it)->GetInterface ()] = Socket::CreateSocket (GetNode (), tid);
-          m_sendSockets[(*it)->GetInterface ()]->Bind (Inet6SocketAddress (iFace->GetLinkLocalAddress ().GetAddress (), 0));
-          m_sendSockets[(*it)->GetInterface ()]->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
-          m_sendSockets[(*it)->GetInterface ()]->ShutdownRecv ();
-        }
-    }
-}
-
-void Radvd::StopApplication ()
-{
-  NS_LOG_FUNCTION (this);
-
-  if (m_recvSocket)
-    {
-      m_recvSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
-    }
-
-  for (EventIdMapI it = m_unsolicitedEventIds.begin (); it != m_unsolicitedEventIds.end (); ++it)
-    {
-      Simulator::Cancel ((*it).second);
-    }
-  m_unsolicitedEventIds.clear ();
-
-  for (EventIdMapI it = m_solicitedEventIds.begin (); it != m_solicitedEventIds.end (); ++it)
-    {
-      Simulator::Cancel ((*it).second);
-    }
-  m_solicitedEventIds.clear ();
-}
-
-void Radvd::AddConfiguration (Ptr<RadvdInterface> routerInterface)
-{
-  NS_LOG_FUNCTION (this << routerInterface);
-  m_configurations.push_back (routerInterface);
-}
-
-int64_t 
-Radvd:: AssignStreams (int64_t stream)
-{
-  NS_LOG_FUNCTION (this << stream);
-  m_jitter->SetStream (stream);
-  return 1;
-}
-
-void Radvd::Send (Ptr<RadvdInterface> config, Ipv6Address dst, bool reschedule)
-{
-  NS_LOG_FUNCTION (this << dst << reschedule);
-
-  if (reschedule == true)
-    {
-      config->SetLastRaTxTime (Simulator::Now ());
-    }
-
-  Icmpv6RA raHdr;
-  Icmpv6OptionLinkLayerAddress llaHdr;
-  Icmpv6OptionMtu mtuHdr;
-  Icmpv6OptionPrefixInformation prefixHdr;
-
-  std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
-  Ptr<Packet> p = Create<Packet> ();
-  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
-
-  /* set RA header information */
-  raHdr.SetFlagM (config->IsManagedFlag ());
-  raHdr.SetFlagO (config->IsOtherConfigFlag ());
-  raHdr.SetFlagH (config->IsHomeAgentFlag ());
-  raHdr.SetCurHopLimit (config->GetCurHopLimit ());
-  raHdr.SetLifeTime (config->GetDefaultLifeTime ());
-  raHdr.SetReachableTime (config->GetReachableTime ());
-  raHdr.SetRetransmissionTime (config->GetRetransTimer ());
-
-  if (config->IsSourceLLAddress ())
-    {
-      /* Get L2 address from NetDevice */
-      Address addr = ipv6->GetNetDevice (config->GetInterface ())->GetAddress ();
-      llaHdr = Icmpv6OptionLinkLayerAddress (true, addr);
-      p->AddHeader (llaHdr);
-    }
-
-  if (config->GetLinkMtu ())
-    {
-      NS_ASSERT (config->GetLinkMtu () >= 1280);
-      mtuHdr = Icmpv6OptionMtu (config->GetLinkMtu ());
-      p->AddHeader (mtuHdr);
-    }
-
-  /* add list of prefixes */
-  for (std::list<Ptr<RadvdPrefix> >::const_iterator jt = prefixes.begin (); jt != prefixes.end (); jt++)
-    {
-      uint8_t flags = 0;
-      prefixHdr = Icmpv6OptionPrefixInformation ();
-      prefixHdr.SetPrefix ((*jt)->GetNetwork ());
-      prefixHdr.SetPrefixLength ((*jt)->GetPrefixLength ());
-      prefixHdr.SetValidTime ((*jt)->GetValidLifeTime ());
-      prefixHdr.SetPreferredTime ((*jt)->GetPreferredLifeTime ());
-
-      if ((*jt)->IsOnLinkFlag ())
-        {
-          flags += 1 << 7;
-        }
-
-      if ((*jt)->IsAutonomousFlag ())
-        {
-          flags += 1 << 6;
-        }
-
-      if ((*jt)->IsRouterAddrFlag ())
-        {
-          flags += 1 << 5;
-        }
-
-      prefixHdr.SetFlags (flags);
-
-      p->AddHeader (prefixHdr);
-    }
-
-  Address sockAddr;
-  m_sendSockets[config->GetInterface ()]->GetSockName (sockAddr);
-  Ipv6Address src = Inet6SocketAddress::ConvertFrom (sockAddr).GetIpv6 ();
-
-  /* as we know interface index that will be used to send RA and 
-   * we always send RA with router's link-local address, we can 
-   * calculate checksum here.
-   */
-  raHdr.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + raHdr.GetSerializedSize (), 58 /* ICMPv6 */);
-  p->AddHeader (raHdr);
-
-  /* Router advertisements MUST always have a ttl of 255
-   * The ttl value should be set as a socket option, but this is not yet implemented
-   */
-  SocketIpTtlTag ttl;
-  ttl.SetTtl (255);
-  p->AddPacketTag (ttl);
-
-  /* send RA */
-  NS_LOG_LOGIC ("Send RA to " << dst);
-  m_sendSockets[config->GetInterface ()]->SendTo (p, 0, Inet6SocketAddress (dst, 0));
-
-  if (reschedule)
-    {
-      uint64_t delay = static_cast<uint64_t> (m_jitter->GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
-      if (config->IsInitialRtrAdv ())
-        {
-          if (delay > MAX_INITIAL_RTR_ADVERT_INTERVAL)
-            delay = MAX_INITIAL_RTR_ADVERT_INTERVAL;
-        }
-
-      NS_LOG_INFO ("Reschedule in " << delay << " milliseconds");
-      Time t = MilliSeconds (delay);
-      m_unsolicitedEventIds[config->GetInterface ()] = Simulator::Schedule (t, &Radvd::Send, this, config, Ipv6Address::GetAllNodesMulticast (), true);
-    }
-}
-
-void Radvd::HandleRead (Ptr<Socket> socket)
-{
-  NS_LOG_FUNCTION (this << socket);
-  Ptr<Packet> packet = 0;
-  Address from;
-
-  while ((packet = socket->RecvFrom (from)))
-    {
-      if (Inet6SocketAddress::IsMatchingType (from))
-        {
-          Ipv6PacketInfoTag interfaceInfo;
-          if (!packet->RemovePacketTag (interfaceInfo))
-            {
-              NS_ABORT_MSG ("No incoming interface on RADVD message, aborting.");
-            }
-          uint32_t incomingIf = interfaceInfo.GetRecvIf ();
-          Ptr<NetDevice> dev = GetNode ()->GetDevice (incomingIf);
-          Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
-          uint32_t ipInterfaceIndex = ipv6->GetInterfaceForDevice (dev);
-
-          Ipv6Header hdr;
-          Icmpv6RS rsHdr;
-          uint64_t delay = 0;
-          Time t;
-
-          packet->RemoveHeader (hdr);
-          uint8_t type;
-          packet->CopyData (&type, sizeof(type));
-
-          switch (type)
-            {
-            case Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION:
-              packet->RemoveHeader (rsHdr);
-              NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
-
-              for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
-                {
-                  if (ipInterfaceIndex == (*it)->GetInterface ())
-                    {
-                      /* calculate minimum delay between RA */
-                      delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
-                      t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
-
-                      if (Simulator::Now () < (*it)->GetLastRaTxTime () + MilliSeconds (MIN_DELAY_BETWEEN_RAS) )
-                        {
-                          t += MilliSeconds (MIN_DELAY_BETWEEN_RAS);
-                        }
-
-                      /* if our solicited RA is before the next periodic RA, we schedule it */
-                      bool scheduleSingle = true;
-
-                      if (m_solicitedEventIds.find ((*it)->GetInterface ()) != m_solicitedEventIds.end ())
-                        {
-                          if (m_solicitedEventIds[(*it)->GetInterface ()].IsRunning ())
-                            {
-                              scheduleSingle = false;
-                            }
-                        }
-
-                      if (m_unsolicitedEventIds.find ((*it)->GetInterface ()) != m_unsolicitedEventIds.end ())
-                        {
-                          if (t.GetTimeStep () > static_cast<int64_t> (m_unsolicitedEventIds[(*it)->GetInterface ()].GetTs ()))
-                            {
-                              scheduleSingle = false;
-                            }
-                        }
-
-                      if (scheduleSingle)
-                        {
-                          NS_LOG_INFO ("schedule new RA");
-                          m_solicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (MilliSeconds (delay), &Radvd::Send,
-                                                                                             this, (*it), Ipv6Address::GetAllNodesMulticast (), false);
-                        }
-                    }
-                }
-              break;
-            default:
-              break;
-            }
-        }
-    }
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/model/radvd.h ns-3.25/src/applications/model/radvd.h
--- ns-3.24.1/src/applications/model/radvd.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,185 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2008 Telecom Bretagne
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
- */
-
-#ifndef RADVD_H
-#define RADVD_H
-
-#include <map>
-
-#include "ns3/application.h"
-#include "ns3/socket.h"
-#include "ns3/random-variable-stream.h"
-
-#include "radvd-interface.h"
-
-namespace ns3
-{
-
-/**
- * \ingroup applications 
- * \defgroup radvd Radvd
- */
-
-/**
- * \ingroup radvd
- * \class Radvd
- * \brief Router advertisement daemon.
- */
-class Radvd : public Application
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return type ID
-   */
-  static TypeId GetTypeId (void);
-
-  /**
-   * \brief Constructor.
-   */
-  Radvd ();
-
-  /**
-   * \brief Destructor.
-   */
-  virtual ~Radvd ();
-
-  /**
-   * \brief Default value for maximum delay of RA (ms)
-   */
-  static const uint32_t MAX_RA_DELAY_TIME = 500;
-  /**
-   * \brief Default value for maximum initial RA advertisements
-   */
-  static const uint32_t MAX_INITIAL_RTR_ADVERTISEMENTS = 3;
-  /**
-   * \brief Default value for maximum initial RA advertisements interval (ms)
-   */
-  static const uint32_t MAX_INITIAL_RTR_ADVERT_INTERVAL = 16000;
-  /**
-   * \brief Default value for minimum delay between RA advertisements (ms)
-   */
-  static const uint32_t MIN_DELAY_BETWEEN_RAS = 3000;
-
-  /**
-   * \brief Add configuration for an interface;
-   * \param routerInterface configuration
-   */
-  void AddConfiguration (Ptr<RadvdInterface> routerInterface);
-
- /**
-  * 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);
-
-protected:
-  /**
-   * \brief Dispose the instance.
-   */
-  virtual void DoDispose ();
-
-private:
-  /// Container: Ptr to RadvdInterface
-  typedef std::list<Ptr<RadvdInterface> > RadvdInterfaceList;
-  /// Container Iterator: Ptr to RadvdInterface
-  typedef std::list<Ptr<RadvdInterface> >::iterator RadvdInterfaceListI;
-  /// Container Const Iterator: Ptr to RadvdInterface
-  typedef std::list<Ptr<RadvdInterface> >::const_iterator RadvdInterfaceListCI;
-
-  /// Container: interface number, EventId
-  typedef std::map<uint32_t, EventId> EventIdMap;
-  /// Container Iterator: interface number, EventId
-  typedef std::map<uint32_t, EventId>::iterator EventIdMapI;
-  /// Container Const Iterator: interface number, EventId
-  typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
-
-  /// Container: interface number, Socket
-  typedef std::map<uint32_t, Ptr<Socket> > SocketMap;
-  /// Container Iterator: interface number, Socket
-  typedef std::map<uint32_t, Ptr<Socket> >::iterator SocketMapI;
-  /// Container Const Iterator: interface number, Socket
-  typedef std::map<uint32_t, Ptr<Socket> >::const_iterator SocketMapCI;
-
-  /**
-   * \brief Start the application.
-   */
-  virtual void StartApplication ();
-
-  /**
-   * \brief Stop the application.
-   */
-  virtual void StopApplication ();
-
-  /**
-   * \brief Send a packet.
-   * \param config interface configuration
-   * \param dst destination address (default ff02::1)
-   * \param reschedule if true another send will be reschedule (periodic)
-   */
-  void Send (Ptr<RadvdInterface> config, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
-
-  /**
-   * \brief Handle received packet, especially router solicitation
-   * \param socket socket to read data from
-   */
-  void HandleRead (Ptr<Socket> socket);
-
-  /**
-   * \brief Raw socket to receive RS.
-   */
-  Ptr<Socket> m_recvSocket;
-
-  /**
-   * \brief Raw socket to send RA.
-   */
-  SocketMap m_sendSockets;
-
-  /**
-   * \brief List of configuration for interface.
-   */
-  RadvdInterfaceList m_configurations;
-
-  /**
-   * \brief Event ID map for unsolicited RAs.
-   */
-  EventIdMap m_unsolicitedEventIds;
-
-  /**
-   * \brief Event ID map for solicited RAs.
-   */
-  EventIdMap m_solicitedEventIds;
-
-  /**
-   * \brief Variable to provide jitter in advertisement interval
-   */
-  Ptr<UniformRandomVariable> m_jitter;
-};
-
-} /* namespace ns3 */
-
-#endif /* RADVD_H */
-
diff -Naur ns-3.24.1/src/applications/model/radvd-interface.cc ns-3.25/src/applications/model/radvd-interface.cc
--- ns-3.24.1/src/applications/model/radvd-interface.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd-interface.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,361 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#include "radvd-interface.h"
-#include <ns3/log.h>
-
-namespace ns3 
-{
-
-NS_LOG_COMPONENT_DEFINE ("RadvdInterface");
-
-RadvdInterface::RadvdInterface (uint32_t interface)
-  : m_interface (interface)
-{
-  NS_LOG_FUNCTION (this << interface);
-  /* initialize default value as specified in radvd.conf manpage */
-  m_sendAdvert = true;
-  m_maxRtrAdvInterval = 600000;
-  m_minRtrAdvInterval = (uint32_t)(double) (0.33 * m_maxRtrAdvInterval);
-  m_minDelayBetweenRAs = 3000;
-  m_managedFlag = false;
-  m_otherConfigFlag = false;
-  m_linkMtu = 0; /* 0 means not sending MTU option in RA */
-  m_reachableTime = 0; /* means unspecified for the router */
-  m_retransTimer = 0; /* means unspecified for the router */
-  m_curHopLimit = 64;
-  m_defaultLifeTime = (3 * m_maxRtrAdvInterval) / 1000;
-  m_defaultPreference = 1;
-  m_sourceLLAddress = true;
-  m_homeAgentFlag = false;
-  m_homeAgentInfo = false;
-  m_homeAgentLifeTime = 0;
-  m_homeAgentPreference = 0;
-  m_mobRtrSupportFlag = false;
-  m_intervalOpt = false;
-  m_initialRtrAdvertisementsLeft = 3;
-}
-
-RadvdInterface::RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval)
-  : m_interface (interface)
-{
-  NS_LOG_FUNCTION (this << interface << maxRtrAdvInterval << minRtrAdvInterval);
-  NS_ASSERT (maxRtrAdvInterval > minRtrAdvInterval);
-  m_sendAdvert = true;
-  m_maxRtrAdvInterval = maxRtrAdvInterval;
-  m_minRtrAdvInterval = minRtrAdvInterval;
-  m_minDelayBetweenRAs = 3000;
-  m_managedFlag = false;
-  m_otherConfigFlag = false;
-  m_linkMtu = 0; /* 0 means not sending MTU option in RA */
-  m_reachableTime = 0; /* means unspecified for the router */
-  m_retransTimer = 0; /* means unspecified for the router */
-  m_curHopLimit = 64;
-  m_defaultLifeTime = 3 * m_maxRtrAdvInterval;
-  m_defaultPreference = 1;
-  m_sourceLLAddress = true;
-  m_homeAgentFlag = false;
-  m_homeAgentInfo = false;
-  m_homeAgentLifeTime = 0;
-  m_homeAgentPreference = 0;
-  m_mobRtrSupportFlag = false;
-  m_intervalOpt = false;
-  m_initialRtrAdvertisementsLeft = 3;
-}
-
-RadvdInterface::~RadvdInterface ()
-{
-  NS_LOG_FUNCTION (this);
-  /* clear prefixes */
-  for (RadvdPrefixListI it = m_prefixes.begin (); it != m_prefixes.end (); ++it)
-    {
-      (*it) = 0;
-    }
-  m_prefixes.clear ();
-}
-
-void RadvdInterface::AddPrefix (Ptr<RadvdPrefix> routerPrefix)
-{
-  NS_LOG_FUNCTION (this << routerPrefix);
-  m_prefixes.push_back (routerPrefix);
-}
-
-
-uint32_t RadvdInterface::GetInterface () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_interface;
-}
-
-std::list<Ptr<RadvdPrefix> > RadvdInterface::GetPrefixes () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_prefixes;
-}
-
-bool RadvdInterface::IsSendAdvert () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_sendAdvert;
-}
-
-void RadvdInterface::SetSendAdvert (bool sendAdvert)
-{
-  NS_LOG_FUNCTION (this << sendAdvert);
-  m_sendAdvert = sendAdvert;
-}
-
-uint32_t RadvdInterface::GetMaxRtrAdvInterval () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_maxRtrAdvInterval;
-}
-
-void RadvdInterface::SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval)
-{
-  NS_LOG_FUNCTION (this << maxRtrAdvInterval);
-  m_maxRtrAdvInterval = maxRtrAdvInterval;
-}
-
-uint32_t RadvdInterface::GetMinRtrAdvInterval () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_minRtrAdvInterval;
-}
-
-void RadvdInterface::SetMinRtrAdvInterval (uint32_t minRtrAdvInterval)
-{
-  NS_LOG_FUNCTION (this << minRtrAdvInterval);
-  m_minRtrAdvInterval = minRtrAdvInterval;
-}
-
-uint32_t RadvdInterface::GetMinDelayBetweenRAs () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_minDelayBetweenRAs;
-}
-
-void RadvdInterface::SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs)
-{
-  NS_LOG_FUNCTION (this << minDelayBetweenRAs);
-  m_minDelayBetweenRAs = minDelayBetweenRAs;
-}
-
-bool RadvdInterface::IsManagedFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_managedFlag;
-}
-
-void RadvdInterface::SetManagedFlag (bool managedFlag)
-{
-  NS_LOG_FUNCTION (this << managedFlag);
-  m_managedFlag = managedFlag;
-}
-
-bool RadvdInterface::IsOtherConfigFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_otherConfigFlag;
-}
-
-void RadvdInterface::SetOtherConfigFlag (bool otherConfigFlag)
-{
-  NS_LOG_FUNCTION (this << otherConfigFlag);
-  m_otherConfigFlag = otherConfigFlag;
-}
-
-uint32_t RadvdInterface::GetLinkMtu () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_linkMtu;
-}
-
-void RadvdInterface::SetLinkMtu (uint32_t linkMtu)
-{
-  NS_LOG_FUNCTION (this << linkMtu);
-  m_linkMtu = linkMtu;
-}
-
-uint32_t RadvdInterface::GetReachableTime () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_reachableTime;
-}
-
-void RadvdInterface::SetReachableTime (uint32_t reachableTime)
-{
-  NS_LOG_FUNCTION (this << reachableTime);
-  m_reachableTime = reachableTime;
-}
-
-uint32_t RadvdInterface::GetDefaultLifeTime () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_defaultLifeTime;
-}
-
-void RadvdInterface::SetDefaultLifeTime (uint32_t defaultLifeTime)
-{
-  NS_LOG_FUNCTION (this << defaultLifeTime);
-  m_defaultLifeTime = defaultLifeTime;
-}
-
-uint32_t RadvdInterface::GetRetransTimer () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_retransTimer;
-}
-
-void RadvdInterface::SetRetransTimer (uint32_t retransTimer)
-{
-  NS_LOG_FUNCTION (this << retransTimer);
-  m_retransTimer = retransTimer;
-}
-
-uint8_t RadvdInterface::GetCurHopLimit () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_curHopLimit;
-}
-
-void RadvdInterface::SetCurHopLimit (uint8_t curHopLimit)
-{
-  NS_LOG_FUNCTION (this << curHopLimit);
-  m_curHopLimit = curHopLimit;
-}
-
-uint8_t RadvdInterface::GetDefaultPreference () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_defaultPreference;
-}
-
-void RadvdInterface::SetDefaultPreference (uint8_t defaultPreference)
-{
-  NS_LOG_FUNCTION (this << defaultPreference);
-  m_defaultPreference = defaultPreference;
-}
-
-bool RadvdInterface::IsSourceLLAddress () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_sourceLLAddress;
-}
-
-void RadvdInterface::SetSourceLLAddress (bool sourceLLAddress)
-{
-  NS_LOG_FUNCTION (this << sourceLLAddress);
-  m_sourceLLAddress = sourceLLAddress;
-}
-
-bool RadvdInterface::IsHomeAgentFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_homeAgentFlag;
-}
-
-void RadvdInterface::SetHomeAgentFlag (bool homeAgentFlag)
-{
-  NS_LOG_FUNCTION (this << homeAgentFlag);
-  m_homeAgentFlag = homeAgentFlag;
-}
-
-bool RadvdInterface::IsHomeAgentInfo () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_homeAgentInfo;
-}
-
-void RadvdInterface::SetHomeAgentInfo (bool homeAgentInfo)
-{
-  NS_LOG_FUNCTION (this << homeAgentInfo);
-  m_homeAgentInfo = homeAgentInfo;
-}
-
-uint32_t RadvdInterface::GetHomeAgentLifeTime () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_homeAgentLifeTime;
-}
-
-void RadvdInterface::SetHomeAgentLifeTime (uint32_t homeAgentLifeTime)
-{
-  NS_LOG_FUNCTION (this << homeAgentLifeTime);
-  m_homeAgentLifeTime = homeAgentLifeTime;
-}
-
-uint32_t RadvdInterface::GetHomeAgentPreference () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_homeAgentPreference;
-}
-
-void RadvdInterface::SetHomeAgentPreference (uint32_t homeAgentPreference)
-{
-  NS_LOG_FUNCTION (this << homeAgentPreference);
-  m_homeAgentPreference = homeAgentPreference;
-}
-
-bool RadvdInterface::IsMobRtrSupportFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_mobRtrSupportFlag;
-}
-
-void RadvdInterface::SetMobRtrSupportFlag (bool mobRtrSupportFlag)
-{
-  NS_LOG_FUNCTION (this << mobRtrSupportFlag);
-  m_mobRtrSupportFlag = mobRtrSupportFlag;
-}
-
-bool RadvdInterface::IsIntervalOpt () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_intervalOpt;
-}
-
-void RadvdInterface::SetIntervalOpt (bool intervalOpt)
-{
-  NS_LOG_FUNCTION (this << intervalOpt);
-  m_intervalOpt = intervalOpt;
-}
-
-Time RadvdInterface::GetLastRaTxTime ()
-{
-  return m_lastSendTime;
-}
-
-void RadvdInterface::SetLastRaTxTime (Time now)
-{
-  m_lastSendTime = now;
-  if (m_initialRtrAdvertisementsLeft)
-    {
-      m_initialRtrAdvertisementsLeft --;
-    }
-}
-
-bool RadvdInterface::IsInitialRtrAdv ()
-{
-  return m_initialRtrAdvertisementsLeft;
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/model/radvd-interface.h ns-3.25/src/applications/model/radvd-interface.h
--- ns-3.24.1/src/applications/model/radvd-interface.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd-interface.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,456 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#ifndef RADVD_INTERFACE_H
-#define RADVD_INTERFACE_H
-
-#include <list>
-#include "ns3/simple-ref-count.h"
-#include "ns3/nstime.h"
-#include "radvd-prefix.h"
-
-namespace ns3
-{
-
-/**
- * \ingroup radvd
- * \class RadvdInterface
- * \brief Radvd interface configuration.
- */
-class RadvdInterface : public SimpleRefCount<RadvdInterface>
-{
-public:
-  /// Container: Ptr to RadvdPrefix
-  typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
-  /// Container Iterator: Ptr to RadvdPrefix
-  typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
-  /// Container Const Iterator: Ptr to RadvdPrefix
-  typedef std::list<Ptr<RadvdPrefix> >::const_iterator RadvdPrefixListCI;
-
-  /**
-   * \brief Constructor.
-   * \param interface interface index
-   */
-  RadvdInterface (uint32_t interface);
-
-  /**
-   * \brief Constructor.
-   * \param interface interface index
-   * \param maxRtrAdvInterval maximum RA interval (ms)
-   * \param minRtrAdvInterval minimum RA interval (ms)
-   */
-  RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval);
-
-  /**
-   * \brief Destructor.
-   */
-  ~RadvdInterface ();
-
-  /**
-   * \brief Get interface index for this configuration.
-   * \return interface index
-   */
-  uint32_t GetInterface () const;
-
-  /**
-   * \brief Get list of prefixes advertised for this interface.
-   * \return list of IPv6 prefixes
-   */
-  RadvdPrefixList GetPrefixes () const;
-
-  /**
-   * \brief Add a prefix to advertise on interface.
-   * \param routerPrefix prefix to advertise
-   */
-  void AddPrefix (Ptr<RadvdPrefix> routerPrefix);
-
-  /**
-   * \brief Is send advert enabled (periodic RA and reply to RS) ?
-   * \return send advert flag
-   */
-  bool IsSendAdvert () const;
-
-  /**
-   * \brief Set send advert flag.
-   * \param sendAdvert value
-   */
-  void SetSendAdvert (bool sendAdvert);
-
-  /**
-   * \brief Get maximum RA interval.
-   * \return RA interval (ms)
-   */
-  uint32_t GetMaxRtrAdvInterval () const;
-
-  /**
-   * \brief Get maximum RA interval.
-   * \param maxRtrAdvInterval RA interval (ms)
-   */
-  void SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval);
-
-  /**
-   * \brief Get minimum RA interval 
-   * \return RA interval (ms)
-   */
-  uint32_t GetMinRtrAdvInterval () const;
-
-  /**
-   * \brief Get minimum RA interval 
-   * \param minRtrAdvInterval RA interval (ms).
-   */
-  void SetMinRtrAdvInterval (uint32_t minRtrAdvInterval);
-
-  /**
-   * \brief Get minimum delay between RAs.
-   * \return minimum delay (ms)
-   */
-  uint32_t GetMinDelayBetweenRAs () const;
-
-  /**
-   * \brief Set minimum delay between RAs.
-   * \param minDelayBetweenRAs minimum delay (ms)
-   */
-  void SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs);
-
-  /**
-   * \brief Is managed flag enabled ?
-   * \return managed flag
-   */
-  bool IsManagedFlag () const;
-
-  /**
-   * \brief Set managed flag
-   * \param managedFlag value
-   */
-  void SetManagedFlag (bool managedFlag);
-
-  /**
-   * \brief Is "other config" flag enabled ?
-   * \return other config flag
-   */
-  bool IsOtherConfigFlag () const;
-
-  /**
-   * \brief Set "other config" flag
-   * \param otherConfigFlag value
-   */
-  void SetOtherConfigFlag (bool otherConfigFlag);
-
-  /**
-   * \brief Get link MTU.
-   * \return link MTU
-   */
-  uint32_t GetLinkMtu () const;
-
-  /**
-   * \brief Set link MTU.
-   * \param linkMtu link MTU
-   */
-  void SetLinkMtu (uint32_t linkMtu); 
-
-  /**
-   * \brief Get reachable time.
-   * \return reachable time
-   */
-  uint32_t GetReachableTime () const;
-
-  /**
-   * \brief Set reachable time.
-   * \param reachableTime reachable time
-   */
-  void SetReachableTime (uint32_t reachableTime);
-
-  /**
-   * \brief Get default lifetime.
-   * \return default lifetime
-   */
-  uint32_t GetDefaultLifeTime () const;
-
-  /**
-   * \brief Set default lifetime.
-   * \param defaultLifeTime default lifetime
-   */
-  void SetDefaultLifeTime (uint32_t defaultLifeTime);
-
-  /**
-   * \brief Get retransmission timer.
-   * \return retransmission timer
-   */
-  uint32_t GetRetransTimer () const;
-
-  /**
-   * \brief Set retransmission timer.
-   * \param retransTimer retransmission timer
-   */
-  void SetRetransTimer (uint32_t retransTimer);
-
-  /**
-   * \brief Get current hop limit.
-   * \return current hop limit for the link
-   */
-  uint8_t GetCurHopLimit () const;
-
-  /**
-   * \brief Set current hop limit.
-   * \param curHopLimit current hop limit for the link
-   */
-  void SetCurHopLimit (uint8_t curHopLimit); 
-
-  /**
-   * \brief Get default preference.
-   * \return default preference
-   */
-  uint8_t GetDefaultPreference () const;
-
-  /**
-   * \brief Set default preference.
-   * \param defaultPreference default preference
-   */
-  void SetDefaultPreference (uint8_t defaultPreference);
-
-  /**
-   * \brief Is source LLA option should be included in RA ?
-   * \return true if source address is added in RA, false otherwise
-   */
-  bool IsSourceLLAddress () const;
-
-  /**
-   * \brief Set flag to add or not LLA to RA.
-   * \param sourceLLAddress value
-   */
-  void SetSourceLLAddress (bool sourceLLAddress);
-
-  /**
-   * \brief Is "home agent" flag enabled ?
-   * \return "home agent" flag
-   */
-  bool IsHomeAgentFlag () const;
-
-  /**
-   * \brief Set "home agent" flag.
-   * \param homeAgentFlag value
-   */
-  void SetHomeAgentFlag (bool homeAgentFlag);
-
-  /**
-   * \brief Is Home Agent Information option should be included in RA ?
-   * \return true if HA information option is added in RA, false otherwise
-   */
-  bool IsHomeAgentInfo () const;
-
-  /**
-   * \brief Set flag to add or not HA information option to RA.
-   * \param homeAgentFlag value
-   */
-  void SetHomeAgentInfo (bool homeAgentFlag);
-
-  /**
-   * \brief Get home agent lifetime.
-   * \return home agent lifetime
-   */
-  uint32_t GetHomeAgentLifeTime () const;
-
-  /**
-   * \brief Set home agent lifetime.
-   * \param homeAgentLifeTime home agent lifetime
-   */
-  void SetHomeAgentLifeTime (uint32_t homeAgentLifeTime);
-
-  /**
-   * \brief Get home agent preference.
-   * \return home agent preference
-   */
-  uint32_t GetHomeAgentPreference () const;
-
-  /**
-   * \brief Set home agent preference.
-   * \param homeAgentPreference home agent preference
-   */
-  void SetHomeAgentPreference (uint32_t homeAgentPreference);
-
-  /**
-   * \brief Is "mobile router support" flag enabled ?
-   * \return "mobile router support" flag
-   */
-  bool IsMobRtrSupportFlag () const;
-
-  /**
-   * \brief Set "mobile router support" flag.
-   * \param mobRtrSupportFlag value
-   */
-  void SetMobRtrSupportFlag (bool mobRtrSupportFlag);
-
-  /**
-   * \brief Is advertisement interval option should be included in RA ?
-   * \return true if advertisement interval option is added in RA, false otherwise
-   */
-  bool IsIntervalOpt () const;
-
-  /**
-   * \brief Set flag to add or not advertisement interval to RA.
-   * \param intervalOpt value
-   */
-  void SetIntervalOpt (bool intervalOpt);
-
-  /**
-   * \brief Get the last time a RA has been sent.
-   * \returns the last RA send time
-   */
-  Time GetLastRaTxTime ();
-
-  /**
-   * \brief Set the last RA send time. It also decrements the initial Rtr Advertisements counter.
-   * \param now the last RA send time
-   */
-  void SetLastRaTxTime (Time now);
-
-  /**
-   * \brief Checks if the interface is subject to the initial Rtr Advertisements rule.
-   * \returns true if the initial Rtr Advertisements counter is greater than zero.
-   */
-  bool IsInitialRtrAdv ();
-
-private:
-
-  /**
-   * \brief Interface to advertise RA.
-   */
-  uint32_t m_interface;
-
-  /**
-   * \brief List of prefixes to advertise.
-   */
-  RadvdPrefixList m_prefixes;
-
-  /**
-   * \brief Flag whether or not router sends periodic RA and respond to RS.
-   */
-  bool m_sendAdvert;
-
-  /**
-   * \brief Maximum RA interval in milliseconds.
-   */
-  uint32_t m_maxRtrAdvInterval;
-
-  /**
-   * \brief Minimum RA interval in milliseconds.
-   */
-  uint32_t m_minRtrAdvInterval;
-
-  /**
-   * \brief Minimum delay between RA in milliseconds.
-   */
-  uint32_t m_minDelayBetweenRAs;
-
-  /**
-   * \brief Managed flag. If true host use the stateful protocol for address autoconfiguration.
-   */
-  bool m_managedFlag;
-
-  /**
-   * \brief Other configuration flag. If true host use stateful protocol for other (non-address) information.
-   */
-  bool m_otherConfigFlag;
-
-  /**
-   * \brief Link MTU to use.
-   */
-  uint32_t m_linkMtu;
-
-  /**
-   * \brief Reachable time in milliseconds.
-   */
-  uint32_t m_reachableTime;
-
-  /**
-   * \brief Retransmission timer in milliseconds.
-   */
-  uint32_t m_retransTimer;
-
-  /**
-   * \brief Current hop limit (TTL).
-   */
-  uint32_t m_curHopLimit;
-
-  /**
-   * \brief Default life time in seconds.
-   */
-  uint32_t m_defaultLifeTime;
-
-  /**
-   * \brief Preference associated with default router.
-   * 0 = low
-   * 1 = medium
-   * 2 = high
-   */
-  uint8_t m_defaultPreference;
-
-  /**
-   * \brief Flag to add link-layer address in RA.
-   */
-  bool m_sourceLLAddress;
-
-  /**
-   * \brief Flag to add HA (home agent) flag in RA.
-   */
-  bool m_homeAgentFlag;
-
-  /**
-   * \brief Flag to add Home Agent Information option (Mobile IPv6).
-   * Currently not implemented.
-   */
-  bool m_homeAgentInfo;
-
-  /**
-   * \brief Home agent lifetime in seconds. Ignored if home agent info is not set.
-   */
-  uint32_t m_homeAgentLifeTime;
-
-  /**
-   * \brief Home agent preference. Ignored if home agent info is not set.
-   */
-  uint32_t m_homeAgentPreference;
-
-  /**
-   * \brief Flag for HA to signals it supports Mobile Router registrations (NEMO Basic).
-   */
-  bool m_mobRtrSupportFlag;
-
-  /**
-   * \brief Flag to add Advertisement Interval option in RA.
-   */
-  bool m_intervalOpt;
-
-  /**
-   * \brief Last RA send time.
-   */
-  Time m_lastSendTime;
-
-  /**
-   * \brief Number of fast announcement to do
-   */
-  uint8_t m_initialRtrAdvertisementsLeft;
-
-};
-
-} /* namespace ns3 */
-
-#endif /* RADVD_INTERFACE_H */
-
diff -Naur ns-3.24.1/src/applications/model/radvd-prefix.cc ns-3.25/src/applications/model/radvd-prefix.cc
--- ns-3.24.1/src/applications/model/radvd-prefix.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd-prefix.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,131 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#include "radvd-prefix.h"
-#include <ns3/log.h>
-
-namespace ns3
-{
-
-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),
-    m_prefixLength (prefixLength),
-    m_preferredLifeTime (preferredLifeTime),
-    m_validLifeTime (validLifeTime),
-    m_onLinkFlag (onLinkFlag),
-    m_autonomousFlag (autonomousFlag),
-    m_routerAddrFlag (routerAddrFlag)
-{
-  NS_LOG_FUNCTION (this << network << prefixLength << preferredLifeTime << validLifeTime << onLinkFlag << autonomousFlag << routerAddrFlag);
-}
-
-RadvdPrefix::~RadvdPrefix ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-Ipv6Address RadvdPrefix::GetNetwork () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_network;
-}
-
-void RadvdPrefix::SetNetwork (Ipv6Address network)
-{
-  NS_LOG_FUNCTION (this << network);
-  m_network = network;
-}
-
-uint8_t RadvdPrefix::GetPrefixLength () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_prefixLength;
-}
-
-void RadvdPrefix::SetPrefixLength (uint8_t prefixLength)
-{
-  NS_LOG_FUNCTION (this << prefixLength);
-  m_prefixLength = prefixLength;
-}
-
-uint32_t RadvdPrefix::GetValidLifeTime () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_validLifeTime;
-}
-
-void RadvdPrefix::SetValidLifeTime (uint32_t validLifeTime)
-{
-  NS_LOG_FUNCTION (this << validLifeTime);
-  m_validLifeTime = validLifeTime;
-}
-
-uint32_t RadvdPrefix::GetPreferredLifeTime () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_preferredLifeTime;
-}
-
-void RadvdPrefix::SetPreferredLifeTime (uint32_t preferredLifeTime)
-{
-  NS_LOG_FUNCTION (this << preferredLifeTime);
-  m_preferredLifeTime = preferredLifeTime;
-}
-
-bool RadvdPrefix::IsOnLinkFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_onLinkFlag;
-}
-
-void RadvdPrefix::SetOnLinkFlag (bool onLinkFlag)
-{
-  NS_LOG_FUNCTION (this << onLinkFlag);
-  m_onLinkFlag = onLinkFlag;
-}
-
-bool RadvdPrefix::IsAutonomousFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_autonomousFlag; 
-}
-
-void RadvdPrefix::SetAutonomousFlag (bool autonomousFlag)
-{
-  NS_LOG_FUNCTION (this << autonomousFlag);
-  m_autonomousFlag = autonomousFlag;
-}
-
-bool RadvdPrefix::IsRouterAddrFlag () const
-{
-  NS_LOG_FUNCTION (this);
-  return m_routerAddrFlag;
-}
-
-void RadvdPrefix::SetRouterAddrFlag (bool routerAddrFlag)
-{
-  NS_LOG_FUNCTION (this << routerAddrFlag);
-  m_routerAddrFlag = routerAddrFlag;
-}
-
-} /* namespace ns3 */
-
diff -Naur ns-3.24.1/src/applications/model/radvd-prefix.h ns-3.25/src/applications/model/radvd-prefix.h
--- ns-3.24.1/src/applications/model/radvd-prefix.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/radvd-prefix.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,182 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2009 Strasbourg University
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
- */
-
-#ifndef RADVD_PREFIX_H
-#define RADVD_PREFIX_H 
-
-#include <stdint.h>
-
-#include "ns3/ipv6-address.h"
-#include "ns3/simple-ref-count.h"
-
-namespace ns3
-{
-
-/**
- * \ingroup radvd
- * \class RadvdPrefix
- * \brief Router prefix for radvd application.
- */
-class RadvdPrefix : public SimpleRefCount<RadvdPrefix>
-{
-public:
-  /**
-   * \brief Constructor.
-   * \param network network prefix advertised
-   * \param prefixLength prefix length ( 0 < x <= 128)
-   * \param preferredLifeTime preferred life time in seconds (default 7 days)
-   * \param validLifeTime valid life time in seconds (default 30 days)
-   * \param onLinkFlag on link flag
-   * \param autonomousFlag autonomous link flag
-   * \param routerAddrFlag router address flag (for Mobile IPv6)
-   */
-  RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime = 604800, uint32_t validLifeTime = 2592000, bool onLinkFlag = true, bool autonomousFlag = true, bool routerAddrFlag = false);
-
-  /**
-   * \brief Destructor.
-   */
-  ~RadvdPrefix ();
-
-  /**
-   * \brief Get network prefix.
-   * \return network prefix
-   */
-  Ipv6Address GetNetwork () const;
-
-  /**
-   * \brief Set network prefix.
-   * \param network network prefix
-   */
-  void SetNetwork (Ipv6Address network);
-
-  /**
-   * \brief Get prefix length.
-   * \return prefix length
-   */
-  uint8_t GetPrefixLength () const;
-
-  /**
-   * \brief Set prefix length.
-   * \param prefixLength prefix length
-   */
-  void SetPrefixLength (uint8_t prefixLength);
-
-  /**
-   * \brief Get preferred lifetime.
-   * \return lifetime
-   */
-  uint32_t GetPreferredLifeTime () const;
-
-  /**
-   * \brief Set preferred lifetime.
-   * \param preferredLifeTime lifetime
-   */
-  void SetPreferredLifeTime (uint32_t preferredLifeTime);
-
-  /**
-   * \brief Get valid lifetime.
-   * \return lifetime
-   */
-  uint32_t GetValidLifeTime () const;
-
-  /**
-   * \brief Set valid lifetime.
-   * \param validLifeTime lifetime
-   */
-  void SetValidLifeTime (uint32_t validLifeTime);
-
-  /**
-   * \brief Is on-link flag ?
-   * \return true if on-link is activated, false otherwise
-   */
-  bool IsOnLinkFlag () const;
-
-  /**
-   * \brief Set on-link flag.
-   * \param onLinkFlag value
-   */
-  void SetOnLinkFlag (bool onLinkFlag);
-
-  /**
-   * \brief Is autonomous flag ?
-   * \return true if autonomous is activated, false otherwise
-   */
-  bool IsAutonomousFlag () const;
-
-  /**
-   * \brief Set autonomous flag.
-   * \param autonomousFlag value
-   */
-  void SetAutonomousFlag (bool autonomousFlag);
-
-  /**
-   * \brief Is router address flag ?
-   * \return true if router address is activated, false otherwise
-   */
-  bool IsRouterAddrFlag () const;
-
-  /**
-   * \brief Set router address flag.
-   * \param routerAddrFlag value
-   */
-  void SetRouterAddrFlag (bool routerAddrFlag);
-
-private:
-  /**
-   * \brief Network prefix.
-   */
-  Ipv6Address m_network;
-
-  /**
-   * \brief Prefix length.
-   */
-  uint8_t m_prefixLength;
-
-  /**
-   * \brief Preferred time.
-   */
-  uint32_t m_preferredLifeTime;
-
-  /**
-   * \brief Valid time.
-   */
-  uint32_t m_validLifeTime;
-
-  /**
-   * \brief On link flag, indicates that this prefix can be used for on-link determination.
-   */
-  bool m_onLinkFlag;
-
-  /**
-   * \brief Autonomous flag, it is used for autonomous address configuration (\RFC{2462}).
-   */
-  bool m_autonomousFlag;
-
-  /**
-   * \brief Router address flag, indicates that router address is sent instead 
-   * of network prefix as is required by Mobile IPv6.
-   */
-  bool m_routerAddrFlag;
-};
-
-} /* namespace ns3 */
-
-#endif /* RADVD_PREFIX_H */
-
diff -Naur ns-3.24.1/src/applications/model/udp-client.cc ns-3.25/src/applications/model/udp-client.cc
--- ns-3.24.1/src/applications/model/udp-client.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/udp-client.cc	2016-03-23 21:36:53.000000000 -0700
@@ -139,6 +139,7 @@
     }
 
   m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+  m_socket->SetAllowBroadcast (true);
   m_sendEvent = Simulator::Schedule (Seconds (0.0), &UdpClient::Send, this);
 }
 
diff -Naur ns-3.24.1/src/applications/model/udp-echo-client.cc ns-3.25/src/applications/model/udp-echo-client.cc
--- ns-3.24.1/src/applications/model/udp-echo-client.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/udp-echo-client.cc	2016-03-23 21:36:53.000000000 -0700
@@ -147,7 +147,7 @@
     }
 
   m_socket->SetRecvCallback (MakeCallback (&UdpEchoClient::HandleRead, this));
-
+  m_socket->SetAllowBroadcast (true);
   ScheduleTransmit (Seconds (0.));
 }
 
diff -Naur ns-3.24.1/src/applications/model/udp-trace-client.cc ns-3.25/src/applications/model/udp-trace-client.cc
--- ns-3.24.1/src/applications/model/udp-trace-client.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/udp-trace-client.cc	2016-03-23 21:36:53.000000000 -0700
@@ -262,6 +262,7 @@
         }
     }
   m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+  m_socket->SetAllowBroadcast (true);
   m_sendEvent = Simulator::Schedule (Seconds (0.0), &UdpTraceClient::Send, this);
 }
 
diff -Naur ns-3.24.1/src/applications/model/v4ping.cc ns-3.25/src/applications/model/v4ping.cc
--- ns-3.24.1/src/applications/model/v4ping.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/v4ping.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,285 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include "v4ping.h"
-#include "ns3/icmpv4.h"
-#include "ns3/assert.h"
-#include "ns3/log.h"
-#include "ns3/ipv4-address.h"
-#include "ns3/socket.h"
-#include "ns3/uinteger.h"
-#include "ns3/boolean.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/packet.h"
-#include "ns3/trace-source-accessor.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("V4Ping");
-
-NS_OBJECT_ENSURE_REGISTERED (V4Ping);
-
-TypeId 
-V4Ping::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::V4Ping")
-    .SetParent<Application> ()
-    .SetGroupName("Applications")
-    .AddConstructor<V4Ping> ()
-    .AddAttribute ("Remote", 
-                   "The address of the machine we want to ping.",
-                   Ipv4AddressValue (),
-                   MakeIpv4AddressAccessor (&V4Ping::m_remote),
-                   MakeIpv4AddressChecker ())
-    .AddAttribute ("Verbose",
-                   "Produce usual output.",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&V4Ping::m_verbose),
-                   MakeBooleanChecker ())
-    .AddAttribute ("Interval", "Wait  interval  seconds between sending each packet.",
-                   TimeValue (Seconds (1)),
-                   MakeTimeAccessor (&V4Ping::m_interval),
-                   MakeTimeChecker ())
-    .AddAttribute ("Size", "The number of data bytes to be sent, real packet will be 8 (ICMP) + 20 (IP) bytes longer.",
-                   UintegerValue (56),
-                   MakeUintegerAccessor (&V4Ping::m_size),
-                   MakeUintegerChecker<uint32_t> (16))
-    .AddTraceSource ("Rtt",
-                     "The rtt calculated by the ping.",
-                     MakeTraceSourceAccessor (&V4Ping::m_traceRtt),
-                     "ns3::Time::TracedCallback");
-  ;
-  return tid;
-}
-
-V4Ping::V4Ping ()
-  : m_interval (Seconds (1)),
-    m_size (56),
-    m_socket (0),
-    m_seq (0),
-    m_verbose (false),
-    m_recv (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-V4Ping::~V4Ping ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void
-V4Ping::DoDispose (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_socket = 0;
-  Application::DoDispose ();
-}
-
-uint32_t
-V4Ping::GetApplicationId (void) const
-{
-  NS_LOG_FUNCTION (this);
-  Ptr<Node> node = GetNode ();
-  for (uint32_t i = 0; i < node->GetNApplications (); ++i)
-    {
-      if (node->GetApplication (i) == this)
-        {
-          return i;
-        }
-    }
-  NS_ASSERT_MSG (false, "forgot to add application to node");
-  return 0; // quiet compiler
-}
-
-void
-V4Ping::Receive (Ptr<Socket> socket)
-{
-  NS_LOG_FUNCTION (this << socket);
-  while (m_socket->GetRxAvailable () > 0)
-    {
-      Address from;
-      Ptr<Packet> p = m_socket->RecvFrom (0xffffffff, 0, from);
-      NS_LOG_DEBUG ("recv " << p->GetSize () << " bytes");
-      NS_ASSERT (InetSocketAddress::IsMatchingType (from));
-      InetSocketAddress realFrom = InetSocketAddress::ConvertFrom (from);
-      NS_ASSERT (realFrom.GetPort () == 1); // protocol should be icmp.
-      Ipv4Header ipv4;
-      p->RemoveHeader (ipv4);
-      uint32_t recvSize = p->GetSize ();
-      NS_ASSERT (ipv4.GetProtocol () == 1); // protocol should be icmp.
-      Icmpv4Header icmp;
-      p->RemoveHeader (icmp);
-      if (icmp.GetType () == Icmpv4Header::ECHO_REPLY)
-        {
-          Icmpv4Echo echo;
-          p->RemoveHeader (echo);
-          std::map<uint16_t, Time>::iterator i = m_sent.find (echo.GetSequenceNumber ());
-
-          if (i != m_sent.end () && echo.GetIdentifier () == 0)
-            {
-              uint32_t * buf = new uint32_t [m_size];
-              uint32_t dataSize = echo.GetDataSize ();
-              uint32_t nodeId;
-              uint32_t appId;
-              if (dataSize == m_size)
-                {
-                  echo.GetData ((uint8_t *)buf);
-                  Read32 ((const uint8_t *) &buf[0], nodeId);
-                  Read32 ((const uint8_t *) &buf[1], appId);
-
-                  if (nodeId == GetNode ()->GetId () &&
-                      appId == GetApplicationId ())
-                    {
-                      Time sendTime = i->second;
-                      NS_ASSERT (Simulator::Now () >= sendTime);
-                      Time delta = Simulator::Now () - sendTime;
-
-                      m_sent.erase (i);
-                      m_avgRtt.Update (delta.GetMilliSeconds ());
-                      m_recv++;
-                      m_traceRtt (delta);
-
-                      if (m_verbose)
-                        {
-                          std::cout << recvSize << " bytes from " << realFrom.GetIpv4 () << ":"
-                                    << " icmp_seq=" << echo.GetSequenceNumber ()
-                                    << " ttl=" << (unsigned)ipv4.GetTtl ()
-                                    << " time=" << delta.GetMilliSeconds () << " ms\n";
-                        }
-                    }
-                }
-              delete[] buf;
-            }
-        }
-    }
-}
-
-// Writes data to buffer in little-endian format; least significant byte
-// of data is at lowest buffer address
-void
-V4Ping::Write32 (uint8_t *buffer, const uint32_t data)
-{
-  NS_LOG_FUNCTION (this << buffer << data);
-  buffer[0] = (data >> 0) & 0xff;
-  buffer[1] = (data >> 8) & 0xff;
-  buffer[2] = (data >> 16) & 0xff;
-  buffer[3] = (data >> 24) & 0xff;
-}
-
-// Writes data from a little-endian formatted buffer to data
-void
-V4Ping::Read32 (const uint8_t *buffer, uint32_t &data)
-{
-  NS_LOG_FUNCTION (this << buffer << data);
-  data = (buffer[3] << 24) + (buffer[2] << 16) + (buffer[1] << 8) + buffer[0];
-}
-
-void 
-V4Ping::Send ()
-{
-  NS_LOG_FUNCTION (this);
-
-  NS_LOG_INFO ("m_seq=" << m_seq);
-  Ptr<Packet> p = Create<Packet> ();
-  Icmpv4Echo echo;
-  echo.SetSequenceNumber (m_seq);
-  m_seq++;
-  echo.SetIdentifier (0);
-
-  //
-  // We must write quantities out in some form of network order.  Since there
-  // isn't an htonl to work with we just follow the convention in pcap traces
-  // (where any difference would show up anyway) and borrow that code.  Don't
-  // be too surprised when you see that this is a little endian convention.
-  //
-  uint8_t* data = new uint8_t[m_size];
-  for (uint32_t i = 0; i < m_size; ++i) data[i] = 0;
-  NS_ASSERT (m_size >= 16);
-
-  uint32_t tmp = GetNode ()->GetId ();
-  Write32 (&data[0 * sizeof(uint32_t)], tmp);
-
-  tmp = GetApplicationId ();
-  Write32 (&data[1 * sizeof(uint32_t)], tmp);
-
-  Ptr<Packet> dataPacket = Create<Packet> ((uint8_t *) data, m_size);
-  echo.SetData (dataPacket);
-  p->AddHeader (echo);
-  Icmpv4Header header;
-  header.SetType (Icmpv4Header::ECHO);
-  header.SetCode (0);
-  if (Node::ChecksumEnabled ())
-    {
-      header.EnableChecksum ();
-    }
-  p->AddHeader (header);
-  m_sent.insert (std::make_pair (m_seq - 1, Simulator::Now ()));
-  m_socket->Send (p, 0);
-  m_next = Simulator::Schedule (m_interval, &V4Ping::Send, this);
-  delete[] data;
-}
-
-void 
-V4Ping::StartApplication (void)
-{
-  NS_LOG_FUNCTION (this);
-
-  m_started = Simulator::Now ();
-  if (m_verbose)
-    {
-      std::cout << "PING  " << m_remote << " 56(84) bytes of data.\n";
-    }
-
-  m_socket = Socket::CreateSocket (GetNode (), TypeId::LookupByName ("ns3::Ipv4RawSocketFactory"));
-  NS_ASSERT (m_socket != 0);
-  m_socket->SetAttribute ("Protocol", UintegerValue (1)); // icmp
-  m_socket->SetRecvCallback (MakeCallback (&V4Ping::Receive, this));
-  InetSocketAddress src = InetSocketAddress (Ipv4Address::GetAny (), 0);
-  int status;
-  status = m_socket->Bind (src);
-  NS_ASSERT (status != -1);
-  InetSocketAddress dst = InetSocketAddress (m_remote, 0);
-  status = m_socket->Connect (dst);
-  NS_ASSERT (status != -1);
-
-  Send ();
-}
-void 
-V4Ping::StopApplication (void)
-{
-  NS_LOG_FUNCTION (this);
-  m_next.Cancel ();
-  m_socket->Close ();
-
-  if (m_verbose)
-    {
-      std::ostringstream os;
-      os.precision (4);
-      os << "--- " << m_remote << " ping statistics ---\n" 
-         << m_seq << " packets transmitted, " << m_recv << " received, "
-         << ((m_seq - m_recv) * 100 / m_seq) << "% packet loss, "
-         << "time " << (Simulator::Now () - m_started).GetMilliSeconds () << "ms\n";
-
-      if (m_avgRtt.Count () > 0)
-        os << "rtt min/avg/max/mdev = " << m_avgRtt.Min () << "/" << m_avgRtt.Avg () << "/"
-           << m_avgRtt.Max () << "/" << m_avgRtt.Stddev ()
-           << " ms\n";
-      std::cout << os.str ();
-    }
-}
-
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/applications/model/v4ping.h ns-3.25/src/applications/model/v4ping.h
--- ns-3.24.1/src/applications/model/v4ping.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/model/v4ping.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,128 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef V4PING_H
-#define V4PING_H
-
-#include "ns3/application.h"
-#include "ns3/traced-callback.h"
-#include "ns3/nstime.h"
-#include "ns3/average.h"
-#include "ns3/simulator.h"
-#include <map>
-
-namespace ns3 {
-
-class Socket;
-
-/**
- * \ingroup applications
- * \defgroup v4ping V4Ping
- */
-
-/**
- * \ingroup v4ping
- * \brief an application which sends one ICMP ECHO request, waits for a REPLYs
- *        and reports the calculated RTT.
- *
- * Note: The RTT calculated is reported through a trace source.
- */
-class V4Ping : public Application
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-
-  /**
-   * create a pinger applications
-   */
-  V4Ping ();
-  virtual ~V4Ping ();
-
-private:
-  /**
-   * \brief Writes data to buffer in little-endian format.
-   *
-   * Least significant byte of data is at lowest buffer address
-   *
-   * \param buffer the buffer to write to
-   * \param data the data to write
-   */
-  void Write32 (uint8_t *buffer, const uint32_t data);
-  /**
-   * \brief Writes data from a little-endian formatted buffer to data.
-   *
-   * \param buffer the buffer to read from
-   * \param data the read data
-   */
-  void Read32 (const uint8_t *buffer, uint32_t &data);
-
-  // inherited from Application base class.
-  virtual void StartApplication (void);
-  virtual void StopApplication (void);
-  virtual void DoDispose (void);
-  /**
-   * \brief Return the application ID in the node.
-   * \returns the application id
-   */
-  uint32_t GetApplicationId (void) const;
-  /**
-   * \brief Receive an ICMP Echo
-   * \param socket the receiving socket
-   *
-   * This function is called by lower layers through a callback.
-   */
-  void Receive (Ptr<Socket> socket);
-  /**
-   * \brief Send one Ping (ICMP ECHO) to the destination
-   */
-  void Send ();
-
-  /// Remote address
-  Ipv4Address m_remote;
-  /// Wait  interval  seconds between sending each packet
-  Time m_interval;
-  /** 
-   * Specifies  the number of data bytes to be sent. 
-   * The default is 56, which translates into 64 ICMP data bytes when combined with the 8 bytes of ICMP header data.
-   */
-  uint32_t m_size;
-  /// The socket we send packets from
-  Ptr<Socket> m_socket;
-  /// ICMP ECHO sequence number
-  uint16_t m_seq;
-  /// TracedCallback for RTT measured by ICMP ECHOs
-  TracedCallback<Time> m_traceRtt;
-  /// produce ping-style output if true
-  bool m_verbose;
-  /// received packets counter
-  uint32_t m_recv;
-  /// Start time to report total ping time
-  Time m_started;
-  /// Average rtt is ms
-  Average<double> m_avgRtt;
-  /// Next packet will be sent
-  EventId m_next;
-  /// All sent but not answered packets. Map icmp seqno -> when sent
-  std::map<uint16_t, Time> m_sent;
-};
-
-} // namespace ns3
-
-#endif /* V4PING_H */
diff -Naur ns-3.24.1/src/applications/wscript ns-3.25/src/applications/wscript
--- ns-3.24.1/src/applications/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/applications/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -6,10 +6,6 @@
         'model/bulk-send-application.cc',
         'model/onoff-application.cc',
         'model/packet-sink.cc',
-        'model/ping6.cc',
-        'model/radvd.cc',
-        'model/radvd-interface.cc',
-        'model/radvd-prefix.cc',
         'model/udp-client.cc',
         'model/udp-server.cc',
         'model/seq-ts-header.cc',
@@ -17,16 +13,12 @@
         'model/packet-loss-counter.cc',
         'model/udp-echo-client.cc',
         'model/udp-echo-server.cc',
-        'model/v4ping.cc',
         'model/application-packet-probe.cc',
         'helper/bulk-send-helper.cc',
         'helper/on-off-helper.cc',
         'helper/packet-sink-helper.cc',
-        'helper/ping6-helper.cc',
         'helper/udp-client-server-helper.cc',
         'helper/udp-echo-helper.cc',
-        'helper/v4ping-helper.cc',
-        'helper/radvd-helper.cc',
         ]
 
     applications_test = bld.create_ns3_module_test_library('applications')
@@ -40,10 +32,6 @@
         'model/bulk-send-application.h',
         'model/onoff-application.h',
         'model/packet-sink.h',
-        'model/ping6.h',
-        'model/radvd.h',
-        'model/radvd-interface.h',
-        'model/radvd-prefix.h',
         'model/udp-client.h',
         'model/udp-server.h',
         'model/seq-ts-header.h',
@@ -51,16 +39,12 @@
         'model/packet-loss-counter.h',
         'model/udp-echo-client.h',
         'model/udp-echo-server.h',
-        'model/v4ping.h',
         'model/application-packet-probe.h',
         'helper/bulk-send-helper.h',
         'helper/on-off-helper.h',
         'helper/packet-sink-helper.h',
-        'helper/ping6-helper.h',
         'helper/udp-client-server-helper.h',
         'helper/udp-echo-helper.h',
-        'helper/v4ping-helper.h',
-        'helper/radvd-helper.h',
         ]
 
     bld.ns3_python_bindings()
diff -Naur ns-3.24.1/src/bridge/bindings/callbacks_list.py ns-3.25/src/bridge/bindings/callbacks_list.py
--- ns-3.24.1/src/bridge/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/bridge/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,6 @@
 callback_classes = [
     ['bool', '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'],
     ['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::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/bridge/bindings/modulegen__gcc_ILP32.py ns-3.25/src/bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/bridge/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/bridge/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -92,6 +92,10 @@
     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::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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -142,10 +146,16 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', 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'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -251,6 +261,8 @@
     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__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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -273,8 +285,11 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -519,6 +534,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -534,6 +554,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -710,7 +735,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1603,6 +1628,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -2242,7 +2291,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -2369,6 +2418,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   '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([])
@@ -2409,6 +2544,27 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2553,7 +2709,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
diff -Naur ns-3.24.1/src/bridge/bindings/modulegen__gcc_LP64.py ns-3.25/src/bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/bridge/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/bridge/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -92,6 +92,10 @@
     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::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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -142,10 +146,16 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', 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'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -251,6 +261,8 @@
     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__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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -273,8 +285,11 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -519,6 +534,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -534,6 +554,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -710,7 +735,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1603,6 +1628,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -2242,7 +2291,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -2369,6 +2418,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   '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([])
@@ -2409,6 +2544,27 @@
                    [param('ns3::ObjectFactory const &', 'value')])
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -2553,7 +2709,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
diff -Naur ns-3.24.1/src/brite/examples/brite-generic-example.cc ns-3.25/src/brite/examples/brite-generic-example.cc
--- ns-3.24.1/src/brite/examples/brite-generic-example.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/brite/examples/brite-generic-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -63,25 +63,14 @@
 
   PointToPointHelper p2p;
 
-  Ipv4StaticRoutingHelper staticRouting;
-  Ipv4GlobalRoutingHelper globalRouting;
-  Ipv4ListRoutingHelper listRouting;
-  Ipv4NixVectorHelper nixRouting;
 
   InternetStackHelper stack;
 
   if (nix)
     {
-      listRouting.Add (staticRouting, 0);
-      listRouting.Add (nixRouting, 10);
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting);
     }
-  else
-    {
-      listRouting.Add (staticRouting, 0);
-      listRouting.Add (globalRouting, 10);
-    }
-
-  stack.SetRoutingHelper (listRouting);
 
   Ipv4AddressHelper address;
   address.SetBase ("10.0.0.0", "255.255.255.252");
diff -Naur ns-3.24.1/src/brite/examples/brite-MPI-example.cc ns-3.25/src/brite/examples/brite-MPI-example.cc
--- ns-3.24.1/src/brite/examples/brite-MPI-example.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/brite/examples/brite-MPI-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -79,25 +79,14 @@
 
   PointToPointHelper p2p;
 
-  Ipv4StaticRoutingHelper staticRouting;
-  Ipv4GlobalRoutingHelper globalRouting;
-  Ipv4ListRoutingHelper listRouting;
-  Ipv4NixVectorHelper nixRouting;
 
   InternetStackHelper stack;
 
   if (nix)
     {
-      listRouting.Add (staticRouting, 0);
-      listRouting.Add (nixRouting, 10);
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting);
     }
-  else
-    {
-      listRouting.Add (staticRouting, 0);
-      listRouting.Add (globalRouting, 10);
-    }
-
-  stack.SetRoutingHelper (listRouting);
 
   Ipv4AddressHelper address;
   address.SetBase ("10.0.0.0", "255.255.255.252");
diff -Naur ns-3.24.1/src/buildings/bindings/callbacks_list.py ns-3.25/src/buildings/bindings/callbacks_list.py
--- ns-3.24.1/src/buildings/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/buildings/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,3 +1,5 @@
 callback_classes = [
     ['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'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/buildings/bindings/modulegen__gcc_ILP32.py ns-3.25/src/buildings/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/buildings/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/buildings/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -130,6 +130,10 @@
     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::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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -242,6 +246,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -254,6 +262,8 @@
     module.add_class('OhBuildingsPropagationLossModel', parent=root_module['ns3::BuildingsPropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -392,6 +402,8 @@
     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__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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -442,12 +454,15 @@
     register_Ns3MobilityBuildingInfo_methods(root_module, root_module['ns3::MobilityBuildingInfo'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OhBuildingsPropagationLossModel_methods(root_module, root_module['ns3::OhBuildingsPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -875,6 +890,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -890,6 +910,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1066,7 +1091,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2288,6 +2313,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3994,7 +4043,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -4121,6 +4170,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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')])
@@ -4156,6 +4291,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4347,6 +4487,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/buildings/bindings/modulegen__gcc_LP64.py ns-3.25/src/buildings/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/buildings/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/buildings/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -130,6 +130,10 @@
     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::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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## propagation-loss-model.h (module 'propagation'): ns3::ThreeLogDistancePropagationLossModel [class]
@@ -242,6 +246,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -254,6 +262,8 @@
     module.add_class('OhBuildingsPropagationLossModel', parent=root_module['ns3::BuildingsPropagationLossModel'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -392,6 +402,8 @@
     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__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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
@@ -442,12 +454,15 @@
     register_Ns3MobilityBuildingInfo_methods(root_module, root_module['ns3::MobilityBuildingInfo'])
     register_Ns3NakagamiPropagationLossModel_methods(root_module, root_module['ns3::NakagamiPropagationLossModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OhBuildingsPropagationLossModel_methods(root_module, root_module['ns3::OhBuildingsPropagationLossModel'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -875,6 +890,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -890,6 +910,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1066,7 +1091,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2288,6 +2313,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3994,7 +4043,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -4121,6 +4170,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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')])
@@ -4156,6 +4291,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4347,6 +4487,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/click/bindings/modulegen__gcc_ILP32.py ns-3.25/src/click/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/click/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -74,6 +74,12 @@
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
     ## log.h (module 'core'): ns3::LogComponent [class]
     module.add_class('LogComponent', import_from_module='ns.core')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -96,6 +102,8 @@
     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')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger', import_from_module='ns.core')
     ## 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'))
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -156,6 +164,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -214,6 +224,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -234,13 +248,15 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-click-routing.h (module 'click'): ns3::Ipv4ClickRouting [class]
     module.add_class('Ipv4ClickRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    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&')
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -263,12 +279,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
     
@@ -309,6 +325,8 @@
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
@@ -318,6 +336,7 @@
     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_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
@@ -372,6 +391,8 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
@@ -506,17 +527,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -538,11 +559,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -552,16 +568,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -633,6 +639,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', 
@@ -645,6 +655,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', 
@@ -791,14 +805,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -859,11 +877,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1039,6 +1052,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1054,6 +1072,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1291,7 +1314,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1473,29 +1496,35 @@
 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, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), 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'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
+    ## 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', 
@@ -1507,6 +1536,88 @@
                    '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_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -1519,10 +1630,10 @@
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1766,13 +1877,20 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
     cls.add_instance_attribute('tid', 'ns3::TypeId', 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_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([])
@@ -1932,7 +2050,12 @@
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
     cls.add_method('AddTraceSource', 
                    'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1983,6 +2106,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
     cls.add_method('GetTraceSource', 
                    'ns3::TypeId::TraceSourceInformation', 
@@ -2059,6 +2187,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2093,6 +2225,8 @@
     cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
     cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
     cls.add_instance_attribute('help', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
@@ -2635,6 +2769,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -3305,11 +3454,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3437,6 +3596,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -3452,6 +3616,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -3467,6 +3636,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -3517,6 +3696,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -3744,11 +3928,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -3957,6 +4136,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -4254,11 +4473,6 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
     ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
     cls.add_method('PeekHeader', 
                    'uint32_t', 
@@ -4325,10 +4539,15 @@
                    'uint32_t', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
                    is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
     cls.add_method('SetNixVector', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TypeIdChecker_methods(root_module, cls):
diff -Naur ns-3.24.1/src/click/bindings/modulegen__gcc_LP64.py ns-3.25/src/click/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/click/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -74,6 +74,12 @@
     module.add_class('Ipv6Prefix', import_from_module='ns.network')
     ## log.h (module 'core'): ns3::LogComponent [class]
     module.add_class('LogComponent', import_from_module='ns.core')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## non-copyable.h (module 'core'): ns3::NonCopyable [class]
+    module.add_class('NonCopyable', destructor_visibility='protected', import_from_module='ns.core')
     ## object-base.h (module 'core'): ns3::ObjectBase [class]
     module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
     ## object.h (module 'core'): ns3::ObjectDeleter [struct]
@@ -96,6 +102,8 @@
     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')
+    ## log.h (module 'core'): ns3::ParameterLogger [class]
+    module.add_class('ParameterLogger', import_from_module='ns.core')
     ## 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'))
     ## system-wall-clock-ms.h (module 'core'): ns3::SystemWallClockMs [class]
@@ -156,6 +164,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -214,6 +224,10 @@
     module.add_class('Ipv6PrefixChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixValue [class]
     module.add_class('Ipv6PrefixValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker [class]
+    module.add_class('Mac48AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue [class]
+    module.add_class('Mac48AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## net-device.h (module 'network'): ns3::NetDevice [class]
     module.add_class('NetDevice', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## net-device.h (module 'network'): ns3::NetDevice::PacketType [enumeration]
@@ -234,13 +248,15 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-click-routing.h (module 'click'): ns3::Ipv4ClickRouting [class]
     module.add_class('Ipv4ClickRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
-    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type='map')
-    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&')
+    module.add_container('std::map< std::string, ns3::LogComponent * >', ('std::string', 'ns3::LogComponent *'), container_type=u'map')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::map< unsigned int, unsigned int >', ('unsigned int', 'unsigned int'), container_type=u'map')
+    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&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -263,12 +279,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
     
@@ -309,6 +325,8 @@
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
     register_Ns3LogComponent_methods(root_module, root_module['ns3::LogComponent'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3NonCopyable_methods(root_module, root_module['ns3::NonCopyable'])
     register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
     register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
     register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
@@ -318,6 +336,7 @@
     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_Ns3ParameterLogger_methods(root_module, root_module['ns3::ParameterLogger'])
     register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     register_Ns3SystemWallClockMs_methods(root_module, root_module['ns3::SystemWallClockMs'])
     register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
@@ -372,6 +391,8 @@
     register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
+    register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
+    register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
@@ -506,17 +527,17 @@
     cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
     ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
     cls.add_constructor([param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
     cls.add_method('AddAtEnd', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'end')])
     ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(ns3::Buffer const & o) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
                    [param('ns3::Buffer const &', 'o')])
-    ## buffer.h (module 'network'): bool ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
     cls.add_method('AddAtStart', 
-                   'bool', 
+                   'void', 
                    [param('uint32_t', 'start')])
     ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
     cls.add_method('Begin', 
@@ -538,11 +559,6 @@
                    'ns3::Buffer', 
                    [param('uint32_t', 'start'), param('uint32_t', 'length')], 
                    is_const=True)
-    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFullCopy() const [member function]
-    cls.add_method('CreateFullCopy', 
-                   'ns3::Buffer', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
     cls.add_method('Deserialize', 
                    'uint32_t', 
@@ -552,16 +568,6 @@
                    'ns3::Buffer::Iterator', 
                    [], 
                    is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentEndOffset() const [member function]
-    cls.add_method('GetCurrentEndOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
-    ## buffer.h (module 'network'): int32_t ns3::Buffer::GetCurrentStartOffset() const [member function]
-    cls.add_method('GetCurrentStartOffset', 
-                   'int32_t', 
-                   [], 
-                   is_const=True)
     ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
     cls.add_method('GetSerializedSize', 
                    'uint32_t', 
@@ -633,6 +639,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', 
@@ -645,6 +655,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', 
@@ -791,14 +805,18 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::ByteTagList const &', 'o')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t adjustment, int32_t appendOffset) [member function]
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
     cls.add_method('AddAtEnd', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'appendOffset')])
-    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t adjustment, int32_t prependOffset) [member function]
+                   [param('int32_t', 'appendOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtStart(int32_t prependOffset) [member function]
     cls.add_method('AddAtStart', 
                    'void', 
-                   [param('int32_t', 'adjustment'), param('int32_t', 'prependOffset')])
+                   [param('int32_t', 'prependOffset')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Adjust(int32_t adjustment) [member function]
+    cls.add_method('Adjust', 
+                   'void', 
+                   [param('int32_t', 'adjustment')])
     ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator ns3::ByteTagList::Begin(int32_t offsetStart, int32_t offsetEnd) const [member function]
     cls.add_method('Begin', 
                    'ns3::ByteTagList::Iterator', 
@@ -859,11 +877,6 @@
     ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
                         visibility='protected')
-    ## callback.h (module 'core'): static std::string ns3::CallbackBase::Demangle(std::string const & mangled) [member function]
-    cls.add_method('Demangle', 
-                   'std::string', 
-                   [param('std::string const &', 'mangled')], 
-                   is_static=True, visibility='protected')
     return
 
 def register_Ns3Hasher_methods(root_module, cls):
@@ -1039,6 +1052,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1054,6 +1072,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1291,7 +1314,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1473,29 +1496,35 @@
 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, std::string const & file, ns3::LogLevel const mask=::ns3::LOG_NONE) [constructor]
+    cls.add_constructor([param('std::string const &', 'name'), param('std::string const &', 'file'), 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'): std::string ns3::LogComponent::File() const [member function]
+    cls.add_method('File', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## log.h (module 'core'): static std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,ns3::LogComponent*,std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, ns3::LogComponent*> > > * ns3::LogComponent::GetComponentList() [member function]
+    cls.add_method('GetComponentList', 
+                   'std::map< std::string, ns3::LogComponent * > *', 
+                   [], 
+                   is_static=True)
+    ## 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', 
@@ -1507,6 +1536,88 @@
                    '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_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3NonCopyable_methods(root_module, cls):
+    ## non-copyable.h (module 'core'): ns3::NonCopyable::NonCopyable() [constructor]
+    cls.add_constructor([], 
+                        visibility='protected')
     return
 
 def register_Ns3ObjectBase_methods(root_module, cls):
@@ -1519,10 +1630,10 @@
                    'void', 
                    [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
-    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & attribute) const [member function]
+    ## object-base.h (module 'core'): bool ns3::ObjectBase::GetAttributeFailSafe(std::string name, ns3::AttributeValue & value) const [member function]
     cls.add_method('GetAttributeFailSafe', 
                    'bool', 
-                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'attribute')], 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
                    is_const=True)
     ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
@@ -1766,13 +1877,20 @@
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
     cls.add_instance_attribute('count', 'uint32_t', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
-    cls.add_instance_attribute('data', 'uint8_t [ 20 ]', is_const=False)
+    cls.add_instance_attribute('data', 'uint8_t [ 21 ]', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::next [variable]
     cls.add_instance_attribute('next', 'ns3::PacketTagList::TagData *', is_const=False)
     ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::tid [variable]
     cls.add_instance_attribute('tid', 'ns3::TypeId', 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_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([])
@@ -1932,7 +2050,12 @@
     ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor) [member function]
     cls.add_method('AddTraceSource', 
                    'ns3::TypeId', 
-                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')])
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
     ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
     cls.add_method('GetAttribute', 
                    'ns3::TypeId::AttributeInformation', 
@@ -1983,6 +2106,11 @@
                    'uint32_t', 
                    [], 
                    is_static=True)
+    ## type-id.h (module 'core'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
     cls.add_method('GetTraceSource', 
                    'ns3::TypeId::TraceSourceInformation', 
@@ -2059,6 +2187,10 @@
     cls.add_method('SetParent', 
                    'ns3::TypeId', 
                    [param('ns3::TypeId', 'tid')])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
     ## type-id.h (module 'core'): void ns3::TypeId::SetUid(uint16_t tid) [member function]
     cls.add_method('SetUid', 
                    'void', 
@@ -2093,6 +2225,8 @@
     cls.add_constructor([param('ns3::TypeId::TraceSourceInformation const &', 'arg0')])
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::accessor [variable]
     cls.add_instance_attribute('accessor', 'ns3::Ptr< ns3::TraceSourceAccessor const >', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
     cls.add_instance_attribute('help', 'std::string', is_const=False)
     ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
@@ -2635,6 +2769,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -3305,11 +3454,21 @@
     cls.add_constructor([])
     ## callback.h (module 'core'): ns3::CallbackImplBase::CallbackImplBase(ns3::CallbackImplBase const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::CallbackImplBase const &', 'arg0')])
+    ## callback.h (module 'core'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
     cls.add_method('IsEqual', 
                    'bool', 
                    [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
     return
 
 def register_Ns3CallbackValue_methods(root_module, cls):
@@ -3437,6 +3596,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -3452,6 +3616,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -3467,6 +3636,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -3517,6 +3696,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -3744,11 +3928,6 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## ipv4-route.h (module 'internet'): uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) [member function]
-    cls.add_method('GetOutputTtl', 
-                   'uint32_t', 
-                   [param('uint32_t', 'oif')], 
-                   deprecated=True)
     ## ipv4-route.h (module 'internet'): std::map<unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > ns3::Ipv4MulticastRoute::GetOutputTtlMap() const [member function]
     cls.add_method('GetOutputTtlMap', 
                    'std::map< unsigned int, unsigned int >', 
@@ -3957,6 +4136,46 @@
                    [param('ns3::Ipv6Prefix const &', 'value')])
     return
 
+def register_Ns3Mac48AddressChecker_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressChecker::Mac48AddressChecker(ns3::Mac48AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3Mac48AddressValue_methods(root_module, cls):
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48AddressValue const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48AddressValue::Mac48AddressValue(ns3::Mac48Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'value')])
+    ## mac48-address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::Mac48AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## mac48-address.h (module 'network'): ns3::Mac48Address ns3::Mac48AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): std::string ns3::Mac48AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48AddressValue::Set(ns3::Mac48Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Mac48Address const &', 'value')])
+    return
+
 def register_Ns3NetDevice_methods(root_module, cls):
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice() [constructor]
     cls.add_constructor([])
@@ -4254,11 +4473,6 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
-    ## packet.h (module 'network'): uint8_t const * ns3::Packet::PeekData() const [member function]
-    cls.add_method('PeekData', 
-                   'uint8_t const *', 
-                   [], 
-                   deprecated=True, is_const=True)
     ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
     cls.add_method('PeekHeader', 
                    'uint32_t', 
@@ -4325,10 +4539,15 @@
                    'uint32_t', 
                    [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
                    is_const=True)
-    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> arg0) [member function]
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
     cls.add_method('SetNixVector', 
                    'void', 
-                   [param('ns3::Ptr< ns3::NixVector >', 'arg0')])
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
     return
 
 def register_Ns3TypeIdChecker_methods(root_module, cls):
diff -Naur ns-3.24.1/src/click/examples/nsclick-defines.cc ns-3.25/src/click/examples/nsclick-defines.cc
--- ns-3.24.1/src/click/examples/nsclick-defines.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-defines.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,6 +30,11 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_CLICK
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
 
 //
 // Explicitly create the nodes required by the topology (shown above).
@@ -47,7 +52,7 @@
   defines["OUTPUT"] = "\"Hello World!\"";
   
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (n, "src/click/examples/nsclick-defines.click");
+  clickinternet.SetClickFile (n, clickConfigFolder + "/nsclick-defines.click");
   clickinternet.SetRoutingTableElement (n, "rt");
   clickinternet.SetDefines(n, defines);
   clickinternet.Install (n);
diff -Naur ns-3.24.1/src/click/examples/nsclick-raw-wlan.cc ns-3.25/src/click/examples/nsclick-raw-wlan.cc
--- ns-3.24.1/src/click/examples/nsclick-raw-wlan.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-raw-wlan.cc	2016-03-23 21:36:53.000000000 -0700
@@ -45,6 +45,11 @@
 {
 #ifdef NS3_CLICK
   double rss = -80;
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
 
   // Setup nodes
   NodeContainer wifiNodes;
@@ -79,8 +84,8 @@
   wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue (rss));
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add an upper mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
@@ -103,7 +108,7 @@
 
   // Install Click on node A
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (wifiNodes.Get (0), "src/click/examples/nsclick-wifi-single-interface.click");
+  clickinternet.SetClickFile (wifiNodes.Get (0), clickConfigFolder + "/nsclick-wifi-single-interface.click");
   clickinternet.SetRoutingTableElement (wifiNodes.Get (0), "rt");
   clickinternet.Install (wifiNodes.Get (0));
 
diff -Naur ns-3.24.1/src/click/examples/nsclick-routing.cc ns-3.25/src/click/examples/nsclick-routing.cc
--- ns-3.24.1/src/click/examples/nsclick-routing.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -47,6 +47,11 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_CLICK
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
 
 //
 // Explicitly create the nodes required by the topology (shown above).
@@ -59,9 +64,9 @@
 // Install Click on the nodes
 //
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (n.Get (0), "src/click/examples/nsclick-routing-node0.click");
-  clickinternet.SetClickFile (n.Get (1), "src/click/examples/nsclick-ip-router.click");
-  clickinternet.SetClickFile (n.Get (2), "src/click/examples/nsclick-routing-node2.click");
+  clickinternet.SetClickFile (n.Get (0), clickConfigFolder + "/nsclick-routing-node0.click");
+  clickinternet.SetClickFile (n.Get (1), clickConfigFolder + "/nsclick-ip-router.click");
+  clickinternet.SetClickFile (n.Get (2), clickConfigFolder + "/nsclick-routing-node2.click");
   clickinternet.SetRoutingTableElement (n.Get (0), "kernel/rt");
   clickinternet.SetRoutingTableElement (n.Get (1), "u/rt");
   clickinternet.SetRoutingTableElement (n.Get (2), "kernel/rt");
diff -Naur ns-3.24.1/src/click/examples/nsclick-simple-lan.cc ns-3.25/src/click/examples/nsclick-simple-lan.cc
--- ns-3.24.1/src/click/examples/nsclick-simple-lan.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-simple-lan.cc	2016-03-23 21:36:53.000000000 -0700
@@ -43,6 +43,12 @@
 int main (int argc, char *argv[])
 {
 #ifdef NS3_CLICK
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
+
   NodeContainer csmaNodes;
   csmaNodes.Create (2);
 
@@ -58,7 +64,7 @@
 
   // Install Click on node A
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (csmaNodes.Get (0), "src/click/examples/nsclick-lan-single-interface.click");
+  clickinternet.SetClickFile (csmaNodes.Get (0), clickConfigFolder + "/nsclick-lan-single-interface.click");
   clickinternet.SetRoutingTableElement (csmaNodes.Get (0), "rt");
   clickinternet.Install (csmaNodes.Get (0));
 
diff -Naur ns-3.24.1/src/click/examples/nsclick-udp-client-server-csma.cc ns-3.25/src/click/examples/nsclick-udp-client-server-csma.cc
--- ns-3.24.1/src/click/examples/nsclick-udp-client-server-csma.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-udp-client-server-csma.cc	2016-03-23 21:36:53.000000000 -0700
@@ -49,6 +49,12 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_CLICK
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
+
 //
 // Enable logging for UdpClient and
 //
@@ -75,7 +81,7 @@
 // Install Click on the nodes
 //
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (n, "src/click/examples/nsclick-lan-single-interface.click");
+  clickinternet.SetClickFile (n, clickConfigFolder + "/nsclick-lan-single-interface.click");
   clickinternet.SetRoutingTableElement (n, "rt");
   clickinternet.Install (n);
 
diff -Naur ns-3.24.1/src/click/examples/nsclick-udp-client-server-wifi.cc ns-3.25/src/click/examples/nsclick-udp-client-server-wifi.cc
--- ns-3.24.1/src/click/examples/nsclick-udp-client-server-wifi.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/examples/nsclick-udp-client-server-wifi.cc	2016-03-23 21:36:53.000000000 -0700
@@ -71,6 +71,11 @@
 main (int argc, char *argv[])
 {
 #ifdef NS3_CLICK
+  std::string clickConfigFolder = "src/click/examples";
+
+  CommandLine cmd;
+  cmd.AddValue ("clickConfigFolder", "Base folder for click configuration files", clickConfigFolder);
+  cmd.Parse (argc, argv);
 
   //
   // Enable logging
@@ -115,8 +120,8 @@
   wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue (-80));
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add an upper mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
@@ -138,14 +143,14 @@
   // Install Click on the nodes
   //
   ClickInternetStackHelper clickinternet;
-  clickinternet.SetClickFile (n.Get (0), "src/click/examples/nsclick-wifi-single-interface.click");
-  clickinternet.SetClickFile (n.Get (1), "src/click/examples/nsclick-wifi-single-interface.click");
-  clickinternet.SetClickFile (n.Get (2), "src/click/examples/nsclick-wifi-single-interface.click");
+  clickinternet.SetClickFile (n.Get (0), clickConfigFolder + "/nsclick-wifi-single-interface.click");
+  clickinternet.SetClickFile (n.Get (1), clickConfigFolder + "/nsclick-wifi-single-interface.click");
+  clickinternet.SetClickFile (n.Get (2), clickConfigFolder + "/nsclick-wifi-single-interface.click");
 
   // Node 4 is to run in promiscuous mode. This can be verified
   // from the pcap trace Node4_in_eth0.pcap generated after running
   // this script.
-  clickinternet.SetClickFile (n.Get (3), "src/click/examples/nsclick-wifi-single-interface-promisc.click");
+  clickinternet.SetClickFile (n.Get (3), clickConfigFolder + "/nsclick-wifi-single-interface-promisc.click");
   clickinternet.SetRoutingTableElement (n, "rt");
   clickinternet.Install (n);
   Ipv4AddressHelper ipv4;
diff -Naur ns-3.24.1/src/click/model/ipv4-click-routing.cc ns-3.25/src/click/model/ipv4-click-routing.cc
--- ns-3.24.1/src/click/model/ipv4-click-routing.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/model/ipv4-click-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -483,12 +483,26 @@
   header.GetDestination ().Print (addr);
   // Probe the Click Routing Table for the required IP
   // This returns a string of the form "InterfaceID GatewayAddr"
+  NS_LOG_DEBUG ("Probe click routing table for " << addr.str ());
   std::string s = ReadHandler (m_clickRoutingTableElement, addr.str ());
+  NS_LOG_DEBUG ("string from click routing table: " << s);
 
-  int pos = s.find (" ");
-
-  int interfaceId = atoi (s.substr (0, pos).c_str ());
-  Ipv4Address destination (s.substr (pos + 1).c_str ());
+  size_t pos = s.find (" ");
+  Ipv4Address destination;
+  int interfaceId;
+  if (pos == std::string::npos)
+    {
+      // Only an interface ID is found
+      destination = Ipv4Address ("0.0.0.0");
+      interfaceId = atoi (s.c_str ());
+      NS_LOG_DEBUG ("case 1:  destination " << destination << " interfaceId " << interfaceId);
+    }
+  else
+    {
+      interfaceId = atoi (s.substr (0, pos).c_str ());
+      Ipv4Address destination (s.substr (pos + 1).c_str ());
+      NS_LOG_DEBUG ("case 2:  destination " << destination << " interfaceId " << interfaceId);
+    }
 
   if (interfaceId != -1)
     {
diff -Naur ns-3.24.1/src/click/model/ipv4-l3-click-protocol.cc ns-3.25/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.24.1/src/click/model/ipv4-l3-click-protocol.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/model/ipv4-l3-click-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -80,7 +80,7 @@
   NS_LOG_FUNCTION (this);
   for (L4List_t::iterator i = m_protocols.begin (); i != m_protocols.end (); ++i)
     {
-      *i = 0;
+      i->second = 0;
     }
   m_protocols.clear ();
 
@@ -89,6 +89,8 @@
       *i = 0;
     }
   m_interfaces.clear ();
+  m_reverseInterfacesContainer.clear ();
+
   m_sockets.clear ();
   m_node = 0;
   m_routingProtocol = 0;
@@ -197,15 +199,10 @@
 {
   NS_LOG_FUNCTION (this << device->GetIfIndex ());
 
-  int32_t interface = 0;
-  for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin ();
-       i != m_interfaces.end ();
-       i++, interface++)
+  Ipv4InterfaceReverseContainer::const_iterator iter = m_reverseInterfacesContainer.find (device);
+  if (iter != m_reverseInterfacesContainer.end ())
     {
-      if ((*i)->GetDevice () == device)
-        {
-          return interface;
-        }
+      return (*iter).second;
     }
 
   return -1;
@@ -459,6 +456,33 @@
 }
 
 Ipv4Address
+Ipv4L3ClickProtocol::SourceAddressSelection (uint32_t interfaceIdx, Ipv4Address dest)
+{
+  NS_LOG_FUNCTION (this << interfaceIdx << " " << dest);
+  if (GetNAddresses (interfaceIdx) == 1)  // common case
+    {
+      return GetAddress (interfaceIdx, 0).GetLocal ();
+    }
+  // no way to determine the scope of the destination, so adopt the
+  // following rule:  pick the first available address (index 0) unless
+  // a subsequent address is on link (in which case, pick the primary
+  // address if there are multiple)
+  Ipv4Address candidate = GetAddress (interfaceIdx, 0).GetLocal ();
+  for (uint32_t i = 0; i < GetNAddresses (interfaceIdx); i++)
+    {
+      Ipv4InterfaceAddress test = GetAddress (interfaceIdx, i);
+      if (test.GetLocal ().CombineMask (test.GetMask ()) == dest.CombineMask (test.GetMask ()))
+        {
+          if (test.IsSecondary () == false)
+            {
+              return test.GetLocal ();
+            }
+        }
+    }
+  return candidate;
+}
+
+Ipv4Address
 Ipv4L3ClickProtocol::SelectSourceAddress (Ptr<const NetDevice> device,
                                           Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)
 {
@@ -630,6 +654,7 @@
   NS_LOG_FUNCTION (this << interface);
   uint32_t index = m_interfaces.size ();
   m_interfaces.push_back (interface);
+  m_reverseInterfacesContainer[interface->GetDevice ()] = index;
   return index;
 }
 
@@ -757,29 +782,20 @@
 {
   NS_LOG_FUNCTION (this << device << p << from << to);
 
+  NS_LOG_LOGIC ("Packet from " << from << " received on node " <<
+                m_node->GetId ());
+
   // Forward packet to raw sockets, if any
   if (protocol == Ipv4L3ClickProtocol::PROT_NUMBER && m_sockets.size () > 0)
     {
       Ptr<Packet> packetForRawSocket = p->Copy ();
-      uint32_t interface = 0;
-      Ptr<Ipv4Interface> ipv4Interface;
-      for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin ();
-           i != m_interfaces.end ();
-           i++, interface++)
+      int32_t interface = GetInterfaceForDevice(device);
+      NS_ASSERT_MSG (interface != -1, "Received a packet from an interface that is not known to IPv4");
+      Ptr<Ipv4Interface> ipv4Interface = m_interfaces[interface];
+      if (!ipv4Interface->IsUp ())
         {
-          ipv4Interface = *i;
-          if (ipv4Interface->GetDevice () == device)
-            {
-              if (ipv4Interface->IsUp ())
-                {
-                  break;
-                }
-              else
-                {
-                  NS_LOG_LOGIC ("Dropping received packet -- interface is down");
-                  return;
-                }
-            }
+          NS_LOG_LOGIC ("Dropping received packet -- interface is down");
+          return;
         }
 
       Ipv4Header ipHeader;
@@ -878,23 +894,98 @@
 void
 Ipv4L3ClickProtocol::Insert (Ptr<IpL4Protocol> protocol)
 {
-  m_protocols.push_back (protocol);
+  NS_LOG_FUNCTION (this << protocol);
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  m_protocols[key] = protocol;
+}
+
+void
+Ipv4L3ClickProtocol::Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  m_protocols[key] = protocol;
+}
+
+void
+Ipv4L3ClickProtocol::Remove (Ptr<IpL4Protocol> protocol)
+{
+  NS_LOG_FUNCTION (this << protocol);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
+}
+
+void
+Ipv4L3ClickProtocol::Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
 }
 
 Ptr<IpL4Protocol>
 Ipv4L3ClickProtocol::GetProtocol (int protocolNumber) const
 {
-  for (L4List_t::const_iterator i = m_protocols.begin (); i != m_protocols.end (); ++i)
+  NS_LOG_FUNCTION (this << protocolNumber);
+
+  return GetProtocol (protocolNumber, -1);
+}
+
+Ptr<IpL4Protocol>
+Ipv4L3ClickProtocol::GetProtocol (int protocolNumber, int32_t interfaceIndex) const
+{
+  NS_LOG_FUNCTION (this << protocolNumber << interfaceIndex);
+
+  L4ListKey_t key;
+  L4List_t::const_iterator i;
+  if (interfaceIndex >= 0)
     {
-      if ((*i)->GetProtocolNumber () == protocolNumber)
+      // try the interface-specific protocol.
+      key = std::make_pair (protocolNumber, interfaceIndex);
+      i = m_protocols.find (key);
+      if (i != m_protocols.end ())
         {
-          return *i;
+          return i->second;
         }
     }
+  // try the generic protocol.
+  key = std::make_pair (protocolNumber, -1);
+  i = m_protocols.find (key);
+  if (i != m_protocols.end ())
+    {
+      return i->second;
+    }
+
   return 0;
 }
 
-
 } // namespace ns3
 
 #endif // NS3_CLICK
diff -Naur ns-3.24.1/src/click/model/ipv4-l3-click-protocol.h ns-3.25/src/click/model/ipv4-l3-click-protocol.h
--- ns-3.24.1/src/click/model/ipv4-l3-click-protocol.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/model/ipv4-l3-click-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -72,27 +72,16 @@
   Ipv4L3ClickProtocol ();
   virtual ~Ipv4L3ClickProtocol ();
 
-  /**
-   * \param protocol a template for the protocol to add to this L4 Demux.
-   * \returns the L4Protocol effectively added.
-   *
-   * Invoke Copy on the input template to get a copy of the input
-   * protocol which can be used on the Node on which this L4 Demux
-   * is running. The new L4Protocol is registered internally as
-   * a working L4 Protocol and returned from this method.
-   * The caller does not get ownership of the returned pointer.
-   */
-  void Insert (Ptr<IpL4Protocol> protocol);
+  virtual void Insert (Ptr<IpL4Protocol> protocol);
+  virtual void Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
 
-  /**
-   * \param protocolNumber number of protocol to lookup
-   *        in this L4 Demux
-   * \returns a matching L4 Protocol
-   *
-   * 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 void Remove (Ptr<IpL4Protocol> protocol);
+  virtual void Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
+
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber, int32_t interfaceIndex) const;
+
+  virtual Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest);
 
   /**
    * \param ttl default ttl to use
@@ -251,14 +240,26 @@
   virtual bool GetWeakEsModel (void) const;
 
   typedef std::vector<Ptr<Ipv4Interface> > Ipv4InterfaceList;
+  /**
+   * \brief Container of NetDevices registered to IPv4 and their interface indexes.
+   */
+  typedef std::map<Ptr<const NetDevice>, uint32_t > Ipv4InterfaceReverseContainer;
   typedef std::list<Ptr<Ipv4RawSocketImpl> > SocketList;
-  typedef std::list<Ptr<IpL4Protocol> > L4List_t;
+  /**
+   * \brief Container of the IPv4 L4 keys: protocol number, interface index
+   */
+  typedef std::pair<int, int32_t> L4ListKey_t;
+  /**
+   * \brief Container of the IPv4 L4 instances.
+   */
+  typedef std::map<L4ListKey_t, Ptr<IpL4Protocol> > L4List_t;
 
   Ptr<Ipv4RoutingProtocol> m_routingProtocol;
   bool m_ipForward;
   bool m_weakEsModel;
   L4List_t m_protocols;
   Ipv4InterfaceList m_interfaces;
+  Ipv4InterfaceReverseContainer m_reverseInterfacesContainer; //!< Container of NetDevice / Interface index associations.
   uint8_t m_defaultTtl;
   uint16_t m_identification;
 
diff -Naur ns-3.24.1/src/click/test/examples-to-run.py ns-3.25/src/click/test/examples-to-run.py
--- ns-3.24.1/src/click/test/examples-to-run.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/click/test/examples-to-run.py	2016-03-23 21:36:53.000000000 -0700
@@ -8,7 +8,12 @@
 #
 # See test.py for more information.
 cpp_examples = [
-    ("nsclick-simple-lan", "ENABLE_CLICK == True", "False"),
+    ("nsclick-simple-lan --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
+    ("nsclick-raw-wlan --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
+    ("nsclick-udp-client-server-csma --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
+    ("nsclick-udp-client-server-wifi --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
+    ("nsclick-routing --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
+    ("nsclick-defines --clickConfigFolder=../../src/click/examples", "NSCLICK == True", "False"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.24.1/src/core/examples/hash-example.cc ns-3.25/src/core/examples/hash-example.cc
--- ns-3.24.1/src/core/examples/hash-example.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/core/examples/hash-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -331,16 +331,16 @@
    *  Expanding for large \f$ k \f$ we get
    *
    * \f{eqnarray*}{
-   *   E(c) &=& \frac{1}{k} {n \choose 2}
-   *            - \frac{1}{{{k^2}}} {n \choose 3}
-   *            + \frac{1}{{{k^3}}} {n \choose 4}
+   *   E(c) &=& \frac{1}{k} \binom{n}{2}
+   *            - \frac{1}{{{k^2}}} \binom{n}{3}
+   *            + \frac{1}{{{k^3}}} \binom{n}{4}
    *            -  \ldots \\
-   *        &=& \frac{1}{k} {n \choose 2}
+   *        &=& \frac{1}{k} \binom{n}{2}
    *            \left[ {1 - \frac{{n - 2}}{{3k}}
    *                      + \frac{{\left( {n - 2} \right)
    *                               \left( {n - 3} \right)}}{{12{k^2}}}
    *                      -  \ldots } \right] \\
-   *        &=& \frac{1}{k} {n \choose 2}
+   *        &=& \frac{1}{k} \binom{n}{2}
    *            \left\{ {1 - \frac{{n - 2}}{{3k}}
    *                         \left[ {1 + \frac{{n - 3}}{{4k}}
    *                                   -  \ldots }
diff -Naur ns-3.24.1/src/core/model/log.cc ns-3.25/src/core/model/log.cc
--- ns-3.24.1/src/core/model/log.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/core/model/log.cc	2016-03-23 21:36:53.000000000 -0700
@@ -484,7 +484,7 @@
 }
 
 /**
- * \ingroup
+ * \ingroup logging
  * Check if a log component exists.
  * This is private to the logging implementation.
  *
@@ -511,6 +511,7 @@
 }
 
 /**
+ * \ingroup logging
  * Parse the \c NS_LOG environment variable.
  * This is private to the logging implementation.
  */
diff -Naur ns-3.24.1/src/core/model/wall-clock-synchronizer.h ns-3.25/src/core/model/wall-clock-synchronizer.h
--- ns-3.24.1/src/core/model/wall-clock-synchronizer.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/core/model/wall-clock-synchronizer.h	2016-03-23 21:36:53.000000000 -0700
@@ -35,10 +35,13 @@
  * @brief Class used for synchronizing the simulation events to a real-time
  * "wall clock" using Posix clock functions.
  *
- * Enable this synchronizer using:
+ * This synchronizer is used as part of the RealtimeSimulatorImpl.  It is
+ * typically not explicitly enabled by users but instead is implicitly 
+ * enabled when the simulator implementation type is set to real-time; e.g.:
  *
  * @code
- *   DefaultValue::Bind ("Synchronizer", "WallClockSynchronizer");
+ *   GlobalValue::Bind ("SimulatorImplementationType",
+ *                      StringValue ("ns3::RealtimeSimulatorImpl"));
  * @endcode
  *
  * before calling any simulator functions.
diff -Naur ns-3.24.1/src/create-module.py ns-3.25/src/create-module.py
--- ns-3.24.1/src/create-module.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/create-module.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,5 @@
 #! /usr/bin/env python
+from __future__ import print_function
 import sys
 from optparse import OptionParser
 import os
@@ -322,21 +323,21 @@
 
     modname = args[0].lower()
     if False in [word.isalnum() for word in modname.split("-")]:
-        print >> sys.stderr, "Module name should only contain alphanumeric characters and dashes"
+        print("Module name should only contain alphanumeric characters and dashes", file=sys.stderr)
         return 2
     assert os.path.sep not in modname
 
     moduledir = os.path.join(os.path.dirname(__file__), modname)
 
     if os.path.exists(moduledir):
-        print >> sys.stderr, "Module %r already exists" % (modname,)
+        print("Module %r already exists" % (modname,), file=sys.stderr)
         return 2
 
     print("Creating module %r, "
           "run './waf configure' to include it in the build" % (modname,))
 
     os.mkdir(moduledir)
-    wscript = file(os.path.join(moduledir, "wscript"), "wt")
+    wscript = open(os.path.join(moduledir, "wscript"), "wt")
     wscript.write(WSCRIPT_TEMPLATE % dict(MODULE=modname))
     wscript.close()
 
@@ -347,11 +348,11 @@
     modeldir = os.path.join(moduledir, "model")
     os.mkdir(modeldir)
 
-    model_cc = file(os.path.join(moduledir, "model", "%s.cc" % modname), "wt")
+    model_cc = open(os.path.join(moduledir, "model", "%s.cc" % modname), "wt")
     model_cc.write(MODEL_CC_TEMPLATE % dict(MODULE=modname))
     model_cc.close()
 
-    model_h = file(os.path.join(moduledir, "model", "%s.h" % modname), "wt")
+    model_h = open(os.path.join(moduledir, "model", "%s.h" % modname), "wt")
     model_h.write(MODEL_H_TEMPLATE % dict(MODULE=modname, INCLUDE_GUARD="%s_H" % (modname.replace("-", "_").upper()),))
     model_h.close()
 
@@ -362,7 +363,7 @@
     # 
     testdir = os.path.join(moduledir, "test")
     os.mkdir(testdir)
-    test_cc = file(os.path.join(moduledir, "test", "%s-test-suite.cc" % modname), "wt")
+    test_cc = open(os.path.join(moduledir, "test", "%s-test-suite.cc" % modname), "wt")
     test_cc.write(TEST_CC_TEMPLATE % dict(MODULE=modname,
                                           CAPITALIZED=''.join([word.capitalize() for word in modname.split('-')]),
                                           COMPOUND=''.join([modname.split('-')[0]] + [word.capitalize() for word in modname.split('-')[1:]]),
@@ -377,11 +378,11 @@
     helperdir = os.path.join(moduledir, "helper")
     os.mkdir(helperdir)
 
-    helper_cc = file(os.path.join(moduledir, "helper", "%s-helper.cc" % modname), "wt")
+    helper_cc = open(os.path.join(moduledir, "helper", "%s-helper.cc" % modname), "wt")
     helper_cc.write(HELPER_CC_TEMPLATE % dict(MODULE=modname))
     helper_cc.close()
 
-    helper_h = file(os.path.join(moduledir, "helper", "%s-helper.h" % modname), "wt")
+    helper_h = open(os.path.join(moduledir, "helper", "%s-helper.h" % modname), "wt")
     helper_h.write(HELPER_H_TEMPLATE % dict(MODULE=modname, INCLUDE_GUARD="%s_HELPER_H" % (modname.replace("-", "_").upper()),))
     helper_h.close()
 
@@ -391,11 +392,11 @@
     examplesdir = os.path.join(moduledir, "examples")
     os.mkdir(examplesdir)
 
-    examples_wscript = file(os.path.join(examplesdir, "wscript"), "wt")
+    examples_wscript = open(os.path.join(examplesdir, "wscript"), "wt")
     examples_wscript.write(EXAMPLES_WSCRIPT_TEMPLATE % dict(MODULE=modname))
     examples_wscript.close()
 
-    example_cc = file(os.path.join(moduledir, "examples", "%s-example.cc" % modname), "wt")
+    example_cc = open(os.path.join(moduledir, "examples", "%s-example.cc" % modname), "wt")
     example_cc.write(EXAMPLE_CC_TEMPLATE % dict(MODULE=modname))
     example_cc.close()
 
@@ -405,7 +406,7 @@
     docdir = os.path.join(moduledir, "doc")
     os.mkdir(docdir)
 
-    doc_rst = file(os.path.join(moduledir, "doc", "%s.rst" % modname), "wt")
+    doc_rst = open(os.path.join(moduledir, "doc", "%s.rst" % modname), "wt")
     doc_rst.write(DOC_RST_TEMPLATE % dict(MODULE=modname))
     doc_rst.close()
 
diff -Naur ns-3.24.1/src/csma/bindings/callbacks_list.py ns-3.25/src/csma/bindings/callbacks_list.py
--- ns-3.24.1/src/csma/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,5 +1,7 @@
 callback_classes = [
+    ['void', 'ns3::empty', 'ns3::empty', '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::Address const&', 'ns3::NetDevice::PacketType', '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'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/csma/bindings/modulegen__gcc_ILP32.py ns-3.25/src/csma/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/csma/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -109,7 +109,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -122,6 +122,8 @@
     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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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]
@@ -168,12 +170,16 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -202,6 +208,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -220,10 +230,16 @@
     module.add_class('DataRateValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -234,6 +250,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -262,6 +280,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -278,6 +300,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -290,6 +314,8 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -319,6 +345,12 @@
     nested_module = module.add_cpp_namespace('TracedValueCallback')
     register_types_ns3_TracedValueCallback(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -357,9 +389,37 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -405,6 +465,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -425,9 +486,11 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -440,6 +503,8 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
@@ -449,13 +514,17 @@
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -469,6 +538,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -477,11 +548,13 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
@@ -1308,6 +1381,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1323,6 +1401,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1499,7 +1582,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2217,10 +2300,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -2497,6 +2584,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3021,6 +3142,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3056,18 +3181,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -3108,33 +3248,45 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
@@ -3294,6 +3446,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3330,6 +3494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3886,6 +4062,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4152,6 +4369,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -4208,6 +4458,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4389,6 +4717,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -4663,7 +5024,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -4790,6 +5151,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -4869,6 +5316,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -5243,6 +5695,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RateErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::RateErrorModel::RateErrorModel(ns3::RateErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RateErrorModel const &', 'arg0')])
@@ -5410,6 +5883,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5594,7 +6100,7 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## csma-net-device.h (module 'csma'): void ns3::CsmaNetDevice::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]
+    ## csma-net-device.h (module 'csma'): void ns3::CsmaNetDevice::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')], 
@@ -5800,6 +6306,7 @@
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5815,6 +6322,9 @@
 def register_functions_ns3_TracedValueCallback(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/csma/bindings/modulegen__gcc_LP64.py ns-3.25/src/csma/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/csma/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -109,7 +109,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -122,6 +122,8 @@
     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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## 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]
@@ -168,12 +170,16 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -202,6 +208,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -220,10 +230,16 @@
     module.add_class('DataRateValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## error-model.h (module 'network'): ns3::ErrorModel [class]
@@ -234,6 +250,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
     module.add_class('Ipv4AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressValue [class]
@@ -262,6 +280,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -278,6 +300,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## error-model.h (module 'network'): ns3::RateErrorModel [class]
     module.add_class('RateErrorModel', import_from_module='ns.network', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -290,6 +314,8 @@
     module.add_class('TypeIdChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## type-id.h (module 'core'): ns3::TypeIdValue [class]
     module.add_class('TypeIdValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
@@ -319,6 +345,12 @@
     nested_module = module.add_cpp_namespace('TracedValueCallback')
     register_types_ns3_TracedValueCallback(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -357,9 +389,37 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
 
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
@@ -405,6 +465,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -425,9 +486,11 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -440,6 +503,8 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
@@ -449,13 +514,17 @@
     register_Ns3DataRateChecker_methods(root_module, root_module['ns3::DataRateChecker'])
     register_Ns3DataRateValue_methods(root_module, root_module['ns3::DataRateValue'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     register_Ns3ErrorModel_methods(root_module, root_module['ns3::ErrorModel'])
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
@@ -469,6 +538,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -477,11 +548,13 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RateErrorModel_methods(root_module, root_module['ns3::RateErrorModel'])
     register_Ns3ReceiveListErrorModel_methods(root_module, root_module['ns3::ReceiveListErrorModel'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3BurstErrorModel_methods(root_module, root_module['ns3::BurstErrorModel'])
@@ -1308,6 +1381,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1323,6 +1401,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1499,7 +1582,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2217,10 +2300,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -2497,6 +2584,40 @@
     cls.add_constructor([param('ns3::Time const', 'time'), param('ns3::Time::Unit const', 'unit')])
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3021,6 +3142,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3056,18 +3181,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -3108,33 +3248,45 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<const ns3::Packet> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
@@ -3294,6 +3446,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3330,6 +3494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3886,6 +4062,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4152,6 +4369,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -4208,6 +4458,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4389,6 +4717,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker::Ipv4AddressChecker() [constructor]
     cls.add_constructor([])
@@ -4663,7 +5024,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -4790,6 +5151,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -4869,6 +5316,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -5243,6 +5695,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RateErrorModel_methods(root_module, cls):
     ## error-model.h (module 'network'): ns3::RateErrorModel::RateErrorModel(ns3::RateErrorModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RateErrorModel const &', 'arg0')])
@@ -5410,6 +5883,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -5594,7 +6100,7 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## csma-net-device.h (module 'csma'): void ns3::CsmaNetDevice::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]
+    ## csma-net-device.h (module 'csma'): void ns3::CsmaNetDevice::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')], 
@@ -5800,6 +6306,7 @@
     register_functions_ns3_FatalImpl(module.get_submodule('FatalImpl'), root_module)
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -5815,6 +6322,9 @@
 def register_functions_ns3_TracedValueCallback(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/csma/examples/csma-ping.cc ns-3.25/src/csma/examples/csma-ping.cc
--- ns-3.24.1/src/csma/examples/csma-ping.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/examples/csma-ping.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,6 +32,7 @@
 #include "ns3/network-module.h"
 #include "ns3/csma-module.h"
 #include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/internet-module.h"
 
 using namespace ns3;
diff -Naur ns-3.24.1/src/csma/examples/csma-raw-ip-socket.cc ns-3.25/src/csma/examples/csma-raw-ip-socket.cc
--- ns-3.24.1/src/csma/examples/csma-raw-ip-socket.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/examples/csma-raw-ip-socket.cc	2016-03-23 21:36:53.000000000 -0700
@@ -35,6 +35,7 @@
 #include "ns3/network-module.h"
 #include "ns3/csma-module.h"
 #include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/internet-module.h"
 
 using namespace ns3;
diff -Naur ns-3.24.1/src/csma/examples/wscript ns-3.25/src/csma/examples/wscript
--- ns-3.24.1/src/csma/examples/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -13,8 +13,8 @@
     obj = bld.create_ns3_program('csma-multicast', ['csma', 'internet', 'applications'])
     obj.source = 'csma-multicast.cc'
 
-    obj = bld.create_ns3_program('csma-raw-ip-socket', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('csma-raw-ip-socket', ['csma', 'internet', 'applications', 'internet-apps'])
     obj.source = 'csma-raw-ip-socket.cc'
 
-    obj = bld.create_ns3_program('csma-ping', ['csma', 'internet', 'applications'])
+    obj = bld.create_ns3_program('csma-ping', ['csma', 'internet', 'applications', 'internet-apps'])
     obj.source = 'csma-ping.cc'
diff -Naur ns-3.24.1/src/csma/model/csma-net-device.cc ns-3.25/src/csma/model/csma-net-device.cc
--- ns-3.24.1/src/csma/model/csma-net-device.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma/model/csma-net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -564,8 +564,9 @@
     }
   else
     {
-      m_currentPkt = m_queue->Dequeue ();
-      NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitAbort(): IsEmpty false but no Packet on queue?");
+      Ptr<QueueItem> item = m_queue->Dequeue ();
+      NS_ASSERT_MSG (item != 0, "CsmaNetDevice::TransmitAbort(): IsEmpty false but no Packet on queue?");
+      m_currentPkt = item->GetPacket ();
       m_snifferTrace (m_currentPkt);
       m_promiscSnifferTrace (m_currentPkt);
       TransmitStart ();
@@ -632,8 +633,9 @@
     }
   else
     {
-      m_currentPkt = m_queue->Dequeue ();
-      NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitReadyEvent(): IsEmpty false but no Packet on queue?");
+      Ptr<QueueItem> item = m_queue->Dequeue ();
+      NS_ASSERT_MSG (item != 0, "CsmaNetDevice::TransmitReadyEvent(): IsEmpty false but no Packet on queue?");
+      m_currentPkt = item->GetPacket ();
       m_snifferTrace (m_currentPkt);
       m_promiscSnifferTrace (m_currentPkt);
       TransmitStart ();
@@ -968,7 +970,7 @@
   // Place the packet to be sent on the send queue.  Note that the 
   // queue may fire a drop trace, but we will too.
   //
-  if (m_queue->Enqueue (packet) == false)
+  if (m_queue->Enqueue (Create<QueueItem> (packet)) == false)
     {
       m_macTxDropTrace (packet);
       return false;
@@ -983,8 +985,9 @@
     {
       if (m_queue->IsEmpty () == false)
         {
-          m_currentPkt = m_queue->Dequeue ();
-          NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::SendFrom(): IsEmpty false but no Packet on queue?");
+          Ptr<QueueItem> item = m_queue->Dequeue ();
+          NS_ASSERT_MSG (item != 0, "CsmaNetDevice::SendFrom(): IsEmpty false but no Packet on queue?");
+          m_currentPkt = item->GetPacket ();
           m_promiscSnifferTrace (m_currentPkt);
           m_snifferTrace (m_currentPkt);
           TransmitStart ();
diff -Naur ns-3.24.1/src/csma-layout/bindings/callbacks_list.py ns-3.25/src/csma-layout/bindings/callbacks_list.py
--- ns-3.24.1/src/csma-layout/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma-layout/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,7 +1,9 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/csma-layout/bindings/modulegen__gcc_ILP32.py ns-3.25/src/csma-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma-layout/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -141,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -188,6 +188,8 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -212,12 +214,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -226,6 +232,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -316,6 +324,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -328,6 +340,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -339,6 +353,7 @@
     ## 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=u'vector')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', 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
@@ -479,9 +494,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -524,12 +541,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1588,6 +1608,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1603,6 +1628,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1729,10 +1759,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -1917,7 +1947,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2196,10 +2226,10 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
-    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer const & c) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+                   [param('ns3::Ipv6InterfaceContainer const &', 'c')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -2856,10 +2886,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3889,11 +3923,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -3953,6 +3997,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -4091,6 +4139,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4217,6 +4269,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4253,6 +4317,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -4344,6 +4420,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4369,6 +4450,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -5555,6 +5651,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5570,6 +5671,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5585,6 +5691,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5635,6 +5751,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5777,6 +5898,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5792,6 +5918,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5819,7 +5950,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5878,6 +6015,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -6160,6 +6302,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -6170,6 +6317,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -6190,6 +6347,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -6200,6 +6367,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -6316,16 +6488,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -6349,7 +6538,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -6498,6 +6688,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -6659,7 +6875,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -6786,6 +7002,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6865,6 +7167,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -7151,6 +7458,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/csma-layout/bindings/modulegen__gcc_LP64.py ns-3.25/src/csma-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/csma-layout/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/csma-layout/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -141,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
@@ -188,6 +188,8 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -212,12 +214,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -226,6 +232,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -316,6 +324,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -328,6 +340,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -339,6 +353,7 @@
     ## 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=u'vector')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', 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
@@ -479,9 +494,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -524,12 +541,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1588,6 +1608,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1603,6 +1628,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1729,10 +1759,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -1917,7 +1947,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2196,10 +2226,10 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
-    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer const & c) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+                   [param('ns3::Ipv6InterfaceContainer const &', 'c')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -2856,10 +2886,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3889,11 +3923,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -3953,6 +3997,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -4091,6 +4139,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4217,6 +4269,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4253,6 +4317,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -4344,6 +4420,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4369,6 +4450,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -5555,6 +5651,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5570,6 +5671,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5585,6 +5691,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5635,6 +5751,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5777,6 +5898,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5792,6 +5918,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5819,7 +5950,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5878,6 +6015,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -6160,6 +6302,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -6170,6 +6317,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -6190,6 +6347,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -6200,6 +6367,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -6316,16 +6488,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -6349,7 +6538,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -6498,6 +6688,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -6659,7 +6875,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -6786,6 +7002,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6865,6 +7167,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -7151,6 +7458,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/dsdv/bindings/callbacks_list.py ns-3.25/src/dsdv/bindings/callbacks_list.py
--- ns-3.24.1/src/dsdv/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/dsdv/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,9 +1,11 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::Socket::SocketErrno', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Ipv4Route>', 'ns3::Ptr<ns3::Packet const>', 'ns3::Ipv4Header const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/dsdv/bindings/modulegen__gcc_ILP32.py ns-3.25/src/dsdv/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/dsdv/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/dsdv/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -150,6 +150,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -180,6 +182,18 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -200,12 +214,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -214,6 +232,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -234,6 +254,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -252,6 +274,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -262,10 +288,16 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -274,6 +306,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## 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]
@@ -314,6 +348,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -330,18 +368,26 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', 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
@@ -367,6 +413,12 @@
     nested_module = module.add_cpp_namespace('dsdv')
     register_types_ns3_dsdv(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -405,9 +457,33 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
 
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
@@ -428,6 +504,10 @@
     module.add_class('RoutingTableEntry')
     module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type=u'map')
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -476,6 +556,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -487,6 +568,10 @@
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -497,9 +582,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -510,6 +597,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -519,17 +607,23 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     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'])
@@ -548,6 +642,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -556,12 +652,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
@@ -1312,6 +1411,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1327,6 +1431,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1621,7 +1730,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2515,6 +2624,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3108,6 +3251,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3287,6 +3778,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3323,6 +3826,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3414,6 +3929,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3439,6 +3959,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4171,29 +4706,97 @@
                    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]
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [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', 
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::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', 
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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)
@@ -4490,6 +5093,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4604,6 +5248,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -4660,6 +5337,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4798,6 +5553,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_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')])
@@ -4873,6 +5661,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4888,6 +5681,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4903,6 +5701,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4953,6 +5761,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5079,10 +5892,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -5107,6 +5920,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -5196,6 +6013,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5211,6 +6033,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5238,7 +6065,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5297,6 +6130,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -5677,7 +6515,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5804,6 +6642,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -5883,6 +6807,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6257,6 +7186,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6330,6 +7280,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6447,6 +7430,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -7016,6 +8033,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7034,6 +8052,9 @@
 def register_functions_ns3_dsdv(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/dsdv/bindings/modulegen__gcc_LP64.py ns-3.25/src/dsdv/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/dsdv/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/dsdv/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -150,6 +150,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -180,6 +182,18 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -200,12 +214,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -214,6 +232,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -234,6 +254,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -252,6 +274,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -262,10 +288,16 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
     module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## enum.h (module 'core'): ns3::EnumChecker [class]
+    module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## enum.h (module 'core'): ns3::EnumValue [class]
+    module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
     module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -274,6 +306,8 @@
     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'])
+    ## integer.h (module 'core'): ns3::IntegerValue [class]
+    module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## 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]
@@ -314,6 +348,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -330,18 +368,26 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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'])
+    ## uinteger.h (module 'core'): ns3::UintegerValue [class]
+    module.add_class('UintegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## address.h (module 'network'): ns3::AddressChecker [class]
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', 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
@@ -367,6 +413,12 @@
     nested_module = module.add_cpp_namespace('dsdv')
     register_types_ns3_dsdv(nested_module)
     
+    
+    ## Register a nested module for the namespace internal
+    
+    nested_module = module.add_cpp_namespace('internal')
+    register_types_ns3_internal(nested_module)
+    
 
 def register_types_ns3_FatalImpl(module):
     root_module = module.get_root()
@@ -405,9 +457,33 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
 
 def register_types_ns3_dsdv(module):
     root_module = module.get_root()
@@ -428,6 +504,10 @@
     module.add_class('RoutingTableEntry')
     module.add_container('std::map< ns3::Ipv4Address, ns3::dsdv::RoutingTableEntry >', ('ns3::Ipv4Address', 'ns3::dsdv::RoutingTableEntry'), container_type=u'map')
 
+def register_types_ns3_internal(module):
+    root_module = module.get_root()
+    
+
 def register_methods(root_module):
     register_Ns3Address_methods(root_module, root_module['ns3::Address'])
     register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
@@ -476,6 +556,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -487,6 +568,10 @@
     register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -497,9 +582,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -510,6 +597,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -519,17 +607,23 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
+    register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
     register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
     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_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     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'])
@@ -548,6 +642,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -556,12 +652,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
+    register_Ns3UintegerValue_methods(root_module, root_module['ns3::UintegerValue'])
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
@@ -1312,6 +1411,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1327,6 +1431,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1621,7 +1730,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2515,6 +2624,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('!=')
@@ -3108,6 +3251,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -3287,6 +3778,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3323,6 +3826,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3414,6 +3929,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3439,6 +3959,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4171,29 +4706,97 @@
                    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]
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [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', 
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## trailer.h (module 'network'): static ns3::TypeId ns3::Trailer::GetTypeId() [member function]
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::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', 
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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)
@@ -4490,6 +5093,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -4604,6 +5248,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -4660,6 +5337,84 @@
                    is_const=True, visibility='private', is_virtual=True)
     return
 
+def register_Ns3EnumChecker_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker(ns3::EnumChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumChecker const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumChecker::EnumChecker() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): void ns3::EnumChecker::Add(int value, std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): void ns3::EnumChecker::AddDefault(int value, std::string name) [member function]
+    cls.add_method('AddDefault', 
+                   'void', 
+                   [param('int', 'value'), param('std::string', 'name')])
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Check(ns3::AttributeValue const & value) const [member function]
+    cls.add_method('Check', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'value')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::Copy(ns3::AttributeValue const & src, ns3::AttributeValue & dst) const [member function]
+    cls.add_method('Copy', 
+                   'bool', 
+                   [param('ns3::AttributeValue const &', 'src'), param('ns3::AttributeValue &', 'dst')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumChecker::Create() const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetUnderlyingTypeInformation() const [member function]
+    cls.add_method('GetUnderlyingTypeInformation', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): std::string ns3::EnumChecker::GetValueTypeName() const [member function]
+    cls.add_method('GetValueTypeName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumChecker::HasUnderlyingTypeInformation() const [member function]
+    cls.add_method('HasUnderlyingTypeInformation', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3EnumValue_methods(root_module, cls):
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(ns3::EnumValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::EnumValue const &', 'arg0')])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue() [constructor]
+    cls.add_constructor([])
+    ## enum.h (module 'core'): ns3::EnumValue::EnumValue(int value) [constructor]
+    cls.add_constructor([param('int', 'value')])
+    ## enum.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::EnumValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): bool ns3::EnumValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## enum.h (module 'core'): int ns3::EnumValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int', 
+                   [], 
+                   is_const=True)
+    ## enum.h (module 'core'): std::string ns3::EnumValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## enum.h (module 'core'): void ns3::EnumValue::Set(int value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int', 'value')])
+    return
+
 def register_Ns3ErlangRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4798,6 +5553,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_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')])
@@ -4873,6 +5661,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4888,6 +5681,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4903,6 +5701,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4953,6 +5761,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -5079,10 +5892,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -5107,6 +5920,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -5196,6 +6013,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -5211,6 +6033,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -5238,7 +6065,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -5297,6 +6130,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -5677,7 +6515,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5804,6 +6642,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -5883,6 +6807,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6257,6 +7186,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6330,6 +7280,39 @@
                    [param('ns3::TypeId const &', 'value')])
     return
 
+def register_Ns3UintegerValue_methods(root_module, cls):
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue() [constructor]
+    cls.add_constructor([])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(ns3::UintegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::UintegerValue const &', 'arg0')])
+    ## uinteger.h (module 'core'): ns3::UintegerValue::UintegerValue(uint64_t const & value) [constructor]
+    cls.add_constructor([param('uint64_t const &', 'value')])
+    ## uinteger.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::UintegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): bool ns3::UintegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## uinteger.h (module 'core'): uint64_t ns3::UintegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## uinteger.h (module 'core'): std::string ns3::UintegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## uinteger.h (module 'core'): void ns3::UintegerValue::Set(uint64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('uint64_t const &', 'value')])
+    return
+
 def register_Ns3AddressChecker_methods(root_module, cls):
     ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
     cls.add_constructor([])
@@ -6447,6 +7430,40 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -7016,6 +8033,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_dsdv(module.get_submodule('dsdv'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7034,6 +8052,9 @@
 def register_functions_ns3_dsdv(module, root_module):
     return
 
+def register_functions_ns3_internal(module, root_module):
+    return
+
 def main():
     out = FileCodeSink(sys.stdout)
     root_module = module_init()
diff -Naur ns-3.24.1/src/dsdv/examples/dsdv-manet.cc ns-3.25/src/dsdv/examples/dsdv-manet.cc
--- ns-3.24.1/src/dsdv/examples/dsdv-manet.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsdv/examples/dsdv-manet.cc	2016-03-23 21:36:53.000000000 -0700
@@ -265,7 +265,7 @@
 void
 DsdvManetExample::CreateDevices (std::string tr_name)
 {
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel;
diff -Naur ns-3.24.1/src/dsdv/model/dsdv-routing-protocol.cc ns-3.25/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.24.1/src/dsdv/model/dsdv-routing-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsdv/model/dsdv-routing-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -231,8 +231,13 @@
 void
 RoutingProtocol::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
 {
-  *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId () << " Time: " << Simulator::Now ().GetSeconds () << "s ";
+  *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId ()
+                        << ", Time: " << Now().As (Time::S)
+                        << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+                        << ", DSDV Routing table" << std::endl;
+
   m_routingTable.Print (stream);
+  *stream->GetStream () << std::endl;
 }
 
 void
diff -Naur ns-3.24.1/src/dsr/bindings/callbacks_list.py ns-3.25/src/dsr/bindings/callbacks_list.py
--- ns-3.24.1/src/dsr/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,7 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::Ipv6Address', 'ns3::Ipv6Address', 'unsigned char', 'ns3::Ptr<ns3::Ipv6Route>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::WifiMacHeader const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ipv4Address', 'unsigned char', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::ArpCache const>', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::Ipv4Address', 'ns3::Ipv4Address', 'unsigned char', 'ns3::Ptr<ns3::Ipv4Route>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
@@ -9,4 +10,5 @@
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/dsr/bindings/modulegen__gcc_ILP32.py ns-3.25/src/dsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/dsr/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -21,17 +21,19 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
     module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
     module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
-    ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
-    module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
     module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
+    ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
+    module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -176,6 +178,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -236,12 +240,26 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
     module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -262,12 +280,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
@@ -278,6 +300,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -298,6 +322,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -322,6 +348,8 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode [enumeration]
+    module.add_enum('ProtectionMode', ['RTS_CTS', 'CTS_TO_SELF'], outer_class=root_module['ns3::WifiRemoteStationManager'], import_from_module='ns.wifi')
     ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
     module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
@@ -336,6 +364,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -346,6 +378,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
@@ -368,6 +402,8 @@
     module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## 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]
@@ -414,6 +450,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -430,6 +470,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
     module.add_class('Ssid', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## ssid.h (module 'wifi'): ns3::SsidChecker [class]
@@ -464,8 +506,13 @@
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', 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< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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'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*')
@@ -553,9 +600,33 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
@@ -571,12 +642,26 @@
     module.add_enum('LinkStates', ['PROBABLE', 'QUESTIONABLE'])
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList [struct]
     module.add_class('BlackList')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry [class]
+    module.add_class('DsrErrorBuffEntry')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer [class]
+    module.add_class('DsrErrorBuffer')
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrFsHeader [class]
     module.add_class('DsrFsHeader', parent=root_module['ns3::Header'])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply [class]
+    module.add_class('DsrGraReply', parent=root_module['ns3::Object'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab [class]
+    module.add_class('DsrLinkStab')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry [class]
+    module.add_class('DsrMaintainBuffEntry')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer [class]
+    module.add_class('DsrMaintainBuffer')
     ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue [class]
     module.add_class('DsrNetworkQueue', parent=root_module['ns3::Object'])
     ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry [class]
     module.add_class('DsrNetworkQueueEntry')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab [class]
+    module.add_class('DsrNodeStab')
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrOptionField [class]
     module.add_class('DsrOptionField')
     ## dsr-option-header.h (module 'dsr'): ns3::dsr::DsrOptionHeader [class]
@@ -601,54 +686,40 @@
     module.add_class('DsrOptionSRHeader', parent=root_module['ns3::dsr::DsrOptionHeader'])
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptions [class]
     module.add_class('DsrOptions', parent=root_module['ns3::Object'])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry [class]
+    module.add_class('DsrPassiveBuffEntry')
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer [class]
+    module.add_class('DsrPassiveBuffer', parent=root_module['ns3::Object'])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry [class]
+    module.add_class('DsrReceivedRreqEntry')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache [class]
+    module.add_class('DsrRouteCache', parent=root_module['ns3::Object'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor [struct]
+    module.add_class('Neighbor', outer_class=root_module['ns3::dsr::DsrRouteCache'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry [class]
+    module.add_class('DsrRouteCacheEntry')
     ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting [class]
     module.add_class('DsrRouting', parent=root_module['ns3::IpL4Protocol'])
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader [class]
     module.add_class('DsrRoutingHeader', parent=[root_module['ns3::dsr::DsrFsHeader'], root_module['ns3::dsr::DsrOptionField']])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry [class]
-    module.add_class('ErrorBuffEntry')
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer [class]
-    module.add_class('ErrorBuffer')
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply [class]
-    module.add_class('GraReply', parent=root_module['ns3::Object'])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable [class]
+    module.add_class('DsrRreqTable', parent=root_module['ns3::Object'])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry [class]
+    module.add_class('DsrSendBuffEntry')
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer [class]
+    module.add_class('DsrSendBuffer')
     ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry [struct]
     module.add_class('GraReplyEntry')
     ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link [struct]
     module.add_class('Link')
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey [struct]
     module.add_class('LinkKey')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab [class]
-    module.add_class('LinkStab')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry [class]
-    module.add_class('MaintainBuffEntry')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer [class]
-    module.add_class('MaintainBuffer')
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey [struct]
     module.add_class('NetworkKey')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab [class]
-    module.add_class('NodeStab')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry [class]
-    module.add_class('PassiveBuffEntry')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer [class]
-    module.add_class('PassiveBuffer', parent=root_module['ns3::Object'])
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey [struct]
     module.add_class('PassiveKey')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry [class]
-    module.add_class('ReceivedRreqEntry')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache [class]
-    module.add_class('RouteCache', parent=root_module['ns3::Object'])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor [struct]
-    module.add_class('Neighbor', outer_class=root_module['ns3::dsr::RouteCache'])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry [class]
-    module.add_class('RouteCacheEntry')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable [class]
-    module.add_class('RreqTable', parent=root_module['ns3::Object'])
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry [struct]
     module.add_class('RreqTableEntry')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry [class]
-    module.add_class('SendBuffEntry')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer [class]
-    module.add_class('SendBuffer')
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionAck [class]
     module.add_class('DsrOptionAck', parent=root_module['ns3::dsr::DsrOptions'])
     ## dsr-option-header.h (module 'dsr'): ns3::dsr::DsrOptionAckHeader [class]
@@ -669,16 +740,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::DsrErrorBuffEntry >', 'ns3::dsr::DsrErrorBuffEntry', container_type=u'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::dsr::DsrRouteCache::Neighbor >', 'ns3::dsr::DsrRouteCache::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::list< ns3::dsr::DsrRouteCacheEntry >', 'ns3::dsr::DsrRouteCacheEntry', container_type=u'list')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
     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')
+    module.add_container('std::vector< ns3::dsr::DsrSendBuffEntry >', 'ns3::dsr::DsrSendBuffEntry', container_type=u'vector')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -737,6 +808,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -761,6 +833,10 @@
     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_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -771,9 +847,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
@@ -785,6 +863,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -801,11 +880,14 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
@@ -817,6 +899,7 @@
     register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
     register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
     register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    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'])
@@ -837,6 +920,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -845,6 +930,7 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
@@ -862,15 +948,23 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
     register_Ns3DsrBlackList_methods(root_module, root_module['ns3::dsr::BlackList'])
+    register_Ns3DsrDsrErrorBuffEntry_methods(root_module, root_module['ns3::dsr::DsrErrorBuffEntry'])
+    register_Ns3DsrDsrErrorBuffer_methods(root_module, root_module['ns3::dsr::DsrErrorBuffer'])
     register_Ns3DsrDsrFsHeader_methods(root_module, root_module['ns3::dsr::DsrFsHeader'])
+    register_Ns3DsrDsrGraReply_methods(root_module, root_module['ns3::dsr::DsrGraReply'])
+    register_Ns3DsrDsrLinkStab_methods(root_module, root_module['ns3::dsr::DsrLinkStab'])
+    register_Ns3DsrDsrMaintainBuffEntry_methods(root_module, root_module['ns3::dsr::DsrMaintainBuffEntry'])
+    register_Ns3DsrDsrMaintainBuffer_methods(root_module, root_module['ns3::dsr::DsrMaintainBuffer'])
     register_Ns3DsrDsrNetworkQueue_methods(root_module, root_module['ns3::dsr::DsrNetworkQueue'])
     register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, root_module['ns3::dsr::DsrNetworkQueueEntry'])
+    register_Ns3DsrDsrNodeStab_methods(root_module, root_module['ns3::dsr::DsrNodeStab'])
     register_Ns3DsrDsrOptionField_methods(root_module, root_module['ns3::dsr::DsrOptionField'])
     register_Ns3DsrDsrOptionHeader_methods(root_module, root_module['ns3::dsr::DsrOptionHeader'])
     register_Ns3DsrDsrOptionHeaderAlignment_methods(root_module, root_module['ns3::dsr::DsrOptionHeader::Alignment'])
@@ -883,30 +977,23 @@
     register_Ns3DsrDsrOptionRreqHeader_methods(root_module, root_module['ns3::dsr::DsrOptionRreqHeader'])
     register_Ns3DsrDsrOptionSRHeader_methods(root_module, root_module['ns3::dsr::DsrOptionSRHeader'])
     register_Ns3DsrDsrOptions_methods(root_module, root_module['ns3::dsr::DsrOptions'])
+    register_Ns3DsrDsrPassiveBuffEntry_methods(root_module, root_module['ns3::dsr::DsrPassiveBuffEntry'])
+    register_Ns3DsrDsrPassiveBuffer_methods(root_module, root_module['ns3::dsr::DsrPassiveBuffer'])
+    register_Ns3DsrDsrReceivedRreqEntry_methods(root_module, root_module['ns3::dsr::DsrReceivedRreqEntry'])
+    register_Ns3DsrDsrRouteCache_methods(root_module, root_module['ns3::dsr::DsrRouteCache'])
+    register_Ns3DsrDsrRouteCacheNeighbor_methods(root_module, root_module['ns3::dsr::DsrRouteCache::Neighbor'])
+    register_Ns3DsrDsrRouteCacheEntry_methods(root_module, root_module['ns3::dsr::DsrRouteCacheEntry'])
     register_Ns3DsrDsrRouting_methods(root_module, root_module['ns3::dsr::DsrRouting'])
     register_Ns3DsrDsrRoutingHeader_methods(root_module, root_module['ns3::dsr::DsrRoutingHeader'])
-    register_Ns3DsrErrorBuffEntry_methods(root_module, root_module['ns3::dsr::ErrorBuffEntry'])
-    register_Ns3DsrErrorBuffer_methods(root_module, root_module['ns3::dsr::ErrorBuffer'])
-    register_Ns3DsrGraReply_methods(root_module, root_module['ns3::dsr::GraReply'])
+    register_Ns3DsrDsrRreqTable_methods(root_module, root_module['ns3::dsr::DsrRreqTable'])
+    register_Ns3DsrDsrSendBuffEntry_methods(root_module, root_module['ns3::dsr::DsrSendBuffEntry'])
+    register_Ns3DsrDsrSendBuffer_methods(root_module, root_module['ns3::dsr::DsrSendBuffer'])
     register_Ns3DsrGraReplyEntry_methods(root_module, root_module['ns3::dsr::GraReplyEntry'])
     register_Ns3DsrLink_methods(root_module, root_module['ns3::dsr::Link'])
     register_Ns3DsrLinkKey_methods(root_module, root_module['ns3::dsr::LinkKey'])
-    register_Ns3DsrLinkStab_methods(root_module, root_module['ns3::dsr::LinkStab'])
-    register_Ns3DsrMaintainBuffEntry_methods(root_module, root_module['ns3::dsr::MaintainBuffEntry'])
-    register_Ns3DsrMaintainBuffer_methods(root_module, root_module['ns3::dsr::MaintainBuffer'])
     register_Ns3DsrNetworkKey_methods(root_module, root_module['ns3::dsr::NetworkKey'])
-    register_Ns3DsrNodeStab_methods(root_module, root_module['ns3::dsr::NodeStab'])
-    register_Ns3DsrPassiveBuffEntry_methods(root_module, root_module['ns3::dsr::PassiveBuffEntry'])
-    register_Ns3DsrPassiveBuffer_methods(root_module, root_module['ns3::dsr::PassiveBuffer'])
     register_Ns3DsrPassiveKey_methods(root_module, root_module['ns3::dsr::PassiveKey'])
-    register_Ns3DsrReceivedRreqEntry_methods(root_module, root_module['ns3::dsr::ReceivedRreqEntry'])
-    register_Ns3DsrRouteCache_methods(root_module, root_module['ns3::dsr::RouteCache'])
-    register_Ns3DsrRouteCacheNeighbor_methods(root_module, root_module['ns3::dsr::RouteCache::Neighbor'])
-    register_Ns3DsrRouteCacheEntry_methods(root_module, root_module['ns3::dsr::RouteCacheEntry'])
-    register_Ns3DsrRreqTable_methods(root_module, root_module['ns3::dsr::RreqTable'])
     register_Ns3DsrRreqTableEntry_methods(root_module, root_module['ns3::dsr::RreqTableEntry'])
-    register_Ns3DsrSendBuffEntry_methods(root_module, root_module['ns3::dsr::SendBuffEntry'])
-    register_Ns3DsrSendBuffer_methods(root_module, root_module['ns3::dsr::SendBuffer'])
     register_Ns3DsrDsrOptionAck_methods(root_module, root_module['ns3::dsr::DsrOptionAck'])
     register_Ns3DsrDsrOptionAckHeader_methods(root_module, root_module['ns3::dsr::DsrOptionAckHeader'])
     register_Ns3DsrDsrOptionAckReq_methods(root_module, root_module['ns3::dsr::DsrOptionAckReq'])
@@ -1703,6 +1790,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1718,6 +1810,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1955,7 +2052,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2945,6 +3042,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3159,21 +3290,26 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize() const [member function]
     cls.add_method('GetConstellationSize', 
                    'uint16_t', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetDataRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
     cls.add_method('GetMcsValue', 
                    'uint8_t', 
@@ -3184,11 +3320,21 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetNonHtReferenceRate() const [member function]
+    cls.add_method('GetNonHtReferenceRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetPhyRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
                    'uint32_t', 
@@ -3199,6 +3345,16 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherCodeRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherCodeRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherDataRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherDataRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
     cls.add_method('IsMandatory', 
                    'bool', 
@@ -3316,6 +3472,8 @@
     cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_htSupported [variable]
+    cls.add_instance_attribute('m_htSupported', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
@@ -3325,13 +3483,17 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
-    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    cls.add_instance_attribute('m_rx', 'uint8_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
     cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortPreamble [variable]
+    cls.add_instance_attribute('m_shortPreamble', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortSlotTime [variable]
+    cls.add_instance_attribute('m_shortSlotTime', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
     cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
-    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_vhtSupported [variable]
+    cls.add_instance_attribute('m_vhtSupported', 'bool', is_const=False)
     return
 
 def register_Ns3WifiTxVector_methods(root_module, cls):
@@ -3436,6 +3598,7 @@
     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_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'))
@@ -3445,7 +3608,6 @@
     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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3504,10 +3666,10 @@
     cls.add_constructor([])
     ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
-    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
-    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduRefNumber [variable]
+    cls.add_instance_attribute('mpduRefNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3SignalNoiseDbm_methods(root_module, cls):
@@ -4005,11 +4167,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -4069,6 +4241,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -4161,6 +4337,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4340,6 +4864,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4376,6 +4912,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -4479,6 +5027,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4504,11 +5057,26 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
-    cls.add_method('IsIpRecvTos', 
-                   'bool', 
-                   [], 
-                   is_const=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
     cls.add_method('IsIpRecvTtl', 
                    'bool', 
@@ -5236,6 +5804,74 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -5519,6 +6155,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5609,12 +6250,12 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> linkDown) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
     cls.add_method('SetLinkDownCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> linkUp) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
     cls.add_method('SetLinkUpCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
@@ -5638,6 +6279,11 @@
                    'void', 
                    [param('ns3::Time', 'rifs')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -6120,6 +6766,11 @@
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
     cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -6129,15 +6780,19 @@
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiTxVector txVector, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6588,10 +7243,14 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
@@ -6632,6 +7291,11 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -6642,6 +7306,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::WifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6752,6 +7431,11 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('IsValidTxVector', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
@@ -6794,10 +7478,15 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
@@ -6839,16 +7528,21 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6871,6 +7565,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedMcs(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedModes(ns3::Mac48Address address) [member function]
     cls.add_method('AddAllSupportedModes', 
                    'void', 
@@ -6891,6 +7589,10 @@
     cls.add_method('AddStationVhtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedErpSlotTime(ns3::Mac48Address address, bool isShortSlotTimeSupported) [member function]
+    cls.add_method('AddSupportedErpSlotTime', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortSlotTimeSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
@@ -6899,6 +7601,10 @@
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedPlcpPreamble(ns3::Mac48Address address, bool isShortPreambleSupported) [member function]
+    cls.add_method('AddSupportedPlcpPreamble', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortPreambleSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
     cls.add_method('DoGetCtsToSelfTxVector', 
                    'ns3::WifiTxVector', 
@@ -6929,10 +7635,10 @@
     cls.add_method('GetCtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
                    'ns3::WifiMode', 
@@ -6990,6 +7696,16 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpBasicModes() const [member function]
+    cls.add_method('GetNNonErpBasicModes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpBasicMode(uint32_t i) const [member function]
+    cls.add_method('GetNonErpBasicMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
     cls.add_method('GetNonUnicastMode', 
                    'ns3::WifiMode', 
@@ -6999,6 +7715,11 @@
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode ns3::WifiRemoteStationManager::GetProtectionMode() const [member function]
+    cls.add_method('GetProtectionMode', 
+                   'ns3::WifiRemoteStationManager::ProtectionMode', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
@@ -7008,11 +7729,36 @@
     cls.add_method('GetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortPreambleSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetUseNonErpProtection() const [member function]
+    cls.add_method('GetUseNonErpProtection', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
     cls.add_method('HasHtSupported', 
                    'bool', 
@@ -7054,18 +7800,18 @@
     cls.add_method('NeedFragmentation', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector) [member function]
     cls.add_method('NeedRts', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PrepareForQueue', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
     cls.add_method('RecordDisassociated', 
                    'void', 
@@ -7082,6 +7828,10 @@
     cls.add_method('RecordWaitAssocTxOk', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportAmpduTxStatus(ns3::Mac48Address address, uint8_t tid, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('ReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
     cls.add_method('ReportDataFailed', 
                    'void', 
@@ -7138,10 +7888,26 @@
     cls.add_method('SetMaxSsrc', 
                    'void', 
                    [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetProtectionMode(ns3::WifiRemoteStationManager::ProtectionMode mode) [member function]
+    cls.add_method('SetProtectionMode', 
+                   'void', 
+                   [param('ns3::WifiRemoteStationManager::ProtectionMode', 'mode')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortPreambleEnabled(bool enable) [member function]
+    cls.add_method('SetShortPreambleEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortSlotTimeEnabled(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetUseNonErpProtection(bool enable) [member function]
+    cls.add_method('SetUseNonErpProtection', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
@@ -7180,6 +7946,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetHtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetLongRetryCount', 
                    'uint32_t', 
@@ -7200,6 +7971,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNNonErpSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
@@ -7210,14 +7986,14 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [param('ns3::WifiRemoteStation const *', 'station')], 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetNonErpSupported', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetNumberOfSupportedRxAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfSupportedRxAntennas', 
+                   'uint8_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
@@ -7245,6 +8021,11 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetVhtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -7340,10 +8121,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -7370,6 +8151,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportAmpduTxStatus(ns3::WifiRemoteStation * station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('DoReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -7580,9 +8366,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -7636,10 +8422,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -7648,10 +8434,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -7745,6 +8531,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -7859,6 +8686,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -8197,6 +9057,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetRxHighestSupportedAntennas() const [member function]
+    cls.add_method('GetRxHighestSupportedAntennas', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
     cls.add_method('GetRxHighestSupportedDataRate', 
                    'uint16_t', 
@@ -8251,10 +9116,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) const [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
-                   [param('uint8_t', 'mcs')])
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -8341,6 +9217,14 @@
     cls.add_method('SetTxMcsSetDefined', 
                    'void', 
                    [param('uint8_t', 'txmcssetdefined')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8383,6 +9267,39 @@
                    [param('ns3::HtCapabilities const &', 'value')])
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3IpL4Protocol_methods(root_module, cls):
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
     cls.add_constructor([])
@@ -8515,6 +9432,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -8530,6 +9452,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -8545,6 +9472,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -8595,6 +9532,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -8721,10 +9663,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -8749,6 +9691,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -8838,6 +9784,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -8853,6 +9804,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -8880,7 +9836,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -8939,6 +9901,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -9274,8 +10241,13 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsSolicitedMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsSolicitedMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
+    cls.add_method('IsUp', 
                    'bool', 
                    [], 
                    is_const=True)
@@ -9287,10 +10259,10 @@
     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]
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'hdr'), param('ns3::Ipv6Address', 'dest')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
     cls.add_method('SetBaseReachableTime', 
                    'void', 
@@ -9335,6 +10307,10 @@
     cls.add_method('SetState', 
                    'void', 
                    [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -9469,7 +10445,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -9596,6 +10572,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -9675,6 +10737,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -10049,6 +11116,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3Ssid_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## ssid.h (module 'wifi'): ns3::Ssid::Ssid(ns3::Ssid const & arg0) [copy constructor]
@@ -10154,10 +11242,10 @@
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
                    [])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId socketTypeId) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId congestionTypeId) [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
-                   [param('ns3::TypeId', 'socketTypeId')])
+                   [param('ns3::TypeId', 'congestionTypeId')])
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ipv4EndPoint * ns3::TcpL4Protocol::Allocate() [member function]
     cls.add_method('Allocate', 
                    'ns3::Ipv4EndPoint *', 
@@ -10922,6 +12010,40 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -11040,6 +12162,117 @@
     cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
     return
 
+def register_Ns3DsrDsrErrorBuffEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry::DsrErrorBuffEntry(ns3::dsr::DsrErrorBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrErrorBuffEntry const &', 'arg0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry::DsrErrorBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrErrorBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrErrorBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint8_t ns3::dsr::DsrErrorBuffEntry::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
+                   'void', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    cls.add_method('SetPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetProtocol(uint8_t p) [member function]
+    cls.add_method('SetProtocol', 
+                   'void', 
+                   [param('uint8_t', 'p')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 's')])
+    return
+
+def register_Ns3DsrDsrErrorBuffer_methods(root_module, cls):
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer::DsrErrorBuffer(ns3::dsr::DsrErrorBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrErrorBuffer const &', 'arg0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer::DsrErrorBuffer() [constructor]
+    cls.add_constructor([])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrErrorBuffEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrErrorBuffEntry &', 'entry')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::DropPacketForErrLink(ns3::Ipv4Address source, ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('DropPacketForErrLink', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Enqueue(ns3::dsr::DsrErrorBuffEntry & entry) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrErrorBuffEntry &', 'entry')])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Find(ns3::Ipv4Address dst) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-errorbuff.h (module 'dsr'): std::vector<ns3::dsr::DsrErrorBuffEntry, std::allocator<ns3::dsr::DsrErrorBuffEntry> > & ns3::dsr::DsrErrorBuffer::GetBuffer() [member function]
+    cls.add_method('GetBuffer', 
+                   'std::vector< ns3::dsr::DsrErrorBuffEntry > &', 
+                   [])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrErrorBuffer::GetErrorBufferTimeout() const [member function]
+    cls.add_method('GetErrorBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrErrorBuffer::GetMaxQueueLen() const [member function]
+    cls.add_method('GetMaxQueueLen', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrErrorBuffer::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::SetErrorBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetErrorBufferTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    return
+
 def register_Ns3DsrDsrFsHeader_methods(root_module, cls):
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrFsHeader::DsrFsHeader(ns3::dsr::DsrFsHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrFsHeader const &', 'arg0')])
@@ -11122,93 +12355,291 @@
                    [param('uint16_t', 'sourceId')])
     return
 
-def register_Ns3DsrDsrNetworkQueue_methods(root_module, cls):
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(ns3::dsr::DsrNetworkQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrNetworkQueue const &', 'arg0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue() [constructor]
+def register_Ns3DsrDsrGraReply_methods(root_module, cls):
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply::DsrGraReply(ns3::dsr::DsrGraReply const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrGraReply const &', 'arg0')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply::DsrGraReply() [constructor]
     cls.add_constructor([])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(uint32_t maxLen, ns3::Time maxDelay) [constructor]
-    cls.add_constructor([param('uint32_t', 'maxLen'), param('ns3::Time', 'maxDelay')])
-    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Dequeue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
-    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Enqueue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
-    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', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::DsrGraReply::AddEntry(ns3::dsr::GraReplyEntry & graTableEntry) [member function]
+    cls.add_method('AddEntry', 
                    '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', 
+                   [param('ns3::dsr::GraReplyEntry &', 'graTableEntry')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::Clear() [member function]
+    cls.add_method('Clear', 
                    'void', 
                    [])
-    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueue::GetMaxNetworkDelay() const [member function]
-    cls.add_method('GetMaxNetworkDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetMaxNetworkSize() const [member function]
-    cls.add_method('GetMaxNetworkSize', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::DsrGraReply::FindAndUpdate(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, ns3::Time gratReplyHoldoff) [member function]
+    cls.add_method('FindAndUpdate', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('ns3::Time', 'gratReplyHoldoff')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): uint32_t ns3::dsr::DsrGraReply::GetGraTableSize() const [member function]
+    cls.add_method('GetGraTableSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): std::vector<ns3::dsr::DsrNetworkQueueEntry, std::allocator<ns3::dsr::DsrNetworkQueueEntry> > & ns3::dsr::DsrNetworkQueue::GetQueue() [member function]
-    cls.add_method('GetQueue', 
-                   'std::vector< ns3::dsr::DsrNetworkQueueEntry > &', 
-                   [])
-    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [])
-    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrGraReply::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxNetworkDelay', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::Purge() [member function]
+    cls.add_method('Purge', 
                    'void', 
-                   [param('ns3::Time', 'delay')])
-    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkSize(uint32_t maxSize) [member function]
-    cls.add_method('SetMaxNetworkSize', 
+                   [])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::SetGraTableSize(uint32_t g) [member function]
+    cls.add_method('SetGraTableSize', 
                    'void', 
-                   [param('uint32_t', 'maxSize')])
+                   [param('uint32_t', 'g')])
     return
 
-def register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::dsr::DsrNetworkQueueEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrNetworkQueueEntry const &', 'arg0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), ns3::Ptr<ns3::Ipv4Route> r=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('ns3::Ptr< ns3::Ipv4Route >', 'r', default_value='0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueueEntry::GetInsertedTimeStamp() const [member function]
-    cls.add_method('GetInsertedTimeStamp', 
+def register_Ns3DsrDsrLinkStab_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab::DsrLinkStab(ns3::dsr::DsrLinkStab const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrLinkStab const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab::DsrLinkStab(ns3::Time linkStab=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Time', 'linkStab', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrLinkStab::GetLinkStability() const [member function]
+    cls.add_method('GetLinkStability', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrNetworkQueueEntry::GetIpv4Route() const [member function]
-    cls.add_method('GetIpv4Route', 
-                   'ns3::Ptr< ns3::Ipv4Route >', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrLinkStab::Print() const [member function]
+    cls.add_method('Print', 
+                   'void', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetNextHopAddress() const [member function]
-    cls.add_method('GetNextHopAddress', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrLinkStab::SetLinkStability(ns3::Time linkStab) [member function]
+    cls.add_method('SetLinkStability', 
+                   'void', 
+                   [param('ns3::Time', 'linkStab')])
+    return
+
+def register_Ns3DsrDsrMaintainBuffEntry_methods(root_module, cls):
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry::DsrMaintainBuffEntry(ns3::dsr::DsrMaintainBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrMaintainBuffEntry const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry::DsrMaintainBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address us=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address dst=ns3::Ipv4Address(), uint16_t ackId=0, uint8_t segs=0, ns3::Time exp=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'us', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint16_t', 'ackId', default_value='0'), param('uint8_t', 'segs', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
+    ## dsr-maintain-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrMaintainBuffEntry::GetAckId() const [member function]
+    cls.add_method('GetAckId', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrNetworkQueueEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetDst() const [member function]
+    cls.add_method('GetDst', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetSourceAddress() const [member function]
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrMaintainBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetOurAdd() const [member function]
+    cls.add_method('GetOurAdd', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrMaintainBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft() const [member function]
+    cls.add_method('GetSegsLeft', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetSrc() const [member function]
+    cls.add_method('GetSrc', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetAckId(uint16_t ackId) [member function]
+    cls.add_method('SetAckId', 
+                   'void', 
+                   [param('uint16_t', 'ackId')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetDst(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetDst', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
+                   'void', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetOurAdd(ns3::Ipv4Address us) [member function]
+    cls.add_method('SetOurAdd', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'us')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    cls.add_method('SetPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetSegsLeft(uint8_t segs) [member function]
+    cls.add_method('SetSegsLeft', 
+                   'void', 
+                   [param('uint8_t', 'segs')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetSrc(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSrc', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 's')])
+    return
+
+def register_Ns3DsrDsrMaintainBuffer_methods(root_module, cls):
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer::DsrMaintainBuffer(ns3::dsr::DsrMaintainBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrMaintainBuffer const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer::DsrMaintainBuffer() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::AllEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('AllEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::DropPacketWithNextHop(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('DropPacketWithNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Enqueue(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Find(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrMaintainBuffer::GetMaintainBufferTimeout() const [member function]
+    cls.add_method('GetMaintainBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrMaintainBuffer::GetMaxQueueLen() const [member function]
+    cls.add_method('GetMaxQueueLen', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrMaintainBuffer::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::LinkEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('LinkEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::NetworkEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('NetworkEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::PromiscEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('PromiscEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::SetMaintainBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetMaintainBufferTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    return
+
+def register_Ns3DsrDsrNetworkQueue_methods(root_module, cls):
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(ns3::dsr::DsrNetworkQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNetworkQueue const &', 'arg0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue() [constructor]
+    cls.add_constructor([])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(uint32_t maxLen, ns3::Time maxDelay) [constructor]
+    cls.add_constructor([param('uint32_t', 'maxLen'), param('ns3::Time', 'maxDelay')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Dequeue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Enqueue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    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', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueue::GetMaxNetworkDelay() const [member function]
+    cls.add_method('GetMaxNetworkDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetMaxNetworkSize() const [member function]
+    cls.add_method('GetMaxNetworkSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): std::vector<ns3::dsr::DsrNetworkQueueEntry, std::allocator<ns3::dsr::DsrNetworkQueueEntry> > & ns3::dsr::DsrNetworkQueue::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'std::vector< ns3::dsr::DsrNetworkQueueEntry > &', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxNetworkDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxNetworkSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')])
+    return
+
+def register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::dsr::DsrNetworkQueueEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNetworkQueueEntry const &', 'arg0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), ns3::Ptr<ns3::Ipv4Route> r=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('ns3::Ptr< ns3::Ipv4Route >', 'r', default_value='0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueueEntry::GetInsertedTimeStamp() const [member function]
+    cls.add_method('GetInsertedTimeStamp', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrNetworkQueueEntry::GetIpv4Route() const [member function]
+    cls.add_method('GetIpv4Route', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetNextHopAddress() const [member function]
+    cls.add_method('GetNextHopAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrNetworkQueueEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetSourceAddress() const [member function]
     cls.add_method('GetSourceAddress', 
                    'ns3::Ipv4Address', 
                    [], 
@@ -11235,6 +12666,22 @@
                    [param('ns3::Ipv4Address', 'addr')])
     return
 
+def register_Ns3DsrDsrNodeStab_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab::DsrNodeStab(ns3::dsr::DsrNodeStab const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNodeStab const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab::DsrNodeStab(ns3::Time nodeStab=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Time', 'nodeStab', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrNodeStab::GetNodeStability() const [member function]
+    cls.add_method('GetNodeStability', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrNodeStab::SetNodeStability(ns3::Time nodeStab) [member function]
+    cls.add_method('SetNodeStability', 
+                   'void', 
+                   [param('ns3::Time', 'nodeStab')])
+    return
+
 def register_Ns3DsrDsrOptionField_methods(root_module, cls):
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrOptionField::DsrOptionField(ns3::dsr::DsrOptionField const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrOptionField const &', 'arg0')])
@@ -12000,1514 +13447,1189 @@
                    is_virtual=True)
     return
 
-def register_Ns3DsrDsrRouting_methods(root_module, cls):
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting(ns3::dsr::DsrRouting const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrRouting const &', 'arg0')])
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting() [constructor]
-    cls.add_constructor([])
-    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::AddAckReqHeader(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('AddAckReqHeader', 
+def register_Ns3DsrDsrPassiveBuffEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry::DsrPassiveBuffEntry(ns3::dsr::DsrPassiveBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrPassiveBuffEntry const &', 'arg0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry::DsrPassiveBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), uint16_t i=0, uint16_t f=0, uint8_t seg=0, ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0'), param('uint16_t', 'f', default_value='0'), param('uint8_t', 'seg', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrPassiveBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrPassiveBuffEntry::GetFragmentOffset() const [member function]
+    cls.add_method('GetFragmentOffset', 
                    'uint16_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute(ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('AddRoute', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address source) [member function]
-    cls.add_method('AddRoute_Link', 
-                   'bool', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): int64_t ns3::dsr::DsrRouting::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CallCancelPacketTimer(uint16_t ackId, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst) [member function]
-    cls.add_method('CallCancelPacketTimer', 
-                   'void', 
-                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelLinkPacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelLinkPacketTimer', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrPassiveBuffEntry::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrPassiveBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrPassiveBuffEntry::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrPassiveBuffEntry::GetSegsLeft() const [member function]
+    cls.add_method('GetSegsLeft', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
                    'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelNetworkPacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelNetworkPacketTimer', 
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
                    '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', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetFragmentOffset(uint16_t f) [member function]
+    cls.add_method('SetFragmentOffset', 
                    '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', 
+                   [param('uint16_t', 'f')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetIdentification(uint16_t i) [member function]
+    cls.add_method('SetIdentification', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPassivePacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelPassivePacketTimer', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::CancelPassiveTimer(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft) [member function]
-    cls.add_method('CancelPassiveTimer', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelRreqTimer(ns3::Ipv4Address dst, bool isRemove) [member function]
-    cls.add_method('CancelRreqTimer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'dst'), param('bool', 'isRemove')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CheckSendBuffer() [member function]
-    cls.add_method('CheckSendBuffer', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ConnectCallbacks() [member function]
-    cls.add_method('ConnectCallbacks', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
-    cls.add_method('DeleteAllRoutesIncludeLink', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
-    cls.add_method('FindSourceEntry', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardErrPacket(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ForwardErrPacket', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardPacket(ns3::Ptr<ns3::Packet const> packet, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ipv4Address targetAddress, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ForwardPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'targetAddress'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::dsr::DsrRouting::GetElementsFromContext(std::string context) [member function]
-    cls.add_method('GetElementsFromContext', 
-                   'std::vector< std::string >', 
-                   [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
-    cls.add_method('GetIDfromIP', 
-                   'uint16_t', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromID(uint16_t id) [member function]
-    cls.add_method('GetIPfromID', 
-                   'ns3::Ipv4Address', 
-                   [param('uint16_t', 'id')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromMAC(ns3::Mac48Address address) [member function]
-    cls.add_method('GetIPfromMAC', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::NetDevice> ns3::dsr::DsrRouting::GetNetDeviceFromContext(std::string context) [member function]
-    cls.add_method('GetNetDeviceFromContext', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNodeWithAddress(ns3::Ipv4Address ipv4Address) [member function]
-    cls.add_method('GetNodeWithAddress', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [param('ns3::Ipv4Address', 'ipv4Address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrOptions> ns3::dsr::DsrRouting::GetOption(int optionNumber) [member function]
-    cls.add_method('GetOption', 
-                   'ns3::Ptr< ns3::dsr::DsrOptions >', 
-                   [param('int', 'optionNumber')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::PassiveBuffer> ns3::dsr::DsrRouting::GetPassiveBuffer() const [member function]
-    cls.add_method('GetPassiveBuffer', 
-                   'ns3::Ptr< ns3::dsr::PassiveBuffer >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): uint32_t ns3::dsr::DsrRouting::GetPriority(ns3::dsr::DsrMessageType messageType) [member function]
-    cls.add_method('GetPriority', 
-                   'uint32_t', 
-                   [param('ns3::dsr::DsrMessageType', 'messageType')])
-    ## dsr-routing.h (module 'dsr'): int ns3::dsr::DsrRouting::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::RreqTable> ns3::dsr::DsrRouting::GetRequestTable() const [member function]
-    cls.add_method('GetRequestTable', 
-                   'ns3::Ptr< ns3::dsr::RreqTable >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::RouteCache> ns3::dsr::DsrRouting::GetRouteCache() const [member function]
-    cls.add_method('GetRouteCache', 
-                   'ns3::Ptr< ns3::dsr::RouteCache >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouting::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::IncreaseRetransTimer() [member function]
-    cls.add_method('IncreaseRetransTimer', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Insert(ns3::Ptr<ns3::dsr::DsrOptions> option) [member function]
-    cls.add_method('Insert', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::DsrOptions >', 'option')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::IsLinkCache() [member function]
-    cls.add_method('IsLinkCache', 
-                   'bool', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::LinkScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('LinkScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::LookupRoute(ns3::Ipv4Address id, ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('LookupRoute', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NetworkScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('NetworkScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PacketNewRoute(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
-    cls.add_method('PacketNewRoute', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::PassiveEntryCheck(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft, uint16_t fragmentOffset, uint16_t identification, bool saveEntry) [member function]
-    cls.add_method('PassiveEntryCheck', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft'), param('uint16_t', 'fragmentOffset'), param('uint16_t', 'identification'), param('bool', 'saveEntry')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PassiveScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('PassiveScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
-    cls.add_method('PrintVector', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PriorityScheduler(uint32_t priority, bool continueWithFirst) [member function]
-    cls.add_method('PriorityScheduler', 
-                   'void', 
-                   [param('uint32_t', 'priority'), param('bool', 'continueWithFirst')])
-    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::Process(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address dst, uint8_t * nextHeader, uint8_t protocol, bool & isDropped) [member function]
-    cls.add_method('Process', 
-                   'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'dst'), param('uint8_t *', 'nextHeader'), param('uint8_t', 'protocol'), param('bool &', 'isDropped')])
-    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
-    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::RouteRequestTimerExpire(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, uint32_t requestId, uint8_t protocol) [member function]
-    cls.add_method('RouteRequestTimerExpire', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SalvagePacket(ns3::Ptr<ns3::Packet const> packet, ns3::Ipv4Address source, ns3::Ipv4Address dst, uint8_t protocol) [member function]
-    cls.add_method('SalvagePacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'dst'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleCachedReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ptr<ns3::Ipv4Route> route, double hops) [member function]
-    cls.add_method('ScheduleCachedReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::Ipv4Route >', 'route'), param('double', 'hops')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInitialReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ScheduleInitialReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInterRequest(ns3::Ptr<ns3::Packet> packet) [member function]
-    cls.add_method('ScheduleInterRequest', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleLinkPacketRetry(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('ScheduleLinkPacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry(ns3::dsr::MaintainBuffEntry & mb, bool isFirst, uint8_t protocol) [member function]
-    cls.add_method('ScheduleNetworkPacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('bool', 'isFirst'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SchedulePassivePacketRetry(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('SchedulePassivePacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleRreqRetry(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, bool nonProp, uint32_t requestId, uint8_t protocol) [member function]
-    cls.add_method('ScheduleRreqRetry', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('bool', 'nonProp'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Scheduler(uint32_t priority) [member function]
-    cls.add_method('Scheduler', 
-                   'void', 
-                   [param('uint32_t', 'priority')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::SearchNextHop(ns3::Ipv4Address ipv4Address, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
-    cls.add_method('SearchNextHop', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Address', 'ipv4Address'), param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendAck(uint16_t ackId, ns3::Ipv4Address destination, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('SendAck', 
-                   'void', 
-                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendBuffTimerExpire() [member function]
-    cls.add_method('SendBuffTimerExpire', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendErrorRequest(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, uint8_t protocol) [member function]
-    cls.add_method('SendErrorRequest', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendGratuitousReply(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & nodeList, uint8_t protocol) [member function]
-    cls.add_method('SendGratuitousReply', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('std::vector< ns3::Ipv4Address > &', 'nodeList'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendInitialRequest(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
-    cls.add_method('SendInitialRequest', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacket(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacketFromBuffer(ns3::dsr::DsrOptionSRHeader const & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
-    cls.add_method('SendPacketFromBuffer', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionSRHeader const &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::SendRealDown(ns3::dsr::DsrNetworkQueueEntry & newEntry) [member function]
-    cls.add_method('SendRealDown', 
-                   'bool', 
-                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'newEntry')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('SendReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequest(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source) [member function]
-    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 unreachNode, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
-    cls.add_method('SendUnreachError', 
-                   'void', 
-                   [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', 
-                   [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 >', 'callback')], 
-                   is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::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> callback) [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 >', 'callback')], 
-                   is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetPassiveBuffer(ns3::Ptr<ns3::dsr::PassiveBuffer> r) [member function]
-    cls.add_method('SetPassiveBuffer', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::PassiveBuffer >', 'r')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRequestTable(ns3::Ptr<ns3::dsr::RreqTable> r) [member function]
-    cls.add_method('SetRequestTable', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::RreqTable >', 'r')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrRouting::SetRoute(ns3::Ipv4Address nextHop, ns3::Ipv4Address srcAddress) [member function]
-    cls.add_method('SetRoute', 
-                   'ns3::Ptr< ns3::Ipv4Route >', 
-                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ipv4Address', 'srcAddress')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRouteCache(ns3::Ptr<ns3::dsr::RouteCache> r) [member function]
-    cls.add_method('SetRouteCache', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::RouteCache >', 'r')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
-    cls.add_method('UpdateRouteEntry', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
-    cls.add_method('UseExtends', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'rt')])
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::PROT_NUMBER [variable]
-    cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NotifyNewAggregate() [member function]
-    cls.add_method('NotifyNewAggregate', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3DsrDsrRoutingHeader_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader(ns3::dsr::DsrRoutingHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrRoutingHeader const &', 'arg0')])
-    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader() [constructor]
-    cls.add_constructor([])
-    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): ns3::TypeId ns3::dsr::DsrRoutingHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRoutingHeader::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    return
-
-def register_Ns3DsrErrorBuffEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry::ErrorBuffEntry(ns3::dsr::ErrorBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ErrorBuffEntry const &', 'arg0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry::ErrorBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::ErrorBuffEntry::GetExpireTime() const [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::ErrorBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint8_t ns3::dsr::ErrorBuffEntry::GetProtocol() const [member function]
-    cls.add_method('GetProtocol', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
-                   'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+                   [param('uint16_t', 'i')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
     cls.add_method('SetNextHop', 
                    'void', 
                    [param('ns3::Ipv4Address', 'n')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('SetPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetProtocol(uint8_t p) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetProtocol(uint8_t p) [member function]
     cls.add_method('SetProtocol', 
                    'void', 
                    [param('uint8_t', 'p')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetSegsLeft(uint8_t seg) [member function]
+    cls.add_method('SetSegsLeft', 
+                   'void', 
+                   [param('uint8_t', 'seg')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
     cls.add_method('SetSource', 
                    'void', 
                    [param('ns3::Ipv4Address', 's')])
     return
 
-def register_Ns3DsrErrorBuffer_methods(root_module, cls):
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer::ErrorBuffer(ns3::dsr::ErrorBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ErrorBuffer const &', 'arg0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer::ErrorBuffer() [constructor]
+def register_Ns3DsrDsrPassiveBuffer_methods(root_module, cls):
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer::DsrPassiveBuffer(ns3::dsr::DsrPassiveBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrPassiveBuffer const &', 'arg0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer::DsrPassiveBuffer() [constructor]
     cls.add_constructor([])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::ErrorBuffEntry & entry) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::AllEqual(ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
+    cls.add_method('AllEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
     cls.add_method('Dequeue', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::ErrorBuffEntry &', 'entry')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::DropPacketForErrLink(ns3::Ipv4Address source, ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('DropPacketForErrLink', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Enqueue(ns3::dsr::ErrorBuffEntry & entry) [member function]
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Enqueue(ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::dsr::ErrorBuffEntry &', 'entry')])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Find(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Find(ns3::Ipv4Address dst) [member function]
     cls.add_method('Find', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-errorbuff.h (module 'dsr'): std::vector<ns3::dsr::ErrorBuffEntry, std::allocator<ns3::dsr::ErrorBuffEntry> > & ns3::dsr::ErrorBuffer::GetBuffer() [member function]
-    cls.add_method('GetBuffer', 
-                   'std::vector< ns3::dsr::ErrorBuffEntry > &', 
-                   [])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::ErrorBuffer::GetErrorBufferTimeout() const [member function]
-    cls.add_method('GetErrorBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::ErrorBuffer::GetMaxQueueLen() const [member function]
+    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrPassiveBuffer::GetMaxQueueLen() const [member function]
     cls.add_method('GetMaxQueueLen', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::ErrorBuffer::GetSize() [member function]
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrPassiveBuffer::GetPassiveBufferTimeout() const [member function]
+    cls.add_method('GetPassiveBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrPassiveBuffer::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::SetErrorBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetErrorBufferTimeout', 
-                   'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
-                   'void', 
-                   [param('uint32_t', 'len')])
-    return
-
-def register_Ns3DsrGraReply_methods(root_module, cls):
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply::GraReply(ns3::dsr::GraReply const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::GraReply const &', 'arg0')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply::GraReply() [constructor]
-    cls.add_constructor([])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::GraReply::AddEntry(ns3::dsr::GraReplyEntry & graTableEntry) [member function]
-    cls.add_method('AddEntry', 
-                   'bool', 
-                   [param('ns3::dsr::GraReplyEntry &', 'graTableEntry')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::GraReply::FindAndUpdate(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, ns3::Time gratReplyHoldoff) [member function]
-    cls.add_method('FindAndUpdate', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('ns3::Time', 'gratReplyHoldoff')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): uint32_t ns3::dsr::GraReply::GetGraTableSize() const [member function]
-    cls.add_method('GetGraTableSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::GraReply::GetTypeId() [member function]
+    ## dsr-passive-buff.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrPassiveBuffer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::Purge() [member function]
-    cls.add_method('Purge', 
-                   'void', 
-                   [])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::SetGraTableSize(uint32_t g) [member function]
-    cls.add_method('SetGraTableSize', 
-                   'void', 
-                   [param('uint32_t', 'g')])
-    return
-
-def register_Ns3DsrGraReplyEntry_methods(root_module, cls):
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::dsr::GraReplyEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::GraReplyEntry const &', 'arg0')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::Ipv4Address t, ns3::Ipv4Address f, ns3::Time h) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 't'), param('ns3::Ipv4Address', 'f'), param('ns3::Time', 'h')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_gratReplyHoldoff [variable]
-    cls.add_instance_attribute('m_gratReplyHoldoff', 'ns3::Time', is_const=False)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_hearFrom [variable]
-    cls.add_instance_attribute('m_hearFrom', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_replyTo [variable]
-    cls.add_instance_attribute('m_replyTo', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLink_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::dsr::Link const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::Link const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::Ipv4Address ip1, ns3::Ipv4Address ip2) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip1'), param('ns3::Ipv4Address', 'ip2')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::Link::Print() const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_high [variable]
-    cls.add_instance_attribute('m_high', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_low [variable]
-    cls.add_instance_attribute('m_low', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLinkKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey() [constructor]
-    cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey(ns3::dsr::LinkKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::LinkKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_nextHop [variable]
-    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_ourAdd [variable]
-    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLinkStab_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab::LinkStab(ns3::dsr::LinkStab const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::LinkStab const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab::LinkStab(ns3::Time linkStab=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Time', 'linkStab', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::LinkStab::GetLinkStability() const [member function]
-    cls.add_method('GetLinkStability', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::LinkStab::Print() const [member function]
-    cls.add_method('Print', 
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
                    'void', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::LinkStab::SetLinkStability(ns3::Time linkStab) [member function]
-    cls.add_method('SetLinkStability', 
+                   [param('uint32_t', 'len')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffer::SetPassiveBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetPassiveBufferTimeout', 
                    'void', 
-                   [param('ns3::Time', 'linkStab')])
+                   [param('ns3::Time', 't')])
     return
 
-def register_Ns3DsrMaintainBuffEntry_methods(root_module, cls):
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry::MaintainBuffEntry(ns3::dsr::MaintainBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::MaintainBuffEntry const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry::MaintainBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address us=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address dst=ns3::Ipv4Address(), uint16_t ackId=0, uint8_t segs=0, ns3::Time exp=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'us', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint16_t', 'ackId', default_value='0'), param('uint8_t', 'segs', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
-    ## dsr-maintain-buff.h (module 'dsr'): uint16_t ns3::dsr::MaintainBuffEntry::GetAckId() const [member function]
-    cls.add_method('GetAckId', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetDst() const [member function]
-    cls.add_method('GetDst', 
+def register_Ns3DsrDsrReceivedRreqEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry::DsrReceivedRreqEntry(ns3::dsr::DsrReceivedRreqEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrReceivedRreqEntry const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry::DsrReceivedRreqEntry(ns3::Ipv4Address d=ns3::Ipv4Address(), uint16_t i=0) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrReceivedRreqEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::MaintainBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Time ns3::dsr::DsrReceivedRreqEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetOurAdd() const [member function]
-    cls.add_method('GetOurAdd', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::MaintainBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint8_t ns3::dsr::MaintainBuffEntry::GetSegsLeft() const [member function]
-    cls.add_method('GetSegsLeft', 
-                   'uint8_t', 
+    ## dsr-rreq-table.h (module 'dsr'): uint16_t ns3::dsr::DsrReceivedRreqEntry::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetSrc() const [member function]
-    cls.add_method('GetSrc', 
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrReceivedRreqEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetAckId(uint16_t ackId) [member function]
-    cls.add_method('SetAckId', 
-                   'void', 
-                   [param('uint16_t', 'ackId')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetDst(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetDst', 
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetNextHop', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetOurAdd(ns3::Ipv4Address us) [member function]
-    cls.add_method('SetOurAdd', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'us')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
-    cls.add_method('SetPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetSegsLeft(uint8_t segs) [member function]
-    cls.add_method('SetSegsLeft', 
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetIdentification(uint16_t i) [member function]
+    cls.add_method('SetIdentification', 
                    'void', 
-                   [param('uint8_t', 'segs')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetSrc(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSrc', 
+                   [param('uint16_t', 'i')])
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetSource(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSource', 
                    'void', 
                    [param('ns3::Ipv4Address', 's')])
     return
 
-def register_Ns3DsrMaintainBuffer_methods(root_module, cls):
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer::MaintainBuffer(ns3::dsr::MaintainBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::MaintainBuffer const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer::MaintainBuffer() [constructor]
+def register_Ns3DsrDsrRouteCache_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::DsrRouteCache(ns3::dsr::DsrRouteCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCache const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::DsrRouteCache() [constructor]
     cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::AllEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('AllEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::DropPacketWithNextHop(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('DropPacketWithNextHop', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::AddArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    cls.add_method('AddArpCache', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Enqueue(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('Enqueue', 
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::AddNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Ipv4Address ownAddress, ns3::Time expire) [member function]
+    cls.add_method('AddNeighbor', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Ipv4Address', 'ownAddress'), param('ns3::Time', 'expire')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::AddRoute(ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('AddRoute', 
                    'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Find(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('Find', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address node) [member function]
+    cls.add_method('AddRoute_Link', 
                    'bool', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'node')])
+    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::DsrRouteCache::CheckUniqueAckId(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('CheckUniqueAckId', 
+                   'uint16_t', 
                    [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::MaintainBuffer::GetMaintainBufferTimeout() const [member function]
-    cls.add_method('GetMaintainBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::MaintainBuffer::GetMaxQueueLen() const [member function]
-    cls.add_method('GetMaxQueueLen', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::MaintainBuffer::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
                    [])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::LinkEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('LinkEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::NetworkEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('NetworkEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::PromiscEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('PromiscEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::SetMaintainBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetMaintainBufferTimeout', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ClearMac() [member function]
+    cls.add_method('ClearMac', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::DelArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    cls.add_method('DelArpCache', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    return
-
-def register_Ns3DsrNetworkKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey() [constructor]
-    cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey(ns3::dsr::NetworkKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::NetworkKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ackId [variable]
-    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_nextHop [variable]
-    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ourAdd [variable]
-    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrNodeStab_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab::NodeStab(ns3::dsr::NodeStab const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::NodeStab const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab::NodeStab(ns3::Time nodeStab=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Time', 'nodeStab', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::NodeStab::GetNodeStability() const [member function]
-    cls.add_method('GetNodeStability', 
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
+    cls.add_method('DeleteAllRoutesIncludeLink', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::DeleteRoute(ns3::Ipv4Address dst) [member function]
+    cls.add_method('DeleteRoute', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::FindSameRoute(ns3::dsr::DsrRouteCacheEntry & rt, std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > & rtVector) [member function]
+    cls.add_method('FindSameRoute', 
+                   'bool', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt'), param('std::list< ns3::dsr::DsrRouteCacheEntry > &', 'rtVector')])
+    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::DsrRouteCache::GetAckSize() [member function]
+    cls.add_method('GetAckSize', 
+                   'uint16_t', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetBadLinkLifetime() const [member function]
+    cls.add_method('GetBadLinkLifetime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::NodeStab::SetNodeStability(ns3::Time nodeStab) [member function]
-    cls.add_method('SetNodeStability', 
-                   'void', 
-                   [param('ns3::Time', 'nodeStab')])
-    return
-
-def register_Ns3DsrPassiveBuffEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry::PassiveBuffEntry(ns3::dsr::PassiveBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveBuffEntry const &', 'arg0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry::PassiveBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), uint16_t i=0, uint16_t f=0, uint8_t seg=0, ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0'), param('uint16_t', 'f', default_value='0'), param('uint8_t', 'seg', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetCacheTimeout() const [member function]
+    cls.add_method('GetCacheTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::DsrRouteCache::GetCallback() const [member function]
+    cls.add_method('GetCallback', 
+                   'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::PassiveBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
+                   [param('ns3::Ipv4Address', 'addr')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetInitStability() const [member function]
+    cls.add_method('GetInitStability', 
+                   'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::PassiveBuffEntry::GetFragmentOffset() const [member function]
-    cls.add_method('GetFragmentOffset', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::DsrRouteCache::GetMaxCacheLen() const [member function]
+    cls.add_method('GetMaxCacheLen', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::PassiveBuffEntry::GetIdentification() const [member function]
-    cls.add_method('GetIdentification', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::DsrRouteCache::GetMaxEntriesEachDst() const [member function]
+    cls.add_method('GetMaxEntriesEachDst', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetMinLifeTime() const [member function]
+    cls.add_method('GetMinLifeTime', 
+                   'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::PassiveBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
+    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::DsrRouteCache::GetStabilityDecrFactor() const [member function]
+    cls.add_method('GetStabilityDecrFactor', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::PassiveBuffEntry::GetProtocol() const [member function]
-    cls.add_method('GetProtocol', 
-                   'uint8_t', 
+    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::DsrRouteCache::GetStabilityIncrFactor() const [member function]
+    cls.add_method('GetStabilityIncrFactor', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::PassiveBuffEntry::GetSegsLeft() const [member function]
-    cls.add_method('GetSegsLeft', 
-                   'uint8_t', 
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::GetSubRoute() const [member function]
+    cls.add_method('GetSubRoute', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::DsrRouteCache::GetTxErrorCallback() const [member function]
+    cls.add_method('GetTxErrorCallback', 
+                   'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
+    ## dsr-rcache.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouteCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetUseExtends() const [member function]
+    cls.add_method('GetUseExtends', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::IsLinkCache() [member function]
+    cls.add_method('IsLinkCache', 
+                   'bool', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::IsNeighbor(ns3::Ipv4Address addr) [member function]
+    cls.add_method('IsNeighbor', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'addr')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Mac48Address ns3::dsr::DsrRouteCache::LookupMacAddress(ns3::Ipv4Address arg0) [member function]
+    cls.add_method('LookupMacAddress', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::LookupRoute(ns3::Ipv4Address id, ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('LookupRoute', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Print(std::ostream & os) [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
+                   [param('std::ostream &', 'os')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PrintRouteVector(std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > route) [member function]
+    cls.add_method('PrintRouteVector', 
                    'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetFragmentOffset(uint16_t f) [member function]
-    cls.add_method('SetFragmentOffset', 
+                   [param('std::list< ns3::dsr::DsrRouteCacheEntry >', 'route')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+    cls.add_method('PrintVector', 
                    'void', 
-                   [param('uint16_t', 'f')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetIdentification(uint16_t i) [member function]
-    cls.add_method('SetIdentification', 
+                   [param('std::vector< ns3::Ipv4Address > &', 'vec')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ProcessTxError(ns3::WifiMacHeader const & arg0) [member function]
+    cls.add_method('ProcessTxError', 
                    'void', 
-                   [param('uint16_t', 'i')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetNextHop', 
+                   [param('ns3::WifiMacHeader const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Purge() [member function]
+    cls.add_method('Purge', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
-    cls.add_method('SetPacket', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PurgeLinkNode() [member function]
+    cls.add_method('PurgeLinkNode', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetProtocol(uint8_t p) [member function]
-    cls.add_method('SetProtocol', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PurgeMac() [member function]
+    cls.add_method('PurgeMac', 
                    'void', 
-                   [param('uint8_t', 'p')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetSegsLeft(uint8_t seg) [member function]
-    cls.add_method('SetSegsLeft', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::RebuildBestRouteTable(ns3::Ipv4Address source) [member function]
+    cls.add_method('RebuildBestRouteTable', 
                    'void', 
-                   [param('uint8_t', 'seg')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSource', 
+                   [param('ns3::Ipv4Address', 'source')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::RemoveLastEntry(std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > & rtVector) [member function]
+    cls.add_method('RemoveLastEntry', 
+                   'void', 
+                   [param('std::list< ns3::dsr::DsrRouteCacheEntry > &', 'rtVector')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ScheduleTimer() [member function]
+    cls.add_method('ScheduleTimer', 
                    'void', 
-                   [param('ns3::Ipv4Address', 's')])
-    return
-
-def register_Ns3DsrPassiveBuffer_methods(root_module, cls):
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer::PassiveBuffer(ns3::dsr::PassiveBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveBuffer const &', 'arg0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer::PassiveBuffer() [constructor]
-    cls.add_constructor([])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::AllEqual(ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('AllEqual', 
-                   'bool', 
-                   [param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Enqueue(ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('Enqueue', 
-                   'bool', 
-                   [param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Find(ns3::Ipv4Address dst) [member function]
-    cls.add_method('Find', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::PassiveBuffer::GetMaxQueueLen() const [member function]
-    cls.add_method('GetMaxQueueLen', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::PassiveBuffer::GetPassiveBufferTimeout() const [member function]
-    cls.add_method('GetPassiveBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::PassiveBuffer::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
                    [])
-    ## dsr-passive-buff.h (module 'dsr'): static ns3::TypeId ns3::dsr::PassiveBuffer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetBadLinkLifetime(ns3::Time t) [member function]
+    cls.add_method('SetBadLinkLifetime', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffer::SetPassiveBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetPassiveBufferTimeout', 
+                   [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCacheTimeout(ns3::Time t) [member function]
+    cls.add_method('SetCacheTimeout', 
                    'void', 
                    [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCacheType(std::string type) [member function]
+    cls.add_method('SetCacheType', 
+                   'void', 
+                   [param('std::string', 'type')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetInitStability(ns3::Time initStability) [member function]
+    cls.add_method('SetInitStability', 
+                   'void', 
+                   [param('ns3::Time', 'initStability')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMaxCacheLen(uint32_t len) [member function]
+    cls.add_method('SetMaxCacheLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMaxEntriesEachDst(uint32_t entries) [member function]
+    cls.add_method('SetMaxEntriesEachDst', 
+                   'void', 
+                   [param('uint32_t', 'entries')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMinLifeTime(ns3::Time minLifeTime) [member function]
+    cls.add_method('SetMinLifeTime', 
+                   'void', 
+                   [param('ns3::Time', 'minLifeTime')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetStabilityDecrFactor(uint64_t decrFactor) [member function]
+    cls.add_method('SetStabilityDecrFactor', 
+                   'void', 
+                   [param('uint64_t', 'decrFactor')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetStabilityIncrFactor(uint64_t incrFactor) [member function]
+    cls.add_method('SetStabilityIncrFactor', 
+                   'void', 
+                   [param('uint64_t', 'incrFactor')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetSubRoute(bool subRoute) [member function]
+    cls.add_method('SetSubRoute', 
+                   'void', 
+                   [param('bool', 'subRoute')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetUseExtends(ns3::Time useExtends) [member function]
+    cls.add_method('SetUseExtends', 
+                   'void', 
+                   [param('ns3::Time', 'useExtends')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UpdateNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Time expire) [member function]
+    cls.add_method('UpdateNeighbor', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Time', 'expire')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UpdateNetGraph() [member function]
+    cls.add_method('UpdateNetGraph', 
+                   'void', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
+    cls.add_method('UpdateRouteEntry', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
+    cls.add_method('UseExtends', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_arp [variable]
+    cls.add_instance_attribute('m_arp', 'std::vector< ns3::Ptr< ns3::ArpCache > >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_delay [variable]
+    cls.add_instance_attribute('m_delay', 'ns3::Time', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_handleLinkFailure [variable]
+    cls.add_instance_attribute('m_handleLinkFailure', 'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_nb [variable]
+    cls.add_instance_attribute('m_nb', 'std::vector< ns3::dsr::DsrRouteCache::Neighbor >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_ntimer [variable]
+    cls.add_instance_attribute('m_ntimer', 'ns3::Timer', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_txErrorCallback [variable]
+    cls.add_instance_attribute('m_txErrorCallback', 'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     return
 
-def register_Ns3DsrPassiveKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey() [constructor]
+def register_Ns3DsrDsrRouteCacheNeighbor_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor(ns3::dsr::DsrRouteCache::Neighbor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCache::Neighbor const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor(ns3::Ipv4Address ip, ns3::Mac48Address mac, ns3::Time t) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('ns3::Mac48Address', 'mac'), param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor() [constructor]
     cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey(ns3::dsr::PassiveKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_ackId [variable]
-    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_segsLeft [variable]
-    cls.add_instance_attribute('m_segsLeft', 'uint8_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::close [variable]
+    cls.add_instance_attribute('close', 'bool', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_expireTime [variable]
+    cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_hardwareAddress [variable]
+    cls.add_instance_attribute('m_hardwareAddress', 'ns3::Mac48Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_neighborAddress [variable]
+    cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
     return
 
-def register_Ns3DsrReceivedRreqEntry_methods(root_module, cls):
+def register_Ns3DsrDsrRouteCacheEntry_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry::ReceivedRreqEntry(ns3::dsr::ReceivedRreqEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ReceivedRreqEntry const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry::ReceivedRreqEntry(ns3::Ipv4Address d=ns3::Ipv4Address(), uint16_t i=0) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ReceivedRreqEntry::GetDestination() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry::DsrRouteCacheEntry(ns3::dsr::DsrRouteCacheEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCacheEntry const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry::DsrRouteCacheEntry(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > const & ip=std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >(), ns3::Ipv4Address dst=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('std::vector< ns3::Ipv4Address > const &', 'ip', default_value='std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCacheEntry::GetBlacklistTimeout() const [member function]
+    cls.add_method('GetBlacklistTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouteCacheEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Time ns3::dsr::ReceivedRreqEntry::GetExpireTime() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCacheEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint16_t ns3::dsr::ReceivedRreqEntry::GetIdentification() const [member function]
-    cls.add_method('GetIdentification', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > ns3::dsr::DsrRouteCacheEntry::GetVector() const [member function]
+    cls.add_method('GetVector', 
+                   'std::vector< ns3::Ipv4Address >', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ReceivedRreqEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::Invalidate(ns3::Time badLinkLifetime) [member function]
+    cls.add_method('Invalidate', 
+                   'void', 
+                   [param('ns3::Time', 'badLinkLifetime')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCacheEntry::IsUnidirectional() const [member function]
+    cls.add_method('IsUnidirectional', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetBlacklistTimeout(ns3::Time t) [member function]
+    cls.add_method('SetBlacklistTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetDestination(ns3::Ipv4Address d) [member function]
     cls.add_method('SetDestination', 
                    'void', 
                    [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetExpireTime(ns3::Time exp) [member function]
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetIdentification(uint16_t i) [member function]
-    cls.add_method('SetIdentification', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetUnidirectional(bool u) [member function]
+    cls.add_method('SetUnidirectional', 
                    'void', 
-                   [param('uint16_t', 'i')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetSource(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSource', 
+                   [param('bool', 'u')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > v) [member function]
+    cls.add_method('SetVector', 
                    'void', 
-                   [param('ns3::Ipv4Address', 's')])
+                   [param('std::vector< ns3::Ipv4Address >', 'v')])
     return
 
-def register_Ns3DsrRouteCache_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::RouteCache(ns3::dsr::RouteCache const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCache const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::RouteCache() [constructor]
+def register_Ns3DsrDsrRouting_methods(root_module, cls):
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting(ns3::dsr::DsrRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouting const &', 'arg0')])
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting() [constructor]
     cls.add_constructor([])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::AddArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
-    cls.add_method('AddArpCache', 
+    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::AddAckReqHeader(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('AddAckReqHeader', 
+                   'uint16_t', 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute(ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('AddRoute', 
+                   'bool', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address source) [member function]
+    cls.add_method('AddRoute_Link', 
+                   'bool', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'source')])
+    ## dsr-routing.h (module 'dsr'): int64_t ns3::dsr::DsrRouting::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CallCancelPacketTimer(uint16_t ackId, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst) [member function]
+    cls.add_method('CallCancelPacketTimer', 
+                   'void', 
+                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelLinkPacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelLinkPacketTimer', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelNetworkPacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelNetworkPacketTimer', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::AddNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Ipv4Address ownAddress, ns3::Time expire) [member function]
-    cls.add_method('AddNeighbor', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketAllTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPacketAllTimer', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Ipv4Address', 'ownAddress'), param('ns3::Time', 'expire')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::AddRoute(ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('AddRoute', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address node) [member function]
-    cls.add_method('AddRoute_Link', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketTimerNextHop(ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('CancelPacketTimerNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPassivePacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPassivePacketTimer', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::CancelPassiveTimer(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft) [member function]
+    cls.add_method('CancelPassiveTimer', 
                    'bool', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::RouteCache::CheckUniqueAckId(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('CheckUniqueAckId', 
-                   'uint16_t', 
-                   [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Clear() [member function]
-    cls.add_method('Clear', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelRreqTimer(ns3::Ipv4Address dst, bool isRemove) [member function]
+    cls.add_method('CancelRreqTimer', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ClearMac() [member function]
-    cls.add_method('ClearMac', 
+                   [param('ns3::Ipv4Address', 'dst'), param('bool', 'isRemove')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CheckSendBuffer() [member function]
+    cls.add_method('CheckSendBuffer', 
                    'void', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DelArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
-    cls.add_method('DelArpCache', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ConnectCallbacks() [member function]
+    cls.add_method('ConnectCallbacks', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
+                   [])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
     cls.add_method('DeleteAllRoutesIncludeLink', 
                    'void', 
                    [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::DeleteRoute(ns3::Ipv4Address dst) [member function]
-    cls.add_method('DeleteRoute', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::FindSameRoute(ns3::dsr::RouteCacheEntry & rt, std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
-    cls.add_method('FindSameRoute', 
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
+    cls.add_method('FindSourceEntry', 
                    'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt'), param('std::list< ns3::dsr::RouteCacheEntry > &', 'rtVector')])
-    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::RouteCache::GetAckSize() [member function]
-    cls.add_method('GetAckSize', 
-                   'uint16_t', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetBadLinkLifetime() const [member function]
-    cls.add_method('GetBadLinkLifetime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetCacheTimeout() const [member function]
-    cls.add_method('GetCacheTimeout', 
-                   'ns3::Time', 
+                   [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardErrPacket(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ForwardErrPacket', 
+                   'void', 
+                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardPacket(ns3::Ptr<ns3::Packet const> packet, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ipv4Address targetAddress, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ForwardPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'targetAddress'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::RouteCache::GetCallback() const [member function]
-    cls.add_method('GetCallback', 
-                   'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
-                   [param('ns3::Ipv4Address', 'addr')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetInitStability() const [member function]
-    cls.add_method('GetInitStability', 
-                   'ns3::Time', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::dsr::DsrRouting::GetElementsFromContext(std::string context) [member function]
+    cls.add_method('GetElementsFromContext', 
+                   'std::vector< std::string >', 
+                   [param('std::string', 'context')])
+    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetIDfromIP', 
+                   'uint16_t', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromID(uint16_t id) [member function]
+    cls.add_method('GetIPfromID', 
+                   'ns3::Ipv4Address', 
+                   [param('uint16_t', 'id')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromMAC(ns3::Mac48Address address) [member function]
+    cls.add_method('GetIPfromMAC', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::NetDevice> ns3::dsr::DsrRouting::GetNetDeviceFromContext(std::string context) [member function]
+    cls.add_method('GetNetDeviceFromContext', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('std::string', 'context')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::RouteCache::GetMaxCacheLen() const [member function]
-    cls.add_method('GetMaxCacheLen', 
-                   'uint32_t', 
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNodeWithAddress(ns3::Ipv4Address ipv4Address) [member function]
+    cls.add_method('GetNodeWithAddress', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [param('ns3::Ipv4Address', 'ipv4Address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrOptions> ns3::dsr::DsrRouting::GetOption(int optionNumber) [member function]
+    cls.add_method('GetOption', 
+                   'ns3::Ptr< ns3::dsr::DsrOptions >', 
+                   [param('int', 'optionNumber')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrPassiveBuffer> ns3::dsr::DsrRouting::GetPassiveBuffer() const [member function]
+    cls.add_method('GetPassiveBuffer', 
+                   'ns3::Ptr< ns3::dsr::DsrPassiveBuffer >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::RouteCache::GetMaxEntriesEachDst() const [member function]
-    cls.add_method('GetMaxEntriesEachDst', 
+    ## dsr-routing.h (module 'dsr'): uint32_t ns3::dsr::DsrRouting::GetPriority(ns3::dsr::DsrMessageType messageType) [member function]
+    cls.add_method('GetPriority', 
                    'uint32_t', 
+                   [param('ns3::dsr::DsrMessageType', 'messageType')])
+    ## dsr-routing.h (module 'dsr'): int ns3::dsr::DsrRouting::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetMinLifeTime() const [member function]
-    cls.add_method('GetMinLifeTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::RouteCache::GetStabilityDecrFactor() const [member function]
-    cls.add_method('GetStabilityDecrFactor', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::RouteCache::GetStabilityIncrFactor() const [member function]
-    cls.add_method('GetStabilityIncrFactor', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::GetSubRoute() const [member function]
-    cls.add_method('GetSubRoute', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrRreqTable> ns3::dsr::DsrRouting::GetRequestTable() const [member function]
+    cls.add_method('GetRequestTable', 
+                   'ns3::Ptr< ns3::dsr::DsrRreqTable >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::RouteCache::GetTxErrorCallback() const [member function]
-    cls.add_method('GetTxErrorCallback', 
-                   'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrRouteCache> ns3::dsr::DsrRouting::GetRouteCache() const [member function]
+    cls.add_method('GetRouteCache', 
+                   'ns3::Ptr< ns3::dsr::DsrRouteCache >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): static ns3::TypeId ns3::dsr::RouteCache::GetTypeId() [member function]
+    ## dsr-routing.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouting::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetUseExtends() const [member function]
-    cls.add_method('GetUseExtends', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsLinkCache() [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::IncreaseRetransTimer() [member function]
+    cls.add_method('IncreaseRetransTimer', 
+                   'void', 
+                   [])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Insert(ns3::Ptr<ns3::dsr::DsrOptions> option) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::dsr::DsrOptions >', 'option')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::IsLinkCache() [member function]
     cls.add_method('IsLinkCache', 
                    'bool', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsNeighbor(ns3::Ipv4Address addr) [member function]
-    cls.add_method('IsNeighbor', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'addr')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Mac48Address ns3::dsr::RouteCache::LookupMacAddress(ns3::Ipv4Address arg0) [member function]
-    cls.add_method('LookupMacAddress', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv4Address', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::LookupRoute(ns3::Ipv4Address id, ns3::dsr::RouteCacheEntry & rt) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::LinkScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('LinkScheduleTimerExpire', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::LookupRoute(ns3::Ipv4Address id, ns3::dsr::DsrRouteCacheEntry & rt) [member function]
     cls.add_method('LookupRoute', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Print(std::ostream & os) [member function]
-    cls.add_method('Print', 
+                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NetworkScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('NetworkScheduleTimerExpire', 
                    'void', 
-                   [param('std::ostream &', 'os')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PrintRouteVector(std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > route) [member function]
-    cls.add_method('PrintRouteVector', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PacketNewRoute(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    cls.add_method('PacketNewRoute', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::PassiveEntryCheck(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft, uint16_t fragmentOffset, uint16_t identification, bool saveEntry) [member function]
+    cls.add_method('PassiveEntryCheck', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft'), param('uint16_t', 'fragmentOffset'), param('uint16_t', 'identification'), param('bool', 'saveEntry')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PassiveScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('PassiveScheduleTimerExpire', 
                    'void', 
-                   [param('std::list< ns3::dsr::RouteCacheEntry >', 'route')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
     cls.add_method('PrintVector', 
                    'void', 
                    [param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ProcessTxError(ns3::WifiMacHeader const & arg0) [member function]
-    cls.add_method('ProcessTxError', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PriorityScheduler(uint32_t priority, bool continueWithFirst) [member function]
+    cls.add_method('PriorityScheduler', 
                    'void', 
-                   [param('ns3::WifiMacHeader const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Purge() [member function]
-    cls.add_method('Purge', 
+                   [param('uint32_t', 'priority'), param('bool', 'continueWithFirst')])
+    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::Process(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address dst, uint8_t * nextHeader, uint8_t protocol, bool & isDropped) [member function]
+    cls.add_method('Process', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'dst'), param('uint8_t *', 'nextHeader'), param('uint8_t', 'protocol'), param('bool &', 'isDropped')])
+    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
+    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::RouteRequestTimerExpire(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, uint32_t requestId, uint8_t protocol) [member function]
+    cls.add_method('RouteRequestTimerExpire', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PurgeLinkNode() [member function]
-    cls.add_method('PurgeLinkNode', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SalvagePacket(ns3::Ptr<ns3::Packet const> packet, ns3::Ipv4Address source, ns3::Ipv4Address dst, uint8_t protocol) [member function]
+    cls.add_method('SalvagePacket', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PurgeMac() [member function]
-    cls.add_method('PurgeMac', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'dst'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleCachedReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ptr<ns3::Ipv4Route> route, double hops) [member function]
+    cls.add_method('ScheduleCachedReply', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::RebuildBestRouteTable(ns3::Ipv4Address source) [member function]
-    cls.add_method('RebuildBestRouteTable', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::Ipv4Route >', 'route'), param('double', 'hops')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInitialReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ScheduleInitialReply', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'source')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::RemoveLastEntry(std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
-    cls.add_method('RemoveLastEntry', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInterRequest(ns3::Ptr<ns3::Packet> packet) [member function]
+    cls.add_method('ScheduleInterRequest', 
                    'void', 
-                   [param('std::list< ns3::dsr::RouteCacheEntry > &', 'rtVector')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ScheduleTimer() [member function]
-    cls.add_method('ScheduleTimer', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleLinkPacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('ScheduleLinkPacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, bool isFirst, uint8_t protocol) [member function]
+    cls.add_method('ScheduleNetworkPacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('bool', 'isFirst'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SchedulePassivePacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('SchedulePassivePacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleRreqRetry(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, bool nonProp, uint32_t requestId, uint8_t protocol) [member function]
+    cls.add_method('ScheduleRreqRetry', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('bool', 'nonProp'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Scheduler(uint32_t priority) [member function]
+    cls.add_method('Scheduler', 
+                   'void', 
+                   [param('uint32_t', 'priority')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::SearchNextHop(ns3::Ipv4Address ipv4Address, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+    cls.add_method('SearchNextHop', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Address', 'ipv4Address'), param('std::vector< ns3::Ipv4Address > &', 'vec')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendAck(uint16_t ackId, ns3::Ipv4Address destination, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('SendAck', 
+                   'void', 
+                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendBuffTimerExpire() [member function]
+    cls.add_method('SendBuffTimerExpire', 
                    'void', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetBadLinkLifetime(ns3::Time t) [member function]
-    cls.add_method('SetBadLinkLifetime', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendErrorRequest(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, uint8_t protocol) [member function]
+    cls.add_method('SendErrorRequest', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCacheTimeout(ns3::Time t) [member function]
-    cls.add_method('SetCacheTimeout', 
+                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendGratuitousReply(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & nodeList, uint8_t protocol) [member function]
+    cls.add_method('SendGratuitousReply', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCacheType(std::string type) [member function]
-    cls.add_method('SetCacheType', 
+                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('std::vector< ns3::Ipv4Address > &', 'nodeList'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendInitialRequest(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    cls.add_method('SendInitialRequest', 
                    'void', 
-                   [param('std::string', 'type')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
-    cls.add_method('SetCallback', 
+                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacket(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetInitStability(ns3::Time initStability) [member function]
-    cls.add_method('SetInitStability', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacketFromBuffer(ns3::dsr::DsrOptionSRHeader const & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('SendPacketFromBuffer', 
                    'void', 
-                   [param('ns3::Time', 'initStability')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMaxCacheLen(uint32_t len) [member function]
-    cls.add_method('SetMaxCacheLen', 
+                   [param('ns3::dsr::DsrOptionSRHeader const &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::SendRealDown(ns3::dsr::DsrNetworkQueueEntry & newEntry) [member function]
+    cls.add_method('SendRealDown', 
+                   'bool', 
+                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'newEntry')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('SendReply', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMaxEntriesEachDst(uint32_t entries) [member function]
-    cls.add_method('SetMaxEntriesEachDst', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequest(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source) [member function]
+    cls.add_method('SendRequest', 
                    'void', 
-                   [param('uint32_t', 'entries')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMinLifeTime(ns3::Time minLifeTime) [member function]
-    cls.add_method('SetMinLifeTime', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
+    ## 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::Time', 'minLifeTime')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetStabilityDecrFactor(uint64_t decrFactor) [member function]
-    cls.add_method('SetStabilityDecrFactor', 
+                   [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', 
-                   [param('uint64_t', 'decrFactor')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetStabilityIncrFactor(uint64_t incrFactor) [member function]
-    cls.add_method('SetStabilityIncrFactor', 
+                   [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 >', 'callback')], 
+                   is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::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> callback) [member function]
+    cls.add_method('SetDownTarget6', 
                    'void', 
-                   [param('uint64_t', 'incrFactor')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetSubRoute(bool subRoute) [member function]
-    cls.add_method('SetSubRoute', 
+                   [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 >', 'callback')], 
+                   is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
                    'void', 
-                   [param('bool', 'subRoute')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetUseExtends(ns3::Time useExtends) [member function]
-    cls.add_method('SetUseExtends', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetPassiveBuffer(ns3::Ptr<ns3::dsr::DsrPassiveBuffer> r) [member function]
+    cls.add_method('SetPassiveBuffer', 
                    'void', 
-                   [param('ns3::Time', 'useExtends')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UpdateNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Time expire) [member function]
-    cls.add_method('UpdateNeighbor', 
+                   [param('ns3::Ptr< ns3::dsr::DsrPassiveBuffer >', 'r')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRequestTable(ns3::Ptr<ns3::dsr::DsrRreqTable> r) [member function]
+    cls.add_method('SetRequestTable', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Time', 'expire')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UpdateNetGraph() [member function]
-    cls.add_method('UpdateNetGraph', 
+                   [param('ns3::Ptr< ns3::dsr::DsrRreqTable >', 'r')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrRouting::SetRoute(ns3::Ipv4Address nextHop, ns3::Ipv4Address srcAddress) [member function]
+    cls.add_method('SetRoute', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ipv4Address', 'srcAddress')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRouteCache(ns3::Ptr<ns3::dsr::DsrRouteCache> r) [member function]
+    cls.add_method('SetRouteCache', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::Ptr< ns3::dsr::DsrRouteCache >', 'r')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
     cls.add_method('UpdateRouteEntry', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
     cls.add_method('UseExtends', 
                    'void', 
                    [param('std::vector< ns3::Ipv4Address >', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_arp [variable]
-    cls.add_instance_attribute('m_arp', 'std::vector< ns3::Ptr< ns3::ArpCache > >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_delay [variable]
-    cls.add_instance_attribute('m_delay', 'ns3::Time', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_handleLinkFailure [variable]
-    cls.add_instance_attribute('m_handleLinkFailure', 'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_nb [variable]
-    cls.add_instance_attribute('m_nb', 'std::vector< ns3::dsr::RouteCache::Neighbor >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_ntimer [variable]
-    cls.add_instance_attribute('m_ntimer', 'ns3::Timer', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_txErrorCallback [variable]
-    cls.add_instance_attribute('m_txErrorCallback', 'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3DsrRouteCacheNeighbor_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor(ns3::dsr::RouteCache::Neighbor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCache::Neighbor const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor(ns3::Ipv4Address ip, ns3::Mac48Address mac, ns3::Time t) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('ns3::Mac48Address', 'mac'), param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor() [constructor]
+def register_Ns3DsrDsrRoutingHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader(ns3::dsr::DsrRoutingHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRoutingHeader const &', 'arg0')])
+    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader() [constructor]
     cls.add_constructor([])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::close [variable]
-    cls.add_instance_attribute('close', 'bool', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_expireTime [variable]
-    cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_hardwareAddress [variable]
-    cls.add_instance_attribute('m_hardwareAddress', 'ns3::Mac48Address', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_neighborAddress [variable]
-    cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrRouteCacheEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry::RouteCacheEntry(ns3::dsr::RouteCacheEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCacheEntry const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry::RouteCacheEntry(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > const & ip=std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >(), ns3::Ipv4Address dst=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('std::vector< ns3::Ipv4Address > const &', 'ip', default_value='std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCacheEntry::GetBlacklistTimeout() const [member function]
-    cls.add_method('GetBlacklistTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::RouteCacheEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCacheEntry::GetExpireTime() const [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
+    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): ns3::TypeId ns3::dsr::DsrRoutingHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > ns3::dsr::RouteCacheEntry::GetVector() const [member function]
-    cls.add_method('GetVector', 
-                   'std::vector< ns3::Ipv4Address >', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::Invalidate(ns3::Time badLinkLifetime) [member function]
-    cls.add_method('Invalidate', 
-                   'void', 
-                   [param('ns3::Time', 'badLinkLifetime')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCacheEntry::IsUnidirectional() const [member function]
-    cls.add_method('IsUnidirectional', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRoutingHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::Print(std::ostream & os) const [member function]
+                   is_static=True)
+    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetBlacklistTimeout(ns3::Time t) [member function]
-    cls.add_method('SetBlacklistTimeout', 
-                   'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
-                   'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetUnidirectional(bool u) [member function]
-    cls.add_method('SetUnidirectional', 
-                   'void', 
-                   [param('bool', 'u')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > v) [member function]
-    cls.add_method('SetVector', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'v')])
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
     return
 
-def register_Ns3DsrRreqTable_methods(root_module, cls):
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable::RreqTable(ns3::dsr::RreqTable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RreqTable const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable::RreqTable() [constructor]
+def register_Ns3DsrDsrRreqTable_methods(root_module, cls):
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable::DsrRreqTable(ns3::dsr::DsrRreqTable const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRreqTable const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable::DsrRreqTable() [constructor]
     cls.add_constructor([])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::CheckUniqueRreqId(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::CheckUniqueRreqId(ns3::Ipv4Address dst) [member function]
     cls.add_method('CheckUniqueRreqId', 
                    'uint32_t', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::FindAndUpdate(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::FindAndUpdate(ns3::Ipv4Address dst) [member function]
     cls.add_method('FindAndUpdate', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::RreqTable::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::DsrRreqTable::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
     cls.add_method('FindSourceEntry', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList * ns3::dsr::RreqTable::FindUnidirectional(ns3::Ipv4Address neighbor) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList * ns3::dsr::DsrRreqTable::FindUnidirectional(ns3::Ipv4Address neighbor) [member function]
     cls.add_method('FindUnidirectional', 
                    'ns3::dsr::BlackList *', 
                    [param('ns3::Ipv4Address', 'neighbor')])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetInitHopLimit() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetInitHopLimit() const [member function]
     cls.add_method('GetInitHopLimit', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqCnt(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqCnt(ns3::Ipv4Address dst) [member function]
     cls.add_method('GetRreqCnt', 
                    'uint32_t', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqIdSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqIdSize() const [member function]
     cls.add_method('GetRreqIdSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqSize() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqSize() [member function]
     cls.add_method('GetRreqSize', 
                    'uint32_t', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqTableSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqTableSize() const [member function]
     cls.add_method('GetRreqTableSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::RreqTable::GetTypeId() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRreqTable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetUniqueRreqIdSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetUniqueRreqIdSize() const [member function]
     cls.add_method('GetUniqueRreqIdSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::Invalidate() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::Invalidate() [member function]
     cls.add_method('Invalidate', 
                    'void', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::RreqTable::MarkLinkAsUnidirectional(ns3::Ipv4Address neighbor, ns3::Time blacklistTimeout) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::DsrRreqTable::MarkLinkAsUnidirectional(ns3::Ipv4Address neighbor, ns3::Time blacklistTimeout) [member function]
     cls.add_method('MarkLinkAsUnidirectional', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'neighbor'), param('ns3::Time', 'blacklistTimeout')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::PurgeNeighbor() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::PurgeNeighbor() [member function]
     cls.add_method('PurgeNeighbor', 
                    'void', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::RemoveLeastExpire(std::map<ns3::Ipv4Address, ns3::dsr::RreqTableEntry, std::less<ns3::Ipv4Address>, std::allocator<std::pair<ns3::Ipv4Address const, ns3::dsr::RreqTableEntry> > > & rreqDstMap) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::RemoveLeastExpire(std::map<ns3::Ipv4Address, ns3::dsr::RreqTableEntry, std::less<ns3::Ipv4Address>, std::allocator<std::pair<ns3::Ipv4Address const, ns3::dsr::RreqTableEntry> > > & rreqDstMap) [member function]
     cls.add_method('RemoveLeastExpire', 
                    'void', 
                    [param('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry > &', 'rreqDstMap')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::RemoveRreqEntry(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::RemoveRreqEntry(ns3::Ipv4Address dst) [member function]
     cls.add_method('RemoveRreqEntry', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetInitHopLimit(uint32_t hl) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetInitHopLimit(uint32_t hl) [member function]
     cls.add_method('SetInitHopLimit', 
                    'void', 
                    [param('uint32_t', 'hl')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetRreqIdSize(uint32_t id) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetRreqIdSize(uint32_t id) [member function]
     cls.add_method('SetRreqIdSize', 
                    'void', 
                    [param('uint32_t', 'id')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetRreqTableSize(uint32_t rt) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetRreqTableSize(uint32_t rt) [member function]
     cls.add_method('SetRreqTableSize', 
                    'void', 
                    [param('uint32_t', 'rt')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetUniqueRreqIdSize(uint32_t uid) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetUniqueRreqIdSize(uint32_t uid) [member function]
     cls.add_method('SetUniqueRreqIdSize', 
                    'void', 
                    [param('uint32_t', 'uid')])
     return
 
-def register_Ns3DsrRreqTableEntry_methods(root_module, cls):
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry() [constructor]
-    cls.add_constructor([])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry(ns3::dsr::RreqTableEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RreqTableEntry const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_expire [variable]
-    cls.add_instance_attribute('m_expire', 'ns3::Time', is_const=False)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_reqNo [variable]
-    cls.add_instance_attribute('m_reqNo', 'uint32_t', is_const=False)
-    return
-
-def register_Ns3DsrSendBuffEntry_methods(root_module, cls):
+def register_Ns3DsrDsrSendBuffEntry_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry::SendBuffEntry(ns3::dsr::SendBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::SendBuffEntry const &', 'arg0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry::SendBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry::DsrSendBuffEntry(ns3::dsr::DsrSendBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrSendBuffEntry const &', 'arg0')])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry::DsrSendBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::SendBuffEntry::GetDestination() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrSendBuffEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::SendBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrSendBuffEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::SendBuffEntry::GetPacket() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrSendBuffEntry::GetPacket() const [member function]
     cls.add_method('GetPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): uint8_t ns3::dsr::SendBuffEntry::GetProtocol() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint8_t ns3::dsr::DsrSendBuffEntry::GetProtocol() const [member function]
     cls.add_method('GetProtocol', 
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
     cls.add_method('SetDestination', 
                    'void', 
                    [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('SetPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetProtocol(uint8_t p) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetProtocol(uint8_t p) [member function]
     cls.add_method('SetProtocol', 
                    'void', 
                    [param('uint8_t', 'p')])
     return
 
-def register_Ns3DsrSendBuffer_methods(root_module, cls):
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer::SendBuffer(ns3::dsr::SendBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::SendBuffer const &', 'arg0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer::SendBuffer() [constructor]
+def register_Ns3DsrDsrSendBuffer_methods(root_module, cls):
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer::DsrSendBuffer(ns3::dsr::DsrSendBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrSendBuffer const &', 'arg0')])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer::DsrSendBuffer() [constructor]
     cls.add_constructor([])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::SendBuffEntry & entry) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrSendBuffEntry & entry) [member function]
     cls.add_method('Dequeue', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::SendBuffEntry &', 'entry')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::DropPacketWithDst(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrSendBuffEntry &', 'entry')])
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::DropPacketWithDst(ns3::Ipv4Address dst) [member function]
     cls.add_method('DropPacketWithDst', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Enqueue(ns3::dsr::SendBuffEntry & entry) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Enqueue(ns3::dsr::DsrSendBuffEntry & entry) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::dsr::SendBuffEntry &', 'entry')])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Find(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::dsr::DsrSendBuffEntry &', 'entry')])
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Find(ns3::Ipv4Address dst) [member function]
     cls.add_method('Find', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rsendbuff.h (module 'dsr'): std::vector<ns3::dsr::SendBuffEntry, std::allocator<ns3::dsr::SendBuffEntry> > & ns3::dsr::SendBuffer::GetBuffer() [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): std::vector<ns3::dsr::DsrSendBuffEntry, std::allocator<ns3::dsr::DsrSendBuffEntry> > & ns3::dsr::DsrSendBuffer::GetBuffer() [member function]
     cls.add_method('GetBuffer', 
-                   'std::vector< ns3::dsr::SendBuffEntry > &', 
+                   'std::vector< ns3::dsr::DsrSendBuffEntry > &', 
                    [])
-    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::SendBuffer::GetMaxQueueLen() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrSendBuffer::GetMaxQueueLen() const [member function]
     cls.add_method('GetMaxQueueLen', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::SendBuffer::GetSendBufferTimeout() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrSendBuffer::GetSendBufferTimeout() const [member function]
     cls.add_method('GetSendBufferTimeout', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::SendBuffer::GetSize() [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrSendBuffer::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::SetMaxQueueLen(uint32_t len) [member function]
     cls.add_method('SetMaxQueueLen', 
                    'void', 
                    [param('uint32_t', 'len')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::SetSendBufferTimeout(ns3::Time t) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::SetSendBufferTimeout(ns3::Time t) [member function]
     cls.add_method('SetSendBufferTimeout', 
                    'void', 
                    [param('ns3::Time', 't')])
     return
 
+def register_Ns3DsrGraReplyEntry_methods(root_module, cls):
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::dsr::GraReplyEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::GraReplyEntry const &', 'arg0')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::Ipv4Address t, ns3::Ipv4Address f, ns3::Time h) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 't'), param('ns3::Ipv4Address', 'f'), param('ns3::Time', 'h')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_gratReplyHoldoff [variable]
+    cls.add_instance_attribute('m_gratReplyHoldoff', 'ns3::Time', is_const=False)
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_hearFrom [variable]
+    cls.add_instance_attribute('m_hearFrom', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_replyTo [variable]
+    cls.add_instance_attribute('m_replyTo', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrLink_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::dsr::Link const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::Link const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::Ipv4Address ip1, ns3::Ipv4Address ip2) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ip1'), param('ns3::Ipv4Address', 'ip2')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::Link::Print() const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_high [variable]
+    cls.add_instance_attribute('m_high', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_low [variable]
+    cls.add_instance_attribute('m_low', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrLinkKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey(ns3::dsr::LinkKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::LinkKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_nextHop [variable]
+    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_ourAdd [variable]
+    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrNetworkKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey(ns3::dsr::NetworkKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::NetworkKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ackId [variable]
+    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_nextHop [variable]
+    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ourAdd [variable]
+    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrPassiveKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey(ns3::dsr::PassiveKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::PassiveKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_ackId [variable]
+    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_segsLeft [variable]
+    cls.add_instance_attribute('m_segsLeft', 'uint8_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrRreqTableEntry_methods(root_module, cls):
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry() [constructor]
+    cls.add_constructor([])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry(ns3::dsr::RreqTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::RreqTableEntry const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_expire [variable]
+    cls.add_instance_attribute('m_expire', 'ns3::Time', is_const=False)
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_reqNo [variable]
+    cls.add_instance_attribute('m_reqNo', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3DsrDsrOptionAck_methods(root_module, cls):
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionAck::DsrOptionAck(ns3::dsr::DsrOptionAck const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrOptionAck const &', 'arg0')])
diff -Naur ns-3.24.1/src/dsr/bindings/modulegen__gcc_LP64.py ns-3.25/src/dsr/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/dsr/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -21,17 +21,19 @@
     root_module = module.get_root()
     
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
     module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
     module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
-    ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
-    module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
     module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
+    ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
+    module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## address.h (module 'network'): ns3::Address [class]
     module.add_class('Address', import_from_module='ns.network')
     ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
@@ -176,6 +178,8 @@
     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')
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
     module.add_class('TypeId', import_from_module='ns.core')
     ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
@@ -236,12 +240,26 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
     module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue [class]
+    module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
+    module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
     ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
@@ -262,12 +280,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
@@ -278,6 +300,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -298,6 +322,8 @@
     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> >'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -322,6 +348,8 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode [enumeration]
+    module.add_enum('ProtectionMode', ['RTS_CTS', 'CTS_TO_SELF'], outer_class=root_module['ns3::WifiRemoteStationManager'], import_from_module='ns.wifi')
     ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
     module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
@@ -336,6 +364,10 @@
     module.add_class('AttributeChecker', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> >'])
     ## attribute.h (module 'core'): ns3::AttributeValue [class]
     module.add_class('AttributeValue', allow_subclassing=False, automatic_type_narrowing=True, import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## callback.h (module 'core'): ns3::CallbackChecker [class]
     module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## callback.h (module 'core'): ns3::CallbackImplBase [class]
@@ -346,6 +378,8 @@
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
     module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## double.h (module 'core'): ns3::DoubleValue [class]
+    module.add_class('DoubleValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
     module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
@@ -368,6 +402,8 @@
     module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## 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]
@@ -414,6 +450,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -430,6 +470,8 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
     module.add_class('Ssid', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
     ## ssid.h (module 'wifi'): ns3::SsidChecker [class]
@@ -464,8 +506,13 @@
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', 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< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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'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*')
@@ -553,9 +600,33 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *', u'ns3::TracedValueCallback::SequenceNumber32')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) **', u'ns3::TracedValueCallback::SequenceNumber32*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::SequenceNumber32, ns3::SequenceNumber32 ) *&', u'ns3::TracedValueCallback::SequenceNumber32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
@@ -571,12 +642,26 @@
     module.add_enum('LinkStates', ['PROBABLE', 'QUESTIONABLE'])
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList [struct]
     module.add_class('BlackList')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry [class]
+    module.add_class('DsrErrorBuffEntry')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer [class]
+    module.add_class('DsrErrorBuffer')
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrFsHeader [class]
     module.add_class('DsrFsHeader', parent=root_module['ns3::Header'])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply [class]
+    module.add_class('DsrGraReply', parent=root_module['ns3::Object'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab [class]
+    module.add_class('DsrLinkStab')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry [class]
+    module.add_class('DsrMaintainBuffEntry')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer [class]
+    module.add_class('DsrMaintainBuffer')
     ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue [class]
     module.add_class('DsrNetworkQueue', parent=root_module['ns3::Object'])
     ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry [class]
     module.add_class('DsrNetworkQueueEntry')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab [class]
+    module.add_class('DsrNodeStab')
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrOptionField [class]
     module.add_class('DsrOptionField')
     ## dsr-option-header.h (module 'dsr'): ns3::dsr::DsrOptionHeader [class]
@@ -601,54 +686,40 @@
     module.add_class('DsrOptionSRHeader', parent=root_module['ns3::dsr::DsrOptionHeader'])
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptions [class]
     module.add_class('DsrOptions', parent=root_module['ns3::Object'])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry [class]
+    module.add_class('DsrPassiveBuffEntry')
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer [class]
+    module.add_class('DsrPassiveBuffer', parent=root_module['ns3::Object'])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry [class]
+    module.add_class('DsrReceivedRreqEntry')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache [class]
+    module.add_class('DsrRouteCache', parent=root_module['ns3::Object'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor [struct]
+    module.add_class('Neighbor', outer_class=root_module['ns3::dsr::DsrRouteCache'])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry [class]
+    module.add_class('DsrRouteCacheEntry')
     ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting [class]
     module.add_class('DsrRouting', parent=root_module['ns3::IpL4Protocol'])
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader [class]
     module.add_class('DsrRoutingHeader', parent=[root_module['ns3::dsr::DsrFsHeader'], root_module['ns3::dsr::DsrOptionField']])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry [class]
-    module.add_class('ErrorBuffEntry')
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer [class]
-    module.add_class('ErrorBuffer')
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply [class]
-    module.add_class('GraReply', parent=root_module['ns3::Object'])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable [class]
+    module.add_class('DsrRreqTable', parent=root_module['ns3::Object'])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry [class]
+    module.add_class('DsrSendBuffEntry')
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer [class]
+    module.add_class('DsrSendBuffer')
     ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry [struct]
     module.add_class('GraReplyEntry')
     ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link [struct]
     module.add_class('Link')
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey [struct]
     module.add_class('LinkKey')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab [class]
-    module.add_class('LinkStab')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry [class]
-    module.add_class('MaintainBuffEntry')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer [class]
-    module.add_class('MaintainBuffer')
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey [struct]
     module.add_class('NetworkKey')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab [class]
-    module.add_class('NodeStab')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry [class]
-    module.add_class('PassiveBuffEntry')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer [class]
-    module.add_class('PassiveBuffer', parent=root_module['ns3::Object'])
     ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey [struct]
     module.add_class('PassiveKey')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry [class]
-    module.add_class('ReceivedRreqEntry')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache [class]
-    module.add_class('RouteCache', parent=root_module['ns3::Object'])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor [struct]
-    module.add_class('Neighbor', outer_class=root_module['ns3::dsr::RouteCache'])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry [class]
-    module.add_class('RouteCacheEntry')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable [class]
-    module.add_class('RreqTable', parent=root_module['ns3::Object'])
     ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry [struct]
     module.add_class('RreqTableEntry')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry [class]
-    module.add_class('SendBuffEntry')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer [class]
-    module.add_class('SendBuffer')
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionAck [class]
     module.add_class('DsrOptionAck', parent=root_module['ns3::dsr::DsrOptions'])
     ## dsr-option-header.h (module 'dsr'): ns3::dsr::DsrOptionAckHeader [class]
@@ -669,16 +740,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::DsrErrorBuffEntry >', 'ns3::dsr::DsrErrorBuffEntry', container_type=u'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::dsr::DsrRouteCache::Neighbor >', 'ns3::dsr::DsrRouteCache::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::list< ns3::dsr::DsrRouteCacheEntry >', 'ns3::dsr::DsrRouteCacheEntry', container_type=u'list')
+    module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
     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')
+    module.add_container('std::vector< ns3::dsr::DsrSendBuffEntry >', 'ns3::dsr::DsrSendBuffEntry', container_type=u'vector')
 
 def register_types_ns3_internal(module):
     root_module = module.get_root()
@@ -737,6 +808,7 @@
     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__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
     register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
@@ -761,6 +833,10 @@
     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_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
+    register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
     register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
     register_Ns3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> >'])
@@ -771,9 +847,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
@@ -785,6 +863,7 @@
     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_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
@@ -801,11 +880,14 @@
     register_Ns3AttributeAccessor_methods(root_module, root_module['ns3::AttributeAccessor'])
     register_Ns3AttributeChecker_methods(root_module, root_module['ns3::AttributeChecker'])
     register_Ns3AttributeValue_methods(root_module, root_module['ns3::AttributeValue'])
+    register_Ns3BooleanChecker_methods(root_module, root_module['ns3::BooleanChecker'])
+    register_Ns3BooleanValue_methods(root_module, root_module['ns3::BooleanValue'])
     register_Ns3CallbackChecker_methods(root_module, root_module['ns3::CallbackChecker'])
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3DoubleValue_methods(root_module, root_module['ns3::DoubleValue'])
     register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
@@ -817,6 +899,7 @@
     register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
     register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
     register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    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'])
@@ -837,6 +920,8 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -845,6 +930,7 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
     register_Ns3SsidValue_methods(root_module, root_module['ns3::SsidValue'])
@@ -862,15 +948,23 @@
     register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
     register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
     register_Ns3Icmpv4L4Protocol_methods(root_module, root_module['ns3::Icmpv4L4Protocol'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
     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'])
     register_Ns3DsrBlackList_methods(root_module, root_module['ns3::dsr::BlackList'])
+    register_Ns3DsrDsrErrorBuffEntry_methods(root_module, root_module['ns3::dsr::DsrErrorBuffEntry'])
+    register_Ns3DsrDsrErrorBuffer_methods(root_module, root_module['ns3::dsr::DsrErrorBuffer'])
     register_Ns3DsrDsrFsHeader_methods(root_module, root_module['ns3::dsr::DsrFsHeader'])
+    register_Ns3DsrDsrGraReply_methods(root_module, root_module['ns3::dsr::DsrGraReply'])
+    register_Ns3DsrDsrLinkStab_methods(root_module, root_module['ns3::dsr::DsrLinkStab'])
+    register_Ns3DsrDsrMaintainBuffEntry_methods(root_module, root_module['ns3::dsr::DsrMaintainBuffEntry'])
+    register_Ns3DsrDsrMaintainBuffer_methods(root_module, root_module['ns3::dsr::DsrMaintainBuffer'])
     register_Ns3DsrDsrNetworkQueue_methods(root_module, root_module['ns3::dsr::DsrNetworkQueue'])
     register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, root_module['ns3::dsr::DsrNetworkQueueEntry'])
+    register_Ns3DsrDsrNodeStab_methods(root_module, root_module['ns3::dsr::DsrNodeStab'])
     register_Ns3DsrDsrOptionField_methods(root_module, root_module['ns3::dsr::DsrOptionField'])
     register_Ns3DsrDsrOptionHeader_methods(root_module, root_module['ns3::dsr::DsrOptionHeader'])
     register_Ns3DsrDsrOptionHeaderAlignment_methods(root_module, root_module['ns3::dsr::DsrOptionHeader::Alignment'])
@@ -883,30 +977,23 @@
     register_Ns3DsrDsrOptionRreqHeader_methods(root_module, root_module['ns3::dsr::DsrOptionRreqHeader'])
     register_Ns3DsrDsrOptionSRHeader_methods(root_module, root_module['ns3::dsr::DsrOptionSRHeader'])
     register_Ns3DsrDsrOptions_methods(root_module, root_module['ns3::dsr::DsrOptions'])
+    register_Ns3DsrDsrPassiveBuffEntry_methods(root_module, root_module['ns3::dsr::DsrPassiveBuffEntry'])
+    register_Ns3DsrDsrPassiveBuffer_methods(root_module, root_module['ns3::dsr::DsrPassiveBuffer'])
+    register_Ns3DsrDsrReceivedRreqEntry_methods(root_module, root_module['ns3::dsr::DsrReceivedRreqEntry'])
+    register_Ns3DsrDsrRouteCache_methods(root_module, root_module['ns3::dsr::DsrRouteCache'])
+    register_Ns3DsrDsrRouteCacheNeighbor_methods(root_module, root_module['ns3::dsr::DsrRouteCache::Neighbor'])
+    register_Ns3DsrDsrRouteCacheEntry_methods(root_module, root_module['ns3::dsr::DsrRouteCacheEntry'])
     register_Ns3DsrDsrRouting_methods(root_module, root_module['ns3::dsr::DsrRouting'])
     register_Ns3DsrDsrRoutingHeader_methods(root_module, root_module['ns3::dsr::DsrRoutingHeader'])
-    register_Ns3DsrErrorBuffEntry_methods(root_module, root_module['ns3::dsr::ErrorBuffEntry'])
-    register_Ns3DsrErrorBuffer_methods(root_module, root_module['ns3::dsr::ErrorBuffer'])
-    register_Ns3DsrGraReply_methods(root_module, root_module['ns3::dsr::GraReply'])
+    register_Ns3DsrDsrRreqTable_methods(root_module, root_module['ns3::dsr::DsrRreqTable'])
+    register_Ns3DsrDsrSendBuffEntry_methods(root_module, root_module['ns3::dsr::DsrSendBuffEntry'])
+    register_Ns3DsrDsrSendBuffer_methods(root_module, root_module['ns3::dsr::DsrSendBuffer'])
     register_Ns3DsrGraReplyEntry_methods(root_module, root_module['ns3::dsr::GraReplyEntry'])
     register_Ns3DsrLink_methods(root_module, root_module['ns3::dsr::Link'])
     register_Ns3DsrLinkKey_methods(root_module, root_module['ns3::dsr::LinkKey'])
-    register_Ns3DsrLinkStab_methods(root_module, root_module['ns3::dsr::LinkStab'])
-    register_Ns3DsrMaintainBuffEntry_methods(root_module, root_module['ns3::dsr::MaintainBuffEntry'])
-    register_Ns3DsrMaintainBuffer_methods(root_module, root_module['ns3::dsr::MaintainBuffer'])
     register_Ns3DsrNetworkKey_methods(root_module, root_module['ns3::dsr::NetworkKey'])
-    register_Ns3DsrNodeStab_methods(root_module, root_module['ns3::dsr::NodeStab'])
-    register_Ns3DsrPassiveBuffEntry_methods(root_module, root_module['ns3::dsr::PassiveBuffEntry'])
-    register_Ns3DsrPassiveBuffer_methods(root_module, root_module['ns3::dsr::PassiveBuffer'])
     register_Ns3DsrPassiveKey_methods(root_module, root_module['ns3::dsr::PassiveKey'])
-    register_Ns3DsrReceivedRreqEntry_methods(root_module, root_module['ns3::dsr::ReceivedRreqEntry'])
-    register_Ns3DsrRouteCache_methods(root_module, root_module['ns3::dsr::RouteCache'])
-    register_Ns3DsrRouteCacheNeighbor_methods(root_module, root_module['ns3::dsr::RouteCache::Neighbor'])
-    register_Ns3DsrRouteCacheEntry_methods(root_module, root_module['ns3::dsr::RouteCacheEntry'])
-    register_Ns3DsrRreqTable_methods(root_module, root_module['ns3::dsr::RreqTable'])
     register_Ns3DsrRreqTableEntry_methods(root_module, root_module['ns3::dsr::RreqTableEntry'])
-    register_Ns3DsrSendBuffEntry_methods(root_module, root_module['ns3::dsr::SendBuffEntry'])
-    register_Ns3DsrSendBuffer_methods(root_module, root_module['ns3::dsr::SendBuffer'])
     register_Ns3DsrDsrOptionAck_methods(root_module, root_module['ns3::dsr::DsrOptionAck'])
     register_Ns3DsrDsrOptionAckHeader_methods(root_module, root_module['ns3::dsr::DsrOptionAckHeader'])
     register_Ns3DsrDsrOptionAckReq_methods(root_module, root_module['ns3::dsr::DsrOptionAckReq'])
@@ -1703,6 +1790,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1718,6 +1810,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1955,7 +2052,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2945,6 +3042,40 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned int > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(unsigned int const & v) [constructor]
+    cls.add_constructor([param('unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): unsigned int ns3::TracedValue<unsigned int>::Get() const [member function]
+    cls.add_method('Get', 
+                   'unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned int>::Set(unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -3159,21 +3290,26 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize() const [member function]
     cls.add_method('GetConstellationSize', 
                    'uint16_t', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetDataRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
     cls.add_method('GetMcsValue', 
                    'uint8_t', 
@@ -3184,11 +3320,21 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetNonHtReferenceRate() const [member function]
+    cls.add_method('GetNonHtReferenceRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetPhyRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
                    'uint32_t', 
@@ -3199,6 +3345,16 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherCodeRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherCodeRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherDataRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherDataRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
     cls.add_method('IsMandatory', 
                    'bool', 
@@ -3316,6 +3472,8 @@
     cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_htSupported [variable]
+    cls.add_instance_attribute('m_htSupported', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
@@ -3325,13 +3483,17 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
-    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    cls.add_instance_attribute('m_rx', 'uint8_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
     cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortPreamble [variable]
+    cls.add_instance_attribute('m_shortPreamble', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortSlotTime [variable]
+    cls.add_instance_attribute('m_shortSlotTime', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
     cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
-    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_vhtSupported [variable]
+    cls.add_instance_attribute('m_vhtSupported', 'bool', is_const=False)
     return
 
 def register_Ns3WifiTxVector_methods(root_module, cls):
@@ -3436,6 +3598,7 @@
     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_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'))
@@ -3445,7 +3608,6 @@
     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_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
@@ -3504,10 +3666,10 @@
     cls.add_constructor([])
     ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
-    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
-    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduRefNumber [variable]
+    cls.add_instance_attribute('mpduRefNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3SignalNoiseDbm_methods(root_module, cls):
@@ -4005,11 +4167,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -4069,6 +4241,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -4161,6 +4337,354 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Queue_methods(root_module, cls):
+    ## queue.h (module 'network'): ns3::Queue::Queue(ns3::Queue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Queue const &', 'arg0')])
+    ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
+    cls.add_constructor([])
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
+    cls.add_method('DequeueAll', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): static ns3::TypeId ns3::Queue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue.h (module 'network'): bool ns3::Queue::IsEmpty() const [member function]
+    cls.add_method('IsEmpty', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
+    cls.add_method('ResetStatistics', 
+                   'void', 
+                   [])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   visibility='protected')
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3RandomVariableStream_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4340,6 +4864,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4376,6 +4912,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -4479,6 +5027,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -4504,11 +5057,26 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
-    cls.add_method('IsIpRecvTos', 
-                   'bool', 
-                   [], 
-                   is_const=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
     cls.add_method('IsIpRecvTtl', 
                    'bool', 
@@ -5236,6 +5804,74 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -5519,6 +6155,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5609,12 +6250,12 @@
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'upCallback')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> linkDown) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkDownCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkDown) [member function]
     cls.add_method('SetLinkDownCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkDown')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> linkUp) [member function]
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetLinkUpCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> linkUp) [member function]
     cls.add_method('SetLinkUpCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'linkUp')], 
@@ -5638,6 +6279,11 @@
                    'void', 
                    [param('ns3::Time', 'rifs')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -6120,6 +6766,11 @@
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
     cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -6129,15 +6780,19 @@
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiTxVector txVector, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6588,10 +7243,14 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
@@ -6632,6 +7291,11 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -6642,6 +7306,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::WifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6752,6 +7431,11 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('IsValidTxVector', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
@@ -6794,10 +7478,15 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
@@ -6839,16 +7528,21 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6871,6 +7565,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedMcs(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedModes(ns3::Mac48Address address) [member function]
     cls.add_method('AddAllSupportedModes', 
                    'void', 
@@ -6891,6 +7589,10 @@
     cls.add_method('AddStationVhtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedErpSlotTime(ns3::Mac48Address address, bool isShortSlotTimeSupported) [member function]
+    cls.add_method('AddSupportedErpSlotTime', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortSlotTimeSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
@@ -6899,6 +7601,10 @@
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedPlcpPreamble(ns3::Mac48Address address, bool isShortPreambleSupported) [member function]
+    cls.add_method('AddSupportedPlcpPreamble', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortPreambleSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
     cls.add_method('DoGetCtsToSelfTxVector', 
                    'ns3::WifiTxVector', 
@@ -6929,10 +7635,10 @@
     cls.add_method('GetCtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
                    'ns3::WifiMode', 
@@ -6990,6 +7696,16 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpBasicModes() const [member function]
+    cls.add_method('GetNNonErpBasicModes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpBasicMode(uint32_t i) const [member function]
+    cls.add_method('GetNonErpBasicMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
     cls.add_method('GetNonUnicastMode', 
                    'ns3::WifiMode', 
@@ -6999,6 +7715,11 @@
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode ns3::WifiRemoteStationManager::GetProtectionMode() const [member function]
+    cls.add_method('GetProtectionMode', 
+                   'ns3::WifiRemoteStationManager::ProtectionMode', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
@@ -7008,11 +7729,36 @@
     cls.add_method('GetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortPreambleSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetUseNonErpProtection() const [member function]
+    cls.add_method('GetUseNonErpProtection', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
     cls.add_method('HasHtSupported', 
                    'bool', 
@@ -7054,18 +7800,18 @@
     cls.add_method('NeedFragmentation', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector) [member function]
     cls.add_method('NeedRts', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PrepareForQueue', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
     cls.add_method('RecordDisassociated', 
                    'void', 
@@ -7082,6 +7828,10 @@
     cls.add_method('RecordWaitAssocTxOk', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportAmpduTxStatus(ns3::Mac48Address address, uint8_t tid, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('ReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
     cls.add_method('ReportDataFailed', 
                    'void', 
@@ -7138,10 +7888,26 @@
     cls.add_method('SetMaxSsrc', 
                    'void', 
                    [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetProtectionMode(ns3::WifiRemoteStationManager::ProtectionMode mode) [member function]
+    cls.add_method('SetProtectionMode', 
+                   'void', 
+                   [param('ns3::WifiRemoteStationManager::ProtectionMode', 'mode')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortPreambleEnabled(bool enable) [member function]
+    cls.add_method('SetShortPreambleEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortSlotTimeEnabled(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetUseNonErpProtection(bool enable) [member function]
+    cls.add_method('SetUseNonErpProtection', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
@@ -7180,6 +7946,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetHtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetLongRetryCount', 
                    'uint32_t', 
@@ -7200,6 +7971,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNNonErpSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
@@ -7210,14 +7986,14 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [param('ns3::WifiRemoteStation const *', 'station')], 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetNonErpSupported', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetNumberOfSupportedRxAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfSupportedRxAntennas', 
+                   'uint8_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
@@ -7245,6 +8021,11 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetVhtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -7340,10 +8121,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -7370,6 +8151,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportAmpduTxStatus(ns3::WifiRemoteStation * station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('DoReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -7580,9 +8366,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -7636,10 +8422,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -7648,10 +8434,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
@@ -7745,6 +8531,47 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3BooleanChecker_methods(root_module, cls):
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanChecker::BooleanChecker(ns3::BooleanChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanChecker const &', 'arg0')])
+    return
+
+def register_Ns3BooleanValue_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(ns3::BooleanValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::BooleanValue const &', 'arg0')])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue() [constructor]
+    cls.add_constructor([])
+    ## boolean.h (module 'core'): ns3::BooleanValue::BooleanValue(bool value) [constructor]
+    cls.add_constructor([param('bool', 'value')])
+    ## boolean.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::BooleanValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## boolean.h (module 'core'): bool ns3::BooleanValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## boolean.h (module 'core'): std::string ns3::BooleanValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## boolean.h (module 'core'): void ns3::BooleanValue::Set(bool value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('bool', 'value')])
+    return
+
 def register_Ns3CallbackChecker_methods(root_module, cls):
     ## callback.h (module 'core'): ns3::CallbackChecker::CallbackChecker() [constructor]
     cls.add_constructor([])
@@ -7859,6 +8686,39 @@
                    is_virtual=True)
     return
 
+def register_Ns3DoubleValue_methods(root_module, cls):
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue() [constructor]
+    cls.add_constructor([])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(ns3::DoubleValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DoubleValue const &', 'arg0')])
+    ## double.h (module 'core'): ns3::DoubleValue::DoubleValue(double const & value) [constructor]
+    cls.add_constructor([param('double const &', 'value')])
+    ## double.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::DoubleValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): bool ns3::DoubleValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## double.h (module 'core'): double ns3::DoubleValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## double.h (module 'core'): std::string ns3::DoubleValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## double.h (module 'core'): void ns3::DoubleValue::Set(double const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('double const &', 'value')])
+    return
+
 def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
     cls.add_constructor([])
@@ -8197,6 +9057,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetRxHighestSupportedAntennas() const [member function]
+    cls.add_method('GetRxHighestSupportedAntennas', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
     cls.add_method('GetRxHighestSupportedDataRate', 
                    'uint16_t', 
@@ -8251,10 +9116,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) const [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
-                   [param('uint8_t', 'mcs')])
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -8341,6 +9217,14 @@
     cls.add_method('SetTxMcsSetDefined', 
                    'void', 
                    [param('uint8_t', 'txmcssetdefined')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8383,6 +9267,39 @@
                    [param('ns3::HtCapabilities const &', 'value')])
     return
 
+def register_Ns3IntegerValue_methods(root_module, cls):
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
+    cls.add_constructor([])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(ns3::IntegerValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::IntegerValue const &', 'arg0')])
+    ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue(int64_t const & value) [constructor]
+    cls.add_constructor([param('int64_t const &', 'value')])
+    ## integer.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::IntegerValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): bool ns3::IntegerValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## integer.h (module 'core'): int64_t ns3::IntegerValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## integer.h (module 'core'): std::string ns3::IntegerValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## integer.h (module 'core'): void ns3::IntegerValue::Set(int64_t const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('int64_t const &', 'value')])
+    return
+
 def register_Ns3IpL4Protocol_methods(root_module, cls):
     ## ip-l4-protocol.h (module 'internet'): ns3::IpL4Protocol::IpL4Protocol() [constructor]
     cls.add_constructor([])
@@ -8515,6 +9432,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -8530,6 +9452,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -8545,6 +9472,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -8595,6 +9532,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -8721,10 +9663,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -8749,6 +9691,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -8838,6 +9784,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -8853,6 +9804,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -8880,7 +9836,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -8939,6 +9901,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -9274,8 +10241,13 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
-    cls.add_method('IsUp', 
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsSolicitedMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsSolicitedMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
+    cls.add_method('IsUp', 
                    'bool', 
                    [], 
                    is_const=True)
@@ -9287,10 +10259,10 @@
     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]
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'hdr'), param('ns3::Ipv6Address', 'dest')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
     cls.add_method('SetBaseReachableTime', 
                    'void', 
@@ -9335,6 +10307,10 @@
     cls.add_method('SetState', 
                    'void', 
                    [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -9469,7 +10445,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -9596,6 +10572,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -9675,6 +10737,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -10049,6 +11116,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3Ssid_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## ssid.h (module 'wifi'): ns3::Ssid::Ssid(ns3::Ssid const & arg0) [copy constructor]
@@ -10154,10 +11242,10 @@
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
                    [])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId socketTypeId) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId congestionTypeId) [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
-                   [param('ns3::TypeId', 'socketTypeId')])
+                   [param('ns3::TypeId', 'congestionTypeId')])
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ipv4EndPoint * ns3::TcpL4Protocol::Allocate() [member function]
     cls.add_method('Allocate', 
                    'ns3::Ipv4EndPoint *', 
@@ -10922,6 +12010,40 @@
                    visibility='private', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
@@ -11040,6 +12162,117 @@
     cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
     return
 
+def register_Ns3DsrDsrErrorBuffEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry::DsrErrorBuffEntry(ns3::dsr::DsrErrorBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrErrorBuffEntry const &', 'arg0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffEntry::DsrErrorBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrErrorBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrErrorBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint8_t ns3::dsr::DsrErrorBuffEntry::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrErrorBuffEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
+                   'void', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    cls.add_method('SetPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetProtocol(uint8_t p) [member function]
+    cls.add_method('SetProtocol', 
+                   'void', 
+                   [param('uint8_t', 'p')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSource', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 's')])
+    return
+
+def register_Ns3DsrDsrErrorBuffer_methods(root_module, cls):
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer::DsrErrorBuffer(ns3::dsr::DsrErrorBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrErrorBuffer const &', 'arg0')])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::DsrErrorBuffer::DsrErrorBuffer() [constructor]
+    cls.add_constructor([])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrErrorBuffEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrErrorBuffEntry &', 'entry')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::DropPacketForErrLink(ns3::Ipv4Address source, ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('DropPacketForErrLink', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Enqueue(ns3::dsr::DsrErrorBuffEntry & entry) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrErrorBuffEntry &', 'entry')])
+    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::DsrErrorBuffer::Find(ns3::Ipv4Address dst) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-errorbuff.h (module 'dsr'): std::vector<ns3::dsr::DsrErrorBuffEntry, std::allocator<ns3::dsr::DsrErrorBuffEntry> > & ns3::dsr::DsrErrorBuffer::GetBuffer() [member function]
+    cls.add_method('GetBuffer', 
+                   'std::vector< ns3::dsr::DsrErrorBuffEntry > &', 
+                   [])
+    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrErrorBuffer::GetErrorBufferTimeout() const [member function]
+    cls.add_method('GetErrorBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrErrorBuffer::GetMaxQueueLen() const [member function]
+    cls.add_method('GetMaxQueueLen', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrErrorBuffer::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::SetErrorBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetErrorBufferTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::DsrErrorBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    return
+
 def register_Ns3DsrDsrFsHeader_methods(root_module, cls):
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrFsHeader::DsrFsHeader(ns3::dsr::DsrFsHeader const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrFsHeader const &', 'arg0')])
@@ -11122,93 +12355,291 @@
                    [param('uint16_t', 'sourceId')])
     return
 
-def register_Ns3DsrDsrNetworkQueue_methods(root_module, cls):
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(ns3::dsr::DsrNetworkQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrNetworkQueue const &', 'arg0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue() [constructor]
+def register_Ns3DsrDsrGraReply_methods(root_module, cls):
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply::DsrGraReply(ns3::dsr::DsrGraReply const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrGraReply const &', 'arg0')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::DsrGraReply::DsrGraReply() [constructor]
     cls.add_constructor([])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(uint32_t maxLen, ns3::Time maxDelay) [constructor]
-    cls.add_constructor([param('uint32_t', 'maxLen'), param('ns3::Time', 'maxDelay')])
-    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Dequeue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
-    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Enqueue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
-    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', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::DsrGraReply::AddEntry(ns3::dsr::GraReplyEntry & graTableEntry) [member function]
+    cls.add_method('AddEntry', 
                    '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', 
+                   [param('ns3::dsr::GraReplyEntry &', 'graTableEntry')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::Clear() [member function]
+    cls.add_method('Clear', 
                    'void', 
                    [])
-    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueue::GetMaxNetworkDelay() const [member function]
-    cls.add_method('GetMaxNetworkDelay', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetMaxNetworkSize() const [member function]
-    cls.add_method('GetMaxNetworkSize', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::DsrGraReply::FindAndUpdate(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, ns3::Time gratReplyHoldoff) [member function]
+    cls.add_method('FindAndUpdate', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('ns3::Time', 'gratReplyHoldoff')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): uint32_t ns3::dsr::DsrGraReply::GetGraTableSize() const [member function]
+    cls.add_method('GetGraTableSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): std::vector<ns3::dsr::DsrNetworkQueueEntry, std::allocator<ns3::dsr::DsrNetworkQueueEntry> > & ns3::dsr::DsrNetworkQueue::GetQueue() [member function]
-    cls.add_method('GetQueue', 
-                   'std::vector< ns3::dsr::DsrNetworkQueueEntry > &', 
-                   [])
-    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
-                   [])
-    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrGraReply::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkDelay(ns3::Time delay) [member function]
-    cls.add_method('SetMaxNetworkDelay', 
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::Purge() [member function]
+    cls.add_method('Purge', 
                    'void', 
-                   [param('ns3::Time', 'delay')])
-    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkSize(uint32_t maxSize) [member function]
-    cls.add_method('SetMaxNetworkSize', 
+                   [])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::DsrGraReply::SetGraTableSize(uint32_t g) [member function]
+    cls.add_method('SetGraTableSize', 
                    'void', 
-                   [param('uint32_t', 'maxSize')])
+                   [param('uint32_t', 'g')])
     return
 
-def register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::dsr::DsrNetworkQueueEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrNetworkQueueEntry const &', 'arg0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), ns3::Ptr<ns3::Ipv4Route> r=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('ns3::Ptr< ns3::Ipv4Route >', 'r', default_value='0')])
-    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueueEntry::GetInsertedTimeStamp() const [member function]
-    cls.add_method('GetInsertedTimeStamp', 
+def register_Ns3DsrDsrLinkStab_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab::DsrLinkStab(ns3::dsr::DsrLinkStab const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrLinkStab const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrLinkStab::DsrLinkStab(ns3::Time linkStab=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Time', 'linkStab', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrLinkStab::GetLinkStability() const [member function]
+    cls.add_method('GetLinkStability', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrNetworkQueueEntry::GetIpv4Route() const [member function]
-    cls.add_method('GetIpv4Route', 
-                   'ns3::Ptr< ns3::Ipv4Route >', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrLinkStab::Print() const [member function]
+    cls.add_method('Print', 
+                   'void', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetNextHopAddress() const [member function]
-    cls.add_method('GetNextHopAddress', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrLinkStab::SetLinkStability(ns3::Time linkStab) [member function]
+    cls.add_method('SetLinkStability', 
+                   'void', 
+                   [param('ns3::Time', 'linkStab')])
+    return
+
+def register_Ns3DsrDsrMaintainBuffEntry_methods(root_module, cls):
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry::DsrMaintainBuffEntry(ns3::dsr::DsrMaintainBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrMaintainBuffEntry const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffEntry::DsrMaintainBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address us=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address dst=ns3::Ipv4Address(), uint16_t ackId=0, uint8_t segs=0, ns3::Time exp=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'us', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint16_t', 'ackId', default_value='0'), param('uint8_t', 'segs', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
+    ## dsr-maintain-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrMaintainBuffEntry::GetAckId() const [member function]
+    cls.add_method('GetAckId', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrNetworkQueueEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetDst() const [member function]
+    cls.add_method('GetDst', 
+                   'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetSourceAddress() const [member function]
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrMaintainBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetOurAdd() const [member function]
+    cls.add_method('GetOurAdd', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrMaintainBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrMaintainBuffEntry::GetSegsLeft() const [member function]
+    cls.add_method('GetSegsLeft', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrMaintainBuffEntry::GetSrc() const [member function]
+    cls.add_method('GetSrc', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetAckId(uint16_t ackId) [member function]
+    cls.add_method('SetAckId', 
+                   'void', 
+                   [param('uint16_t', 'ackId')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetDst(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetDst', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
+                   'void', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'n')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetOurAdd(ns3::Ipv4Address us) [member function]
+    cls.add_method('SetOurAdd', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'us')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    cls.add_method('SetPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetSegsLeft(uint8_t segs) [member function]
+    cls.add_method('SetSegsLeft', 
+                   'void', 
+                   [param('uint8_t', 'segs')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffEntry::SetSrc(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSrc', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 's')])
+    return
+
+def register_Ns3DsrDsrMaintainBuffer_methods(root_module, cls):
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer::DsrMaintainBuffer(ns3::dsr::DsrMaintainBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrMaintainBuffer const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::DsrMaintainBuffer::DsrMaintainBuffer() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::AllEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('AllEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::DropPacketWithNextHop(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('DropPacketWithNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Enqueue(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('Enqueue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::Find(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('Find', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrMaintainBuffer::GetMaintainBufferTimeout() const [member function]
+    cls.add_method('GetMaintainBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrMaintainBuffer::GetMaxQueueLen() const [member function]
+    cls.add_method('GetMaxQueueLen', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrMaintainBuffer::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::LinkEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('LinkEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::NetworkEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('NetworkEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::DsrMaintainBuffer::PromiscEqual(ns3::dsr::DsrMaintainBuffEntry & entry) [member function]
+    cls.add_method('PromiscEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'entry')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::SetMaintainBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetMaintainBufferTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::DsrMaintainBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    return
+
+def register_Ns3DsrDsrNetworkQueue_methods(root_module, cls):
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(ns3::dsr::DsrNetworkQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNetworkQueue const &', 'arg0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue() [constructor]
+    cls.add_constructor([])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueue::DsrNetworkQueue(uint32_t maxLen, ns3::Time maxDelay) [constructor]
+    cls.add_constructor([param('uint32_t', 'maxLen'), param('ns3::Time', 'maxDelay')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Dequeue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    cls.add_method('Dequeue', 
+                   'bool', 
+                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'entry')])
+    ## dsr-network-queue.h (module 'dsr'): bool ns3::dsr::DsrNetworkQueue::Enqueue(ns3::dsr::DsrNetworkQueueEntry & entry) [member function]
+    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', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueue::GetMaxNetworkDelay() const [member function]
+    cls.add_method('GetMaxNetworkDelay', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetMaxNetworkSize() const [member function]
+    cls.add_method('GetMaxNetworkSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): std::vector<ns3::dsr::DsrNetworkQueueEntry, std::allocator<ns3::dsr::DsrNetworkQueueEntry> > & ns3::dsr::DsrNetworkQueue::GetQueue() [member function]
+    cls.add_method('GetQueue', 
+                   'std::vector< ns3::dsr::DsrNetworkQueueEntry > &', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): uint32_t ns3::dsr::DsrNetworkQueue::GetSize() [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [])
+    ## dsr-network-queue.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrNetworkQueue::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkDelay(ns3::Time delay) [member function]
+    cls.add_method('SetMaxNetworkDelay', 
+                   'void', 
+                   [param('ns3::Time', 'delay')])
+    ## dsr-network-queue.h (module 'dsr'): void ns3::dsr::DsrNetworkQueue::SetMaxNetworkSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxNetworkSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')])
+    return
+
+def register_Ns3DsrDsrNetworkQueueEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::dsr::DsrNetworkQueueEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNetworkQueueEntry const &', 'arg0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::dsr::DsrNetworkQueueEntry::DsrNetworkQueueEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), ns3::Ptr<ns3::Ipv4Route> r=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('ns3::Ptr< ns3::Ipv4Route >', 'r', default_value='0')])
+    ## dsr-network-queue.h (module 'dsr'): ns3::Time ns3::dsr::DsrNetworkQueueEntry::GetInsertedTimeStamp() const [member function]
+    cls.add_method('GetInsertedTimeStamp', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrNetworkQueueEntry::GetIpv4Route() const [member function]
+    cls.add_method('GetIpv4Route', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetNextHopAddress() const [member function]
+    cls.add_method('GetNextHopAddress', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrNetworkQueueEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-network-queue.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrNetworkQueueEntry::GetSourceAddress() const [member function]
     cls.add_method('GetSourceAddress', 
                    'ns3::Ipv4Address', 
                    [], 
@@ -11235,6 +12666,22 @@
                    [param('ns3::Ipv4Address', 'addr')])
     return
 
+def register_Ns3DsrDsrNodeStab_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab::DsrNodeStab(ns3::dsr::DsrNodeStab const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrNodeStab const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrNodeStab::DsrNodeStab(ns3::Time nodeStab=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('ns3::Time', 'nodeStab', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrNodeStab::GetNodeStability() const [member function]
+    cls.add_method('GetNodeStability', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrNodeStab::SetNodeStability(ns3::Time nodeStab) [member function]
+    cls.add_method('SetNodeStability', 
+                   'void', 
+                   [param('ns3::Time', 'nodeStab')])
+    return
+
 def register_Ns3DsrDsrOptionField_methods(root_module, cls):
     ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrOptionField::DsrOptionField(ns3::dsr::DsrOptionField const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrOptionField const &', 'arg0')])
@@ -12000,1514 +13447,1189 @@
                    is_virtual=True)
     return
 
-def register_Ns3DsrDsrRouting_methods(root_module, cls):
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting(ns3::dsr::DsrRouting const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrRouting const &', 'arg0')])
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting() [constructor]
-    cls.add_constructor([])
-    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::AddAckReqHeader(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('AddAckReqHeader', 
+def register_Ns3DsrDsrPassiveBuffEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry::DsrPassiveBuffEntry(ns3::dsr::DsrPassiveBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrPassiveBuffEntry const &', 'arg0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffEntry::DsrPassiveBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), uint16_t i=0, uint16_t f=0, uint8_t seg=0, ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0'), param('uint16_t', 'f', default_value='0'), param('uint8_t', 'seg', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrPassiveBuffEntry::GetExpireTime() const [member function]
+    cls.add_method('GetExpireTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrPassiveBuffEntry::GetFragmentOffset() const [member function]
+    cls.add_method('GetFragmentOffset', 
                    'uint16_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute(ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('AddRoute', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address source) [member function]
-    cls.add_method('AddRoute_Link', 
-                   'bool', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'source')])
-    ## dsr-routing.h (module 'dsr'): int64_t ns3::dsr::DsrRouting::AssignStreams(int64_t stream) [member function]
-    cls.add_method('AssignStreams', 
-                   'int64_t', 
-                   [param('int64_t', 'stream')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CallCancelPacketTimer(uint16_t ackId, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst) [member function]
-    cls.add_method('CallCancelPacketTimer', 
-                   'void', 
-                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelLinkPacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelLinkPacketTimer', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::DsrPassiveBuffEntry::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrPassiveBuffEntry::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet const >', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrPassiveBuffEntry::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::DsrPassiveBuffEntry::GetSegsLeft() const [member function]
+    cls.add_method('GetSegsLeft', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrPassiveBuffEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
                    'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelNetworkPacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelNetworkPacketTimer', 
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    cls.add_method('SetExpireTime', 
                    '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', 
+                   [param('ns3::Time', 'exp')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetFragmentOffset(uint16_t f) [member function]
+    cls.add_method('SetFragmentOffset', 
                    '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', 
+                   [param('uint16_t', 'f')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetIdentification(uint16_t i) [member function]
+    cls.add_method('SetIdentification', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPassivePacketTimer(ns3::dsr::MaintainBuffEntry & mb) [member function]
-    cls.add_method('CancelPassivePacketTimer', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::CancelPassiveTimer(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft) [member function]
-    cls.add_method('CancelPassiveTimer', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelRreqTimer(ns3::Ipv4Address dst, bool isRemove) [member function]
-    cls.add_method('CancelRreqTimer', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'dst'), param('bool', 'isRemove')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CheckSendBuffer() [member function]
-    cls.add_method('CheckSendBuffer', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ConnectCallbacks() [member function]
-    cls.add_method('ConnectCallbacks', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
-    cls.add_method('DeleteAllRoutesIncludeLink', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
-    cls.add_method('FindSourceEntry', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardErrPacket(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ForwardErrPacket', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardPacket(ns3::Ptr<ns3::Packet const> packet, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ipv4Address targetAddress, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ForwardPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'targetAddress'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::dsr::DsrRouting::GetElementsFromContext(std::string context) [member function]
-    cls.add_method('GetElementsFromContext', 
-                   'std::vector< std::string >', 
-                   [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
-    cls.add_method('GetIDfromIP', 
-                   'uint16_t', 
-                   [param('ns3::Ipv4Address', 'address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromID(uint16_t id) [member function]
-    cls.add_method('GetIPfromID', 
-                   'ns3::Ipv4Address', 
-                   [param('uint16_t', 'id')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromMAC(ns3::Mac48Address address) [member function]
-    cls.add_method('GetIPfromMAC', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Mac48Address', 'address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::NetDevice> ns3::dsr::DsrRouting::GetNetDeviceFromContext(std::string context) [member function]
-    cls.add_method('GetNetDeviceFromContext', 
-                   'ns3::Ptr< ns3::NetDevice >', 
-                   [param('std::string', 'context')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNode() const [member function]
-    cls.add_method('GetNode', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNodeWithAddress(ns3::Ipv4Address ipv4Address) [member function]
-    cls.add_method('GetNodeWithAddress', 
-                   'ns3::Ptr< ns3::Node >', 
-                   [param('ns3::Ipv4Address', 'ipv4Address')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrOptions> ns3::dsr::DsrRouting::GetOption(int optionNumber) [member function]
-    cls.add_method('GetOption', 
-                   'ns3::Ptr< ns3::dsr::DsrOptions >', 
-                   [param('int', 'optionNumber')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::PassiveBuffer> ns3::dsr::DsrRouting::GetPassiveBuffer() const [member function]
-    cls.add_method('GetPassiveBuffer', 
-                   'ns3::Ptr< ns3::dsr::PassiveBuffer >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): uint32_t ns3::dsr::DsrRouting::GetPriority(ns3::dsr::DsrMessageType messageType) [member function]
-    cls.add_method('GetPriority', 
-                   'uint32_t', 
-                   [param('ns3::dsr::DsrMessageType', 'messageType')])
-    ## dsr-routing.h (module 'dsr'): int ns3::dsr::DsrRouting::GetProtocolNumber() const [member function]
-    cls.add_method('GetProtocolNumber', 
-                   'int', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::RreqTable> ns3::dsr::DsrRouting::GetRequestTable() const [member function]
-    cls.add_method('GetRequestTable', 
-                   'ns3::Ptr< ns3::dsr::RreqTable >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::RouteCache> ns3::dsr::DsrRouting::GetRouteCache() const [member function]
-    cls.add_method('GetRouteCache', 
-                   'ns3::Ptr< ns3::dsr::RouteCache >', 
-                   [], 
-                   is_const=True)
-    ## dsr-routing.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouting::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::IncreaseRetransTimer() [member function]
-    cls.add_method('IncreaseRetransTimer', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Insert(ns3::Ptr<ns3::dsr::DsrOptions> option) [member function]
-    cls.add_method('Insert', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::DsrOptions >', 'option')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::IsLinkCache() [member function]
-    cls.add_method('IsLinkCache', 
-                   'bool', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::LinkScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('LinkScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::LookupRoute(ns3::Ipv4Address id, ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('LookupRoute', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NetworkScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('NetworkScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PacketNewRoute(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
-    cls.add_method('PacketNewRoute', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::PassiveEntryCheck(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft, uint16_t fragmentOffset, uint16_t identification, bool saveEntry) [member function]
-    cls.add_method('PassiveEntryCheck', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft'), param('uint16_t', 'fragmentOffset'), param('uint16_t', 'identification'), param('bool', 'saveEntry')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PassiveScheduleTimerExpire(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('PassiveScheduleTimerExpire', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
-    cls.add_method('PrintVector', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PriorityScheduler(uint32_t priority, bool continueWithFirst) [member function]
-    cls.add_method('PriorityScheduler', 
-                   'void', 
-                   [param('uint32_t', 'priority'), param('bool', 'continueWithFirst')])
-    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::Process(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address dst, uint8_t * nextHeader, uint8_t protocol, bool & isDropped) [member function]
-    cls.add_method('Process', 
-                   'uint8_t', 
-                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'dst'), param('uint8_t *', 'nextHeader'), param('uint8_t', 'protocol'), param('bool &', 'isDropped')])
-    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
-    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::RouteRequestTimerExpire(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, uint32_t requestId, uint8_t protocol) [member function]
-    cls.add_method('RouteRequestTimerExpire', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SalvagePacket(ns3::Ptr<ns3::Packet const> packet, ns3::Ipv4Address source, ns3::Ipv4Address dst, uint8_t protocol) [member function]
-    cls.add_method('SalvagePacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'dst'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleCachedReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ptr<ns3::Ipv4Route> route, double hops) [member function]
-    cls.add_method('ScheduleCachedReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::Ipv4Route >', 'route'), param('double', 'hops')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInitialReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('ScheduleInitialReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInterRequest(ns3::Ptr<ns3::Packet> packet) [member function]
-    cls.add_method('ScheduleInterRequest', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleLinkPacketRetry(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('ScheduleLinkPacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry(ns3::dsr::MaintainBuffEntry & mb, bool isFirst, uint8_t protocol) [member function]
-    cls.add_method('ScheduleNetworkPacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('bool', 'isFirst'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SchedulePassivePacketRetry(ns3::dsr::MaintainBuffEntry & mb, uint8_t protocol) [member function]
-    cls.add_method('SchedulePassivePacketRetry', 
-                   'void', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleRreqRetry(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, bool nonProp, uint32_t requestId, uint8_t protocol) [member function]
-    cls.add_method('ScheduleRreqRetry', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('bool', 'nonProp'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Scheduler(uint32_t priority) [member function]
-    cls.add_method('Scheduler', 
-                   'void', 
-                   [param('uint32_t', 'priority')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::SearchNextHop(ns3::Ipv4Address ipv4Address, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
-    cls.add_method('SearchNextHop', 
-                   'ns3::Ipv4Address', 
-                   [param('ns3::Ipv4Address', 'ipv4Address'), param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('Send', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendAck(uint16_t ackId, ns3::Ipv4Address destination, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('SendAck', 
-                   'void', 
-                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendBuffTimerExpire() [member function]
-    cls.add_method('SendBuffTimerExpire', 
-                   'void', 
-                   [])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendErrorRequest(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, uint8_t protocol) [member function]
-    cls.add_method('SendErrorRequest', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendGratuitousReply(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & nodeList, uint8_t protocol) [member function]
-    cls.add_method('SendGratuitousReply', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('std::vector< ns3::Ipv4Address > &', 'nodeList'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendInitialRequest(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
-    cls.add_method('SendInitialRequest', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacket(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
-    cls.add_method('SendPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacketFromBuffer(ns3::dsr::DsrOptionSRHeader const & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
-    cls.add_method('SendPacketFromBuffer', 
-                   'void', 
-                   [param('ns3::dsr::DsrOptionSRHeader const &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::SendRealDown(ns3::dsr::DsrNetworkQueueEntry & newEntry) [member function]
-    cls.add_method('SendRealDown', 
-                   'bool', 
-                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'newEntry')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
-    cls.add_method('SendReply', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequest(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source) [member function]
-    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 unreachNode, ns3::Ipv4Address destination, ns3::Ipv4Address originalDst, uint8_t salvage, uint8_t protocol) [member function]
-    cls.add_method('SendUnreachError', 
-                   'void', 
-                   [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', 
-                   [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 >', 'callback')], 
-                   is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::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> callback) [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 >', 'callback')], 
-                   is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
-    cls.add_method('SetNode', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Node >', 'node')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetPassiveBuffer(ns3::Ptr<ns3::dsr::PassiveBuffer> r) [member function]
-    cls.add_method('SetPassiveBuffer', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::PassiveBuffer >', 'r')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRequestTable(ns3::Ptr<ns3::dsr::RreqTable> r) [member function]
-    cls.add_method('SetRequestTable', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::RreqTable >', 'r')])
-    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrRouting::SetRoute(ns3::Ipv4Address nextHop, ns3::Ipv4Address srcAddress) [member function]
-    cls.add_method('SetRoute', 
-                   'ns3::Ptr< ns3::Ipv4Route >', 
-                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ipv4Address', 'srcAddress')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRouteCache(ns3::Ptr<ns3::dsr::RouteCache> r) [member function]
-    cls.add_method('SetRouteCache', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::dsr::RouteCache >', 'r')])
-    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
-    cls.add_method('UpdateRouteEntry', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
-    cls.add_method('UseExtends', 
-                   'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'rt')])
-    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::PROT_NUMBER [variable]
-    cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DoDispose() [member function]
-    cls.add_method('DoDispose', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NotifyNewAggregate() [member function]
-    cls.add_method('NotifyNewAggregate', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3DsrDsrRoutingHeader_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader(ns3::dsr::DsrRoutingHeader const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::DsrRoutingHeader const &', 'arg0')])
-    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader() [constructor]
-    cls.add_constructor([])
-    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
-    cls.add_method('Deserialize', 
-                   'uint32_t', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): ns3::TypeId ns3::dsr::DsrRoutingHeader::GetInstanceTypeId() const [member function]
-    cls.add_method('GetInstanceTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRoutingHeader::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Print(std::ostream & os) const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [param('std::ostream &', 'os')], 
-                   is_const=True, is_virtual=True)
-    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
-    cls.add_method('Serialize', 
-                   'void', 
-                   [param('ns3::Buffer::Iterator', 'start')], 
-                   is_const=True, is_virtual=True)
-    return
-
-def register_Ns3DsrErrorBuffEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry::ErrorBuffEntry(ns3::dsr::ErrorBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ErrorBuffEntry const &', 'arg0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffEntry::ErrorBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::ErrorBuffEntry::GetExpireTime() const [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::ErrorBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint8_t ns3::dsr::ErrorBuffEntry::GetProtocol() const [member function]
-    cls.add_method('GetProtocol', 
-                   'uint8_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ErrorBuffEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
-                   'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
+                   [param('uint16_t', 'i')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
     cls.add_method('SetNextHop', 
                    'void', 
                    [param('ns3::Ipv4Address', 'n')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('SetPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetProtocol(uint8_t p) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetProtocol(uint8_t p) [member function]
     cls.add_method('SetProtocol', 
                    'void', 
                    [param('uint8_t', 'p')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetSegsLeft(uint8_t seg) [member function]
+    cls.add_method('SetSegsLeft', 
+                   'void', 
+                   [param('uint8_t', 'seg')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
     cls.add_method('SetSource', 
                    'void', 
                    [param('ns3::Ipv4Address', 's')])
     return
 
-def register_Ns3DsrErrorBuffer_methods(root_module, cls):
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer::ErrorBuffer(ns3::dsr::ErrorBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ErrorBuffer const &', 'arg0')])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::dsr::ErrorBuffer::ErrorBuffer() [constructor]
+def register_Ns3DsrDsrPassiveBuffer_methods(root_module, cls):
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer::DsrPassiveBuffer(ns3::dsr::DsrPassiveBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrPassiveBuffer const &', 'arg0')])
+    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::DsrPassiveBuffer::DsrPassiveBuffer() [constructor]
     cls.add_constructor([])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::ErrorBuffEntry & entry) [member function]
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::AllEqual(ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
+    cls.add_method('AllEqual', 
+                   'bool', 
+                   [param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
     cls.add_method('Dequeue', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::ErrorBuffEntry &', 'entry')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::DropPacketForErrLink(ns3::Ipv4Address source, ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('DropPacketForErrLink', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Enqueue(ns3::dsr::ErrorBuffEntry & entry) [member function]
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Enqueue(ns3::dsr::DsrPassiveBuffEntry & entry) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::dsr::ErrorBuffEntry &', 'entry')])
-    ## dsr-errorbuff.h (module 'dsr'): bool ns3::dsr::ErrorBuffer::Find(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::dsr::DsrPassiveBuffEntry &', 'entry')])
+    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::DsrPassiveBuffer::Find(ns3::Ipv4Address dst) [member function]
     cls.add_method('Find', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-errorbuff.h (module 'dsr'): std::vector<ns3::dsr::ErrorBuffEntry, std::allocator<ns3::dsr::ErrorBuffEntry> > & ns3::dsr::ErrorBuffer::GetBuffer() [member function]
-    cls.add_method('GetBuffer', 
-                   'std::vector< ns3::dsr::ErrorBuffEntry > &', 
-                   [])
-    ## dsr-errorbuff.h (module 'dsr'): ns3::Time ns3::dsr::ErrorBuffer::GetErrorBufferTimeout() const [member function]
-    cls.add_method('GetErrorBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::ErrorBuffer::GetMaxQueueLen() const [member function]
+    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrPassiveBuffer::GetMaxQueueLen() const [member function]
     cls.add_method('GetMaxQueueLen', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-errorbuff.h (module 'dsr'): uint32_t ns3::dsr::ErrorBuffer::GetSize() [member function]
+    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::DsrPassiveBuffer::GetPassiveBufferTimeout() const [member function]
+    cls.add_method('GetPassiveBufferTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::DsrPassiveBuffer::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::SetErrorBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetErrorBufferTimeout', 
-                   'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-errorbuff.h (module 'dsr'): void ns3::dsr::ErrorBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
-                   'void', 
-                   [param('uint32_t', 'len')])
-    return
-
-def register_Ns3DsrGraReply_methods(root_module, cls):
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply::GraReply(ns3::dsr::GraReply const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::GraReply const &', 'arg0')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReply::GraReply() [constructor]
-    cls.add_constructor([])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::GraReply::AddEntry(ns3::dsr::GraReplyEntry & graTableEntry) [member function]
-    cls.add_method('AddEntry', 
-                   'bool', 
-                   [param('ns3::dsr::GraReplyEntry &', 'graTableEntry')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::Clear() [member function]
-    cls.add_method('Clear', 
-                   'void', 
-                   [])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): bool ns3::dsr::GraReply::FindAndUpdate(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, ns3::Time gratReplyHoldoff) [member function]
-    cls.add_method('FindAndUpdate', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('ns3::Time', 'gratReplyHoldoff')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): uint32_t ns3::dsr::GraReply::GetGraTableSize() const [member function]
-    cls.add_method('GetGraTableSize', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::GraReply::GetTypeId() [member function]
+    ## dsr-passive-buff.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrPassiveBuffer::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::Purge() [member function]
-    cls.add_method('Purge', 
-                   'void', 
-                   [])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): void ns3::dsr::GraReply::SetGraTableSize(uint32_t g) [member function]
-    cls.add_method('SetGraTableSize', 
-                   'void', 
-                   [param('uint32_t', 'g')])
-    return
-
-def register_Ns3DsrGraReplyEntry_methods(root_module, cls):
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::dsr::GraReplyEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::GraReplyEntry const &', 'arg0')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::Ipv4Address t, ns3::Ipv4Address f, ns3::Time h) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 't'), param('ns3::Ipv4Address', 'f'), param('ns3::Time', 'h')])
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_gratReplyHoldoff [variable]
-    cls.add_instance_attribute('m_gratReplyHoldoff', 'ns3::Time', is_const=False)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_hearFrom [variable]
-    cls.add_instance_attribute('m_hearFrom', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_replyTo [variable]
-    cls.add_instance_attribute('m_replyTo', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLink_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::dsr::Link const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::Link const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::Ipv4Address ip1, ns3::Ipv4Address ip2) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip1'), param('ns3::Ipv4Address', 'ip2')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::Link::Print() const [member function]
-    cls.add_method('Print', 
-                   'void', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_high [variable]
-    cls.add_instance_attribute('m_high', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_low [variable]
-    cls.add_instance_attribute('m_low', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLinkKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey() [constructor]
-    cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey(ns3::dsr::LinkKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::LinkKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_nextHop [variable]
-    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_ourAdd [variable]
-    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrLinkStab_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab::LinkStab(ns3::dsr::LinkStab const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::LinkStab const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::LinkStab::LinkStab(ns3::Time linkStab=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Time', 'linkStab', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::LinkStab::GetLinkStability() const [member function]
-    cls.add_method('GetLinkStability', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::LinkStab::Print() const [member function]
-    cls.add_method('Print', 
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    cls.add_method('SetMaxQueueLen', 
                    'void', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::LinkStab::SetLinkStability(ns3::Time linkStab) [member function]
-    cls.add_method('SetLinkStability', 
+                   [param('uint32_t', 'len')])
+    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::DsrPassiveBuffer::SetPassiveBufferTimeout(ns3::Time t) [member function]
+    cls.add_method('SetPassiveBufferTimeout', 
                    'void', 
-                   [param('ns3::Time', 'linkStab')])
+                   [param('ns3::Time', 't')])
     return
 
-def register_Ns3DsrMaintainBuffEntry_methods(root_module, cls):
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry::MaintainBuffEntry(ns3::dsr::MaintainBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::MaintainBuffEntry const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffEntry::MaintainBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address us=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address dst=ns3::Ipv4Address(), uint16_t ackId=0, uint8_t segs=0, ns3::Time exp=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'us', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('uint16_t', 'ackId', default_value='0'), param('uint8_t', 'segs', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
-    ## dsr-maintain-buff.h (module 'dsr'): uint16_t ns3::dsr::MaintainBuffEntry::GetAckId() const [member function]
-    cls.add_method('GetAckId', 
-                   'uint16_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetDst() const [member function]
-    cls.add_method('GetDst', 
+def register_Ns3DsrDsrReceivedRreqEntry_methods(root_module, cls):
+    cls.add_binary_comparison_operator('==')
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry::DsrReceivedRreqEntry(ns3::dsr::DsrReceivedRreqEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrReceivedRreqEntry const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrReceivedRreqEntry::DsrReceivedRreqEntry(ns3::Ipv4Address d=ns3::Ipv4Address(), uint16_t i=0) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrReceivedRreqEntry::GetDestination() const [member function]
+    cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::MaintainBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Time ns3::dsr::DsrReceivedRreqEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetOurAdd() const [member function]
-    cls.add_method('GetOurAdd', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::MaintainBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint8_t ns3::dsr::MaintainBuffEntry::GetSegsLeft() const [member function]
-    cls.add_method('GetSegsLeft', 
-                   'uint8_t', 
+    ## dsr-rreq-table.h (module 'dsr'): uint16_t ns3::dsr::DsrReceivedRreqEntry::GetIdentification() const [member function]
+    cls.add_method('GetIdentification', 
+                   'uint16_t', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::MaintainBuffEntry::GetSrc() const [member function]
-    cls.add_method('GetSrc', 
+    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrReceivedRreqEntry::GetSource() const [member function]
+    cls.add_method('GetSource', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetAckId(uint16_t ackId) [member function]
-    cls.add_method('SetAckId', 
-                   'void', 
-                   [param('uint16_t', 'ackId')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetDst(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetDst', 
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    cls.add_method('SetDestination', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+                   [param('ns3::Ipv4Address', 'd')])
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetNextHop', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetOurAdd(ns3::Ipv4Address us) [member function]
-    cls.add_method('SetOurAdd', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'us')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
-    cls.add_method('SetPacket', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetSegsLeft(uint8_t segs) [member function]
-    cls.add_method('SetSegsLeft', 
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetIdentification(uint16_t i) [member function]
+    cls.add_method('SetIdentification', 
                    'void', 
-                   [param('uint8_t', 'segs')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffEntry::SetSrc(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSrc', 
+                   [param('uint16_t', 'i')])
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrReceivedRreqEntry::SetSource(ns3::Ipv4Address s) [member function]
+    cls.add_method('SetSource', 
                    'void', 
                    [param('ns3::Ipv4Address', 's')])
     return
 
-def register_Ns3DsrMaintainBuffer_methods(root_module, cls):
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer::MaintainBuffer(ns3::dsr::MaintainBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::MaintainBuffer const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::MaintainBuffer::MaintainBuffer() [constructor]
+def register_Ns3DsrDsrRouteCache_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::DsrRouteCache(ns3::dsr::DsrRouteCache const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCache const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::DsrRouteCache() [constructor]
     cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::AllEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('AllEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::DropPacketWithNextHop(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('DropPacketWithNextHop', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::AddArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    cls.add_method('AddArpCache', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Enqueue(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('Enqueue', 
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::AddNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Ipv4Address ownAddress, ns3::Time expire) [member function]
+    cls.add_method('AddNeighbor', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Ipv4Address', 'ownAddress'), param('ns3::Time', 'expire')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::AddRoute(ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('AddRoute', 
                    'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::Find(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('Find', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address node) [member function]
+    cls.add_method('AddRoute_Link', 
                    'bool', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'node')])
+    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::DsrRouteCache::CheckUniqueAckId(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('CheckUniqueAckId', 
+                   'uint16_t', 
                    [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::Time ns3::dsr::MaintainBuffer::GetMaintainBufferTimeout() const [member function]
-    cls.add_method('GetMaintainBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::MaintainBuffer::GetMaxQueueLen() const [member function]
-    cls.add_method('GetMaxQueueLen', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-maintain-buff.h (module 'dsr'): uint32_t ns3::dsr::MaintainBuffer::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Clear() [member function]
+    cls.add_method('Clear', 
+                   'void', 
                    [])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::LinkEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('LinkEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::NetworkEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('NetworkEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): bool ns3::dsr::MaintainBuffer::PromiscEqual(ns3::dsr::MaintainBuffEntry & entry) [member function]
-    cls.add_method('PromiscEqual', 
-                   'bool', 
-                   [param('ns3::dsr::MaintainBuffEntry &', 'entry')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::SetMaintainBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetMaintainBufferTimeout', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ClearMac() [member function]
+    cls.add_method('ClearMac', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-maintain-buff.h (module 'dsr'): void ns3::dsr::MaintainBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::DelArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
+    cls.add_method('DelArpCache', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    return
-
-def register_Ns3DsrNetworkKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey() [constructor]
-    cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey(ns3::dsr::NetworkKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::NetworkKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ackId [variable]
-    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_nextHop [variable]
-    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ourAdd [variable]
-    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrNodeStab_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab::NodeStab(ns3::dsr::NodeStab const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::NodeStab const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::NodeStab::NodeStab(ns3::Time nodeStab=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('ns3::Time', 'nodeStab', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::NodeStab::GetNodeStability() const [member function]
-    cls.add_method('GetNodeStability', 
+                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
+    cls.add_method('DeleteAllRoutesIncludeLink', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::DeleteRoute(ns3::Ipv4Address dst) [member function]
+    cls.add_method('DeleteRoute', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::FindSameRoute(ns3::dsr::DsrRouteCacheEntry & rt, std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > & rtVector) [member function]
+    cls.add_method('FindSameRoute', 
+                   'bool', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt'), param('std::list< ns3::dsr::DsrRouteCacheEntry > &', 'rtVector')])
+    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::DsrRouteCache::GetAckSize() [member function]
+    cls.add_method('GetAckSize', 
+                   'uint16_t', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetBadLinkLifetime() const [member function]
+    cls.add_method('GetBadLinkLifetime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::NodeStab::SetNodeStability(ns3::Time nodeStab) [member function]
-    cls.add_method('SetNodeStability', 
-                   'void', 
-                   [param('ns3::Time', 'nodeStab')])
-    return
-
-def register_Ns3DsrPassiveBuffEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry::PassiveBuffEntry(ns3::dsr::PassiveBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveBuffEntry const &', 'arg0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffEntry::PassiveBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Ipv4Address s=ns3::Ipv4Address(), ns3::Ipv4Address n=ns3::Ipv4Address(), uint16_t i=0, uint16_t f=0, uint8_t seg=0, ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 's', default_value='ns3::Ipv4Address()'), param('ns3::Ipv4Address', 'n', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0'), param('uint16_t', 'f', default_value='0'), param('uint8_t', 'seg', default_value='0'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetCacheTimeout() const [member function]
+    cls.add_method('GetCacheTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::DsrRouteCache::GetCallback() const [member function]
+    cls.add_method('GetCallback', 
+                   'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::PassiveBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
+                   [param('ns3::Ipv4Address', 'addr')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetInitStability() const [member function]
+    cls.add_method('GetInitStability', 
+                   'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::PassiveBuffEntry::GetFragmentOffset() const [member function]
-    cls.add_method('GetFragmentOffset', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::DsrRouteCache::GetMaxCacheLen() const [member function]
+    cls.add_method('GetMaxCacheLen', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint16_t ns3::dsr::PassiveBuffEntry::GetIdentification() const [member function]
-    cls.add_method('GetIdentification', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::DsrRouteCache::GetMaxEntriesEachDst() const [member function]
+    cls.add_method('GetMaxEntriesEachDst', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetNextHop() const [member function]
-    cls.add_method('GetNextHop', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetMinLifeTime() const [member function]
+    cls.add_method('GetMinLifeTime', 
+                   'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::PassiveBuffEntry::GetPacket() const [member function]
-    cls.add_method('GetPacket', 
-                   'ns3::Ptr< ns3::Packet const >', 
+    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::DsrRouteCache::GetStabilityDecrFactor() const [member function]
+    cls.add_method('GetStabilityDecrFactor', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::PassiveBuffEntry::GetProtocol() const [member function]
-    cls.add_method('GetProtocol', 
-                   'uint8_t', 
+    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::DsrRouteCache::GetStabilityIncrFactor() const [member function]
+    cls.add_method('GetStabilityIncrFactor', 
+                   'uint64_t', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint8_t ns3::dsr::PassiveBuffEntry::GetSegsLeft() const [member function]
-    cls.add_method('GetSegsLeft', 
-                   'uint8_t', 
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::GetSubRoute() const [member function]
+    cls.add_method('GetSubRoute', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::PassiveBuffEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::DsrRouteCache::GetTxErrorCallback() const [member function]
+    cls.add_method('GetTxErrorCallback', 
+                   'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
                    [], 
                    is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
+    ## dsr-rcache.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouteCache::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCache::GetUseExtends() const [member function]
+    cls.add_method('GetUseExtends', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::IsLinkCache() [member function]
+    cls.add_method('IsLinkCache', 
+                   'bool', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::IsNeighbor(ns3::Ipv4Address addr) [member function]
+    cls.add_method('IsNeighbor', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'addr')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Mac48Address ns3::dsr::DsrRouteCache::LookupMacAddress(ns3::Ipv4Address arg0) [member function]
+    cls.add_method('LookupMacAddress', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::LookupRoute(ns3::Ipv4Address id, ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('LookupRoute', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Print(std::ostream & os) [member function]
+    cls.add_method('Print', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
+                   [param('std::ostream &', 'os')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PrintRouteVector(std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > route) [member function]
+    cls.add_method('PrintRouteVector', 
                    'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetFragmentOffset(uint16_t f) [member function]
-    cls.add_method('SetFragmentOffset', 
+                   [param('std::list< ns3::dsr::DsrRouteCacheEntry >', 'route')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+    cls.add_method('PrintVector', 
                    'void', 
-                   [param('uint16_t', 'f')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetIdentification(uint16_t i) [member function]
-    cls.add_method('SetIdentification', 
+                   [param('std::vector< ns3::Ipv4Address > &', 'vec')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ProcessTxError(ns3::WifiMacHeader const & arg0) [member function]
+    cls.add_method('ProcessTxError', 
                    'void', 
-                   [param('uint16_t', 'i')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetNextHop(ns3::Ipv4Address n) [member function]
-    cls.add_method('SetNextHop', 
+                   [param('ns3::WifiMacHeader const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::Purge() [member function]
+    cls.add_method('Purge', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'n')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
-    cls.add_method('SetPacket', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PurgeLinkNode() [member function]
+    cls.add_method('PurgeLinkNode', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetProtocol(uint8_t p) [member function]
-    cls.add_method('SetProtocol', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::PurgeMac() [member function]
+    cls.add_method('PurgeMac', 
                    'void', 
-                   [param('uint8_t', 'p')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetSegsLeft(uint8_t seg) [member function]
-    cls.add_method('SetSegsLeft', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::RebuildBestRouteTable(ns3::Ipv4Address source) [member function]
+    cls.add_method('RebuildBestRouteTable', 
                    'void', 
-                   [param('uint8_t', 'seg')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffEntry::SetSource(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSource', 
+                   [param('ns3::Ipv4Address', 'source')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::RemoveLastEntry(std::list<ns3::dsr::DsrRouteCacheEntry, std::allocator<ns3::dsr::DsrRouteCacheEntry> > & rtVector) [member function]
+    cls.add_method('RemoveLastEntry', 
+                   'void', 
+                   [param('std::list< ns3::dsr::DsrRouteCacheEntry > &', 'rtVector')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::ScheduleTimer() [member function]
+    cls.add_method('ScheduleTimer', 
                    'void', 
-                   [param('ns3::Ipv4Address', 's')])
-    return
-
-def register_Ns3DsrPassiveBuffer_methods(root_module, cls):
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer::PassiveBuffer(ns3::dsr::PassiveBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveBuffer const &', 'arg0')])
-    ## dsr-passive-buff.h (module 'dsr'): ns3::dsr::PassiveBuffer::PassiveBuffer() [constructor]
-    cls.add_constructor([])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::AllEqual(ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('AllEqual', 
-                   'bool', 
-                   [param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('Dequeue', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Enqueue(ns3::dsr::PassiveBuffEntry & entry) [member function]
-    cls.add_method('Enqueue', 
-                   'bool', 
-                   [param('ns3::dsr::PassiveBuffEntry &', 'entry')])
-    ## dsr-passive-buff.h (module 'dsr'): bool ns3::dsr::PassiveBuffer::Find(ns3::Ipv4Address dst) [member function]
-    cls.add_method('Find', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::PassiveBuffer::GetMaxQueueLen() const [member function]
-    cls.add_method('GetMaxQueueLen', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): ns3::Time ns3::dsr::PassiveBuffer::GetPassiveBufferTimeout() const [member function]
-    cls.add_method('GetPassiveBufferTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-passive-buff.h (module 'dsr'): uint32_t ns3::dsr::PassiveBuffer::GetSize() [member function]
-    cls.add_method('GetSize', 
-                   'uint32_t', 
                    [])
-    ## dsr-passive-buff.h (module 'dsr'): static ns3::TypeId ns3::dsr::PassiveBuffer::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffer::SetMaxQueueLen(uint32_t len) [member function]
-    cls.add_method('SetMaxQueueLen', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetBadLinkLifetime(ns3::Time t) [member function]
+    cls.add_method('SetBadLinkLifetime', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    ## dsr-passive-buff.h (module 'dsr'): void ns3::dsr::PassiveBuffer::SetPassiveBufferTimeout(ns3::Time t) [member function]
-    cls.add_method('SetPassiveBufferTimeout', 
+                   [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCacheTimeout(ns3::Time t) [member function]
+    cls.add_method('SetCacheTimeout', 
                    'void', 
                    [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCacheType(std::string type) [member function]
+    cls.add_method('SetCacheType', 
+                   'void', 
+                   [param('std::string', 'type')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetInitStability(ns3::Time initStability) [member function]
+    cls.add_method('SetInitStability', 
+                   'void', 
+                   [param('ns3::Time', 'initStability')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMaxCacheLen(uint32_t len) [member function]
+    cls.add_method('SetMaxCacheLen', 
+                   'void', 
+                   [param('uint32_t', 'len')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMaxEntriesEachDst(uint32_t entries) [member function]
+    cls.add_method('SetMaxEntriesEachDst', 
+                   'void', 
+                   [param('uint32_t', 'entries')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetMinLifeTime(ns3::Time minLifeTime) [member function]
+    cls.add_method('SetMinLifeTime', 
+                   'void', 
+                   [param('ns3::Time', 'minLifeTime')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetStabilityDecrFactor(uint64_t decrFactor) [member function]
+    cls.add_method('SetStabilityDecrFactor', 
+                   'void', 
+                   [param('uint64_t', 'decrFactor')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetStabilityIncrFactor(uint64_t incrFactor) [member function]
+    cls.add_method('SetStabilityIncrFactor', 
+                   'void', 
+                   [param('uint64_t', 'incrFactor')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetSubRoute(bool subRoute) [member function]
+    cls.add_method('SetSubRoute', 
+                   'void', 
+                   [param('bool', 'subRoute')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::SetUseExtends(ns3::Time useExtends) [member function]
+    cls.add_method('SetUseExtends', 
+                   'void', 
+                   [param('ns3::Time', 'useExtends')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UpdateNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Time expire) [member function]
+    cls.add_method('UpdateNeighbor', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Time', 'expire')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UpdateNetGraph() [member function]
+    cls.add_method('UpdateNetGraph', 
+                   'void', 
+                   [])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCache::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
+    cls.add_method('UpdateRouteEntry', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'dst')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCache::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
+    cls.add_method('UseExtends', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv4Address >', 'rt')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_arp [variable]
+    cls.add_instance_attribute('m_arp', 'std::vector< ns3::Ptr< ns3::ArpCache > >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_delay [variable]
+    cls.add_instance_attribute('m_delay', 'ns3::Time', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_handleLinkFailure [variable]
+    cls.add_instance_attribute('m_handleLinkFailure', 'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_nb [variable]
+    cls.add_instance_attribute('m_nb', 'std::vector< ns3::dsr::DsrRouteCache::Neighbor >', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_ntimer [variable]
+    cls.add_instance_attribute('m_ntimer', 'ns3::Timer', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::m_txErrorCallback [variable]
+    cls.add_instance_attribute('m_txErrorCallback', 'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     return
 
-def register_Ns3DsrPassiveKey_methods(root_module, cls):
-    cls.add_binary_comparison_operator('<')
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey() [constructor]
+def register_Ns3DsrDsrRouteCacheNeighbor_methods(root_module, cls):
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor(ns3::dsr::DsrRouteCache::Neighbor const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCache::Neighbor const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor(ns3::Ipv4Address ip, ns3::Mac48Address mac, ns3::Time t) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('ns3::Mac48Address', 'mac'), param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::Neighbor() [constructor]
     cls.add_constructor([])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey(ns3::dsr::PassiveKey const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::PassiveKey const &', 'arg0')])
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_ackId [variable]
-    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_destination [variable]
-    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_segsLeft [variable]
-    cls.add_instance_attribute('m_segsLeft', 'uint8_t', is_const=False)
-    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_source [variable]
-    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::close [variable]
+    cls.add_instance_attribute('close', 'bool', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_expireTime [variable]
+    cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_hardwareAddress [variable]
+    cls.add_instance_attribute('m_hardwareAddress', 'ns3::Mac48Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCache::Neighbor::m_neighborAddress [variable]
+    cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
     return
 
-def register_Ns3DsrReceivedRreqEntry_methods(root_module, cls):
+def register_Ns3DsrDsrRouteCacheEntry_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry::ReceivedRreqEntry(ns3::dsr::ReceivedRreqEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::ReceivedRreqEntry const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::ReceivedRreqEntry::ReceivedRreqEntry(ns3::Ipv4Address d=ns3::Ipv4Address(), uint16_t i=0) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('uint16_t', 'i', default_value='0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ReceivedRreqEntry::GetDestination() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry::DsrRouteCacheEntry(ns3::dsr::DsrRouteCacheEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouteCacheEntry const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::DsrRouteCacheEntry::DsrRouteCacheEntry(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > const & ip=std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >(), ns3::Ipv4Address dst=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( )) [constructor]
+    cls.add_constructor([param('std::vector< ns3::Ipv4Address > const &', 'ip', default_value='std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCacheEntry::GetBlacklistTimeout() const [member function]
+    cls.add_method('GetBlacklistTimeout', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouteCacheEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Time ns3::dsr::ReceivedRreqEntry::GetExpireTime() const [member function]
+    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::DsrRouteCacheEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint16_t ns3::dsr::ReceivedRreqEntry::GetIdentification() const [member function]
-    cls.add_method('GetIdentification', 
-                   'uint16_t', 
+    ## dsr-rcache.h (module 'dsr'): std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > ns3::dsr::DsrRouteCacheEntry::GetVector() const [member function]
+    cls.add_method('GetVector', 
+                   'std::vector< ns3::Ipv4Address >', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::ReceivedRreqEntry::GetSource() const [member function]
-    cls.add_method('GetSource', 
-                   'ns3::Ipv4Address', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::Invalidate(ns3::Time badLinkLifetime) [member function]
+    cls.add_method('Invalidate', 
+                   'void', 
+                   [param('ns3::Time', 'badLinkLifetime')])
+    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::DsrRouteCacheEntry::IsUnidirectional() const [member function]
+    cls.add_method('IsUnidirectional', 
+                   'bool', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetBlacklistTimeout(ns3::Time t) [member function]
+    cls.add_method('SetBlacklistTimeout', 
+                   'void', 
+                   [param('ns3::Time', 't')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetDestination(ns3::Ipv4Address d) [member function]
     cls.add_method('SetDestination', 
                    'void', 
                    [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetExpireTime(ns3::Time exp) [member function]
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetIdentification(uint16_t i) [member function]
-    cls.add_method('SetIdentification', 
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetUnidirectional(bool u) [member function]
+    cls.add_method('SetUnidirectional', 
                    'void', 
-                   [param('uint16_t', 'i')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::ReceivedRreqEntry::SetSource(ns3::Ipv4Address s) [member function]
-    cls.add_method('SetSource', 
+                   [param('bool', 'u')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::DsrRouteCacheEntry::SetVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > v) [member function]
+    cls.add_method('SetVector', 
                    'void', 
-                   [param('ns3::Ipv4Address', 's')])
+                   [param('std::vector< ns3::Ipv4Address >', 'v')])
     return
 
-def register_Ns3DsrRouteCache_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::RouteCache(ns3::dsr::RouteCache const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCache const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::RouteCache() [constructor]
+def register_Ns3DsrDsrRouting_methods(root_module, cls):
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting(ns3::dsr::DsrRouting const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRouting const &', 'arg0')])
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::DsrRouting() [constructor]
     cls.add_constructor([])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::AddArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
-    cls.add_method('AddArpCache', 
+    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::AddAckReqHeader(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('AddAckReqHeader', 
+                   'uint16_t', 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Address', 'nextHop')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute(ns3::dsr::DsrRouteCacheEntry & rt) [member function]
+    cls.add_method('AddRoute', 
+                   'bool', 
+                   [param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address source) [member function]
+    cls.add_method('AddRoute_Link', 
+                   'bool', 
+                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'source')])
+    ## dsr-routing.h (module 'dsr'): int64_t ns3::dsr::DsrRouting::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CallCancelPacketTimer(uint16_t ackId, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst) [member function]
+    cls.add_method('CallCancelPacketTimer', 
+                   'void', 
+                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelLinkPacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelLinkPacketTimer', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelNetworkPacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelNetworkPacketTimer', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::AddNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Ipv4Address ownAddress, ns3::Time expire) [member function]
-    cls.add_method('AddNeighbor', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketAllTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPacketAllTimer', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Ipv4Address', 'ownAddress'), param('ns3::Time', 'expire')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::AddRoute(ns3::dsr::RouteCacheEntry & rt) [member function]
-    cls.add_method('AddRoute', 
-                   'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::AddRoute_Link(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodelist, ns3::Ipv4Address node) [member function]
-    cls.add_method('AddRoute_Link', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPacketTimerNextHop(ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('CancelPacketTimerNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelPassivePacketTimer(ns3::dsr::DsrMaintainBuffEntry & mb) [member function]
+    cls.add_method('CancelPassivePacketTimer', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::CancelPassiveTimer(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft) [member function]
+    cls.add_method('CancelPassiveTimer', 
                    'bool', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodelist'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::RouteCache::CheckUniqueAckId(ns3::Ipv4Address nextHop) [member function]
-    cls.add_method('CheckUniqueAckId', 
-                   'uint16_t', 
-                   [param('ns3::Ipv4Address', 'nextHop')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Clear() [member function]
-    cls.add_method('Clear', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CancelRreqTimer(ns3::Ipv4Address dst, bool isRemove) [member function]
+    cls.add_method('CancelRreqTimer', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ClearMac() [member function]
-    cls.add_method('ClearMac', 
+                   [param('ns3::Ipv4Address', 'dst'), param('bool', 'isRemove')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::CheckSendBuffer() [member function]
+    cls.add_method('CheckSendBuffer', 
                    'void', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DelArpCache(ns3::Ptr<ns3::ArpCache> arg0) [member function]
-    cls.add_method('DelArpCache', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ConnectCallbacks() [member function]
+    cls.add_method('ConnectCallbacks', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ArpCache >', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
+                   [])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DeleteAllRoutesIncludeLink(ns3::Ipv4Address errorSrc, ns3::Ipv4Address unreachNode, ns3::Ipv4Address node) [member function]
     cls.add_method('DeleteAllRoutesIncludeLink', 
                    'void', 
                    [param('ns3::Ipv4Address', 'errorSrc'), param('ns3::Ipv4Address', 'unreachNode'), param('ns3::Ipv4Address', 'node')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::DeleteRoute(ns3::Ipv4Address dst) [member function]
-    cls.add_method('DeleteRoute', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::FindSameRoute(ns3::dsr::RouteCacheEntry & rt, std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
-    cls.add_method('FindSameRoute', 
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
+    cls.add_method('FindSourceEntry', 
                    'bool', 
-                   [param('ns3::dsr::RouteCacheEntry &', 'rt'), param('std::list< ns3::dsr::RouteCacheEntry > &', 'rtVector')])
-    ## dsr-rcache.h (module 'dsr'): uint16_t ns3::dsr::RouteCache::GetAckSize() [member function]
-    cls.add_method('GetAckSize', 
-                   'uint16_t', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetBadLinkLifetime() const [member function]
-    cls.add_method('GetBadLinkLifetime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetCacheTimeout() const [member function]
-    cls.add_method('GetCacheTimeout', 
-                   'ns3::Time', 
+                   [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardErrPacket(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ForwardErrPacket', 
+                   'void', 
+                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ForwardPacket(ns3::Ptr<ns3::Packet const> packet, ns3::dsr::DsrOptionSRHeader & sourceRoute, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ipv4Address targetAddress, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ForwardPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::dsr::DsrOptionSRHeader &', 'sourceRoute'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'targetAddress'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::RouteCache::GetCallback() const [member function]
-    cls.add_method('GetCallback', 
-                   'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): 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::dsr::DsrRouting::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_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetExpireTime(ns3::Ipv4Address addr) [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
-                   [param('ns3::Ipv4Address', 'addr')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetInitStability() const [member function]
-    cls.add_method('GetInitStability', 
-                   'ns3::Time', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ns3::dsr::DsrRouting::GetElementsFromContext(std::string context) [member function]
+    cls.add_method('GetElementsFromContext', 
+                   'std::vector< std::string >', 
+                   [param('std::string', 'context')])
+    ## dsr-routing.h (module 'dsr'): uint16_t ns3::dsr::DsrRouting::GetIDfromIP(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetIDfromIP', 
+                   'uint16_t', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromID(uint16_t id) [member function]
+    cls.add_method('GetIPfromID', 
+                   'ns3::Ipv4Address', 
+                   [param('uint16_t', 'id')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::GetIPfromMAC(ns3::Mac48Address address) [member function]
+    cls.add_method('GetIPfromMAC', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Mac48Address', 'address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::NetDevice> ns3::dsr::DsrRouting::GetNetDeviceFromContext(std::string context) [member function]
+    cls.add_method('GetNetDeviceFromContext', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('std::string', 'context')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::RouteCache::GetMaxCacheLen() const [member function]
-    cls.add_method('GetMaxCacheLen', 
-                   'uint32_t', 
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Node> ns3::dsr::DsrRouting::GetNodeWithAddress(ns3::Ipv4Address ipv4Address) [member function]
+    cls.add_method('GetNodeWithAddress', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [param('ns3::Ipv4Address', 'ipv4Address')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrOptions> ns3::dsr::DsrRouting::GetOption(int optionNumber) [member function]
+    cls.add_method('GetOption', 
+                   'ns3::Ptr< ns3::dsr::DsrOptions >', 
+                   [param('int', 'optionNumber')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrPassiveBuffer> ns3::dsr::DsrRouting::GetPassiveBuffer() const [member function]
+    cls.add_method('GetPassiveBuffer', 
+                   'ns3::Ptr< ns3::dsr::DsrPassiveBuffer >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint32_t ns3::dsr::RouteCache::GetMaxEntriesEachDst() const [member function]
-    cls.add_method('GetMaxEntriesEachDst', 
+    ## dsr-routing.h (module 'dsr'): uint32_t ns3::dsr::DsrRouting::GetPriority(ns3::dsr::DsrMessageType messageType) [member function]
+    cls.add_method('GetPriority', 
                    'uint32_t', 
+                   [param('ns3::dsr::DsrMessageType', 'messageType')])
+    ## dsr-routing.h (module 'dsr'): int ns3::dsr::DsrRouting::GetProtocolNumber() const [member function]
+    cls.add_method('GetProtocolNumber', 
+                   'int', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetMinLifeTime() const [member function]
-    cls.add_method('GetMinLifeTime', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::RouteCache::GetStabilityDecrFactor() const [member function]
-    cls.add_method('GetStabilityDecrFactor', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): uint64_t ns3::dsr::RouteCache::GetStabilityIncrFactor() const [member function]
-    cls.add_method('GetStabilityIncrFactor', 
-                   'uint64_t', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::GetSubRoute() const [member function]
-    cls.add_method('GetSubRoute', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrRreqTable> ns3::dsr::DsrRouting::GetRequestTable() const [member function]
+    cls.add_method('GetRequestTable', 
+                   'ns3::Ptr< ns3::dsr::DsrRreqTable >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Callback<void, ns3::WifiMacHeader const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> ns3::dsr::RouteCache::GetTxErrorCallback() const [member function]
-    cls.add_method('GetTxErrorCallback', 
-                   'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::dsr::DsrRouteCache> ns3::dsr::DsrRouting::GetRouteCache() const [member function]
+    cls.add_method('GetRouteCache', 
+                   'ns3::Ptr< ns3::dsr::DsrRouteCache >', 
                    [], 
                    is_const=True)
-    ## dsr-rcache.h (module 'dsr'): static ns3::TypeId ns3::dsr::RouteCache::GetTypeId() [member function]
+    ## dsr-routing.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRouting::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCache::GetUseExtends() const [member function]
-    cls.add_method('GetUseExtends', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsLinkCache() [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::IncreaseRetransTimer() [member function]
+    cls.add_method('IncreaseRetransTimer', 
+                   'void', 
+                   [])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Insert(ns3::Ptr<ns3::dsr::DsrOptions> option) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::dsr::DsrOptions >', 'option')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::IsLinkCache() [member function]
     cls.add_method('IsLinkCache', 
                    'bool', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::IsNeighbor(ns3::Ipv4Address addr) [member function]
-    cls.add_method('IsNeighbor', 
-                   'bool', 
-                   [param('ns3::Ipv4Address', 'addr')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Mac48Address ns3::dsr::RouteCache::LookupMacAddress(ns3::Ipv4Address arg0) [member function]
-    cls.add_method('LookupMacAddress', 
-                   'ns3::Mac48Address', 
-                   [param('ns3::Ipv4Address', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::LookupRoute(ns3::Ipv4Address id, ns3::dsr::RouteCacheEntry & rt) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::LinkScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('LinkScheduleTimerExpire', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::LookupRoute(ns3::Ipv4Address id, ns3::dsr::DsrRouteCacheEntry & rt) [member function]
     cls.add_method('LookupRoute', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::RouteCacheEntry &', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Print(std::ostream & os) [member function]
-    cls.add_method('Print', 
+                   [param('ns3::Ipv4Address', 'id'), param('ns3::dsr::DsrRouteCacheEntry &', 'rt')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NetworkScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('NetworkScheduleTimerExpire', 
                    'void', 
-                   [param('std::ostream &', 'os')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PrintRouteVector(std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > route) [member function]
-    cls.add_method('PrintRouteVector', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PacketNewRoute(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    cls.add_method('PacketNewRoute', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::PassiveEntryCheck(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t segsLeft, uint16_t fragmentOffset, uint16_t identification, bool saveEntry) [member function]
+    cls.add_method('PassiveEntryCheck', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'segsLeft'), param('uint16_t', 'fragmentOffset'), param('uint16_t', 'identification'), param('bool', 'saveEntry')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PassiveScheduleTimerExpire(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('PassiveScheduleTimerExpire', 
                    'void', 
-                   [param('std::list< ns3::dsr::RouteCacheEntry >', 'route')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PrintVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
     cls.add_method('PrintVector', 
                    'void', 
                    [param('std::vector< ns3::Ipv4Address > &', 'vec')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ProcessTxError(ns3::WifiMacHeader const & arg0) [member function]
-    cls.add_method('ProcessTxError', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::PriorityScheduler(uint32_t priority, bool continueWithFirst) [member function]
+    cls.add_method('PriorityScheduler', 
                    'void', 
-                   [param('ns3::WifiMacHeader const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::Purge() [member function]
-    cls.add_method('Purge', 
+                   [param('uint32_t', 'priority'), param('bool', 'continueWithFirst')])
+    ## dsr-routing.h (module 'dsr'): uint8_t ns3::dsr::DsrRouting::Process(ns3::Ptr<ns3::Packet> & packet, ns3::Ipv4Header const & ipv4Header, ns3::Ipv4Address dst, uint8_t * nextHeader, uint8_t protocol, bool & isDropped) [member function]
+    cls.add_method('Process', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::Packet > &', 'packet'), param('ns3::Ipv4Header const &', 'ipv4Header'), param('ns3::Ipv4Address', 'dst'), param('uint8_t *', 'nextHeader'), param('uint8_t', 'protocol'), param('bool &', 'isDropped')])
+    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
+    ## dsr-routing.h (module 'dsr'): ns3::IpL4Protocol::RxStatus ns3::dsr::DsrRouting::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_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::RouteRequestTimerExpire(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, uint32_t requestId, uint8_t protocol) [member function]
+    cls.add_method('RouteRequestTimerExpire', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PurgeLinkNode() [member function]
-    cls.add_method('PurgeLinkNode', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SalvagePacket(ns3::Ptr<ns3::Packet const> packet, ns3::Ipv4Address source, ns3::Ipv4Address dst, uint8_t protocol) [member function]
+    cls.add_method('SalvagePacket', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::PurgeMac() [member function]
-    cls.add_method('PurgeMac', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'dst'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleCachedReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, ns3::Ptr<ns3::Ipv4Route> route, double hops) [member function]
+    cls.add_method('ScheduleCachedReply', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::RebuildBestRouteTable(ns3::Ipv4Address source) [member function]
-    cls.add_method('RebuildBestRouteTable', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::Ipv4Route >', 'route'), param('double', 'hops')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInitialReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('ScheduleInitialReply', 
                    'void', 
-                   [param('ns3::Ipv4Address', 'source')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::RemoveLastEntry(std::list<ns3::dsr::RouteCacheEntry, std::allocator<ns3::dsr::RouteCacheEntry> > & rtVector) [member function]
-    cls.add_method('RemoveLastEntry', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleInterRequest(ns3::Ptr<ns3::Packet> packet) [member function]
+    cls.add_method('ScheduleInterRequest', 
                    'void', 
-                   [param('std::list< ns3::dsr::RouteCacheEntry > &', 'rtVector')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::ScheduleTimer() [member function]
-    cls.add_method('ScheduleTimer', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleLinkPacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('ScheduleLinkPacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleNetworkPacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, bool isFirst, uint8_t protocol) [member function]
+    cls.add_method('ScheduleNetworkPacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('bool', 'isFirst'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SchedulePassivePacketRetry(ns3::dsr::DsrMaintainBuffEntry & mb, uint8_t protocol) [member function]
+    cls.add_method('SchedulePassivePacketRetry', 
+                   'void', 
+                   [param('ns3::dsr::DsrMaintainBuffEntry &', 'mb'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::ScheduleRreqRetry(ns3::Ptr<ns3::Packet> packet, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > address, bool nonProp, uint32_t requestId, uint8_t protocol) [member function]
+    cls.add_method('ScheduleRreqRetry', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('std::vector< ns3::Ipv4Address >', 'address'), param('bool', 'nonProp'), param('uint32_t', 'requestId'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Scheduler(uint32_t priority) [member function]
+    cls.add_method('Scheduler', 
+                   'void', 
+                   [param('uint32_t', 'priority')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrRouting::SearchNextHop(ns3::Ipv4Address ipv4Address, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & vec) [member function]
+    cls.add_method('SearchNextHop', 
+                   'ns3::Ipv4Address', 
+                   [param('ns3::Ipv4Address', 'ipv4Address'), param('std::vector< ns3::Ipv4Address > &', 'vec')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::Send(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendAck(uint16_t ackId, ns3::Ipv4Address destination, ns3::Ipv4Address realSrc, ns3::Ipv4Address realDst, uint8_t protocol, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('SendAck', 
+                   'void', 
+                   [param('uint16_t', 'ackId'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ipv4Address', 'realSrc'), param('ns3::Ipv4Address', 'realDst'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendBuffTimerExpire() [member function]
+    cls.add_method('SendBuffTimerExpire', 
                    'void', 
                    [])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetBadLinkLifetime(ns3::Time t) [member function]
-    cls.add_method('SetBadLinkLifetime', 
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendErrorRequest(ns3::dsr::DsrOptionRerrUnreachHeader & rerr, uint8_t protocol) [member function]
+    cls.add_method('SendErrorRequest', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCacheTimeout(ns3::Time t) [member function]
-    cls.add_method('SetCacheTimeout', 
+                   [param('ns3::dsr::DsrOptionRerrUnreachHeader &', 'rerr'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendGratuitousReply(ns3::Ipv4Address replyTo, ns3::Ipv4Address replyFrom, std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > & nodeList, uint8_t protocol) [member function]
+    cls.add_method('SendGratuitousReply', 
                    'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCacheType(std::string type) [member function]
-    cls.add_method('SetCacheType', 
+                   [param('ns3::Ipv4Address', 'replyTo'), param('ns3::Ipv4Address', 'replyFrom'), param('std::vector< ns3::Ipv4Address > &', 'nodeList'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendInitialRequest(ns3::Ipv4Address source, ns3::Ipv4Address destination, uint8_t protocol) [member function]
+    cls.add_method('SendInitialRequest', 
                    'void', 
-                   [param('std::string', 'type')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetCallback(ns3::Callback<void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
-    cls.add_method('SetCallback', 
+                   [param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'destination'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacket(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetInitStability(ns3::Time initStability) [member function]
-    cls.add_method('SetInitStability', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendPacketFromBuffer(ns3::dsr::DsrOptionSRHeader const & sourceRoute, ns3::Ipv4Address nextHop, uint8_t protocol) [member function]
+    cls.add_method('SendPacketFromBuffer', 
                    'void', 
-                   [param('ns3::Time', 'initStability')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMaxCacheLen(uint32_t len) [member function]
-    cls.add_method('SetMaxCacheLen', 
+                   [param('ns3::dsr::DsrOptionSRHeader const &', 'sourceRoute'), param('ns3::Ipv4Address', 'nextHop'), param('uint8_t', 'protocol')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::SendRealDown(ns3::dsr::DsrNetworkQueueEntry & newEntry) [member function]
+    cls.add_method('SendRealDown', 
+                   'bool', 
+                   [param('ns3::dsr::DsrNetworkQueueEntry &', 'newEntry')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendReply(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source, ns3::Ipv4Address nextHop, ns3::Ptr<ns3::Ipv4Route> route) [member function]
+    cls.add_method('SendReply', 
                    'void', 
-                   [param('uint32_t', 'len')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMaxEntriesEachDst(uint32_t entries) [member function]
-    cls.add_method('SetMaxEntriesEachDst', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ptr< ns3::Ipv4Route >', 'route')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SendRequest(ns3::Ptr<ns3::Packet> packet, ns3::Ipv4Address source) [member function]
+    cls.add_method('SendRequest', 
                    'void', 
-                   [param('uint32_t', 'entries')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetMinLifeTime(ns3::Time minLifeTime) [member function]
-    cls.add_method('SetMinLifeTime', 
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv4Address', 'source')])
+    ## 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::Time', 'minLifeTime')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetStabilityDecrFactor(uint64_t decrFactor) [member function]
-    cls.add_method('SetStabilityDecrFactor', 
+                   [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', 
-                   [param('uint64_t', 'decrFactor')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetStabilityIncrFactor(uint64_t incrFactor) [member function]
-    cls.add_method('SetStabilityIncrFactor', 
+                   [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 >', 'callback')], 
+                   is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::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> callback) [member function]
+    cls.add_method('SetDownTarget6', 
                    'void', 
-                   [param('uint64_t', 'incrFactor')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetSubRoute(bool subRoute) [member function]
-    cls.add_method('SetSubRoute', 
+                   [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 >', 'callback')], 
+                   is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
                    'void', 
-                   [param('bool', 'subRoute')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::SetUseExtends(ns3::Time useExtends) [member function]
-    cls.add_method('SetUseExtends', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetPassiveBuffer(ns3::Ptr<ns3::dsr::DsrPassiveBuffer> r) [member function]
+    cls.add_method('SetPassiveBuffer', 
                    'void', 
-                   [param('ns3::Time', 'useExtends')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UpdateNeighbor(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > nodeList, ns3::Time expire) [member function]
-    cls.add_method('UpdateNeighbor', 
+                   [param('ns3::Ptr< ns3::dsr::DsrPassiveBuffer >', 'r')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRequestTable(ns3::Ptr<ns3::dsr::DsrRreqTable> r) [member function]
+    cls.add_method('SetRequestTable', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'nodeList'), param('ns3::Time', 'expire')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UpdateNetGraph() [member function]
-    cls.add_method('UpdateNetGraph', 
+                   [param('ns3::Ptr< ns3::dsr::DsrRreqTable >', 'r')])
+    ## dsr-routing.h (module 'dsr'): ns3::Ptr<ns3::Ipv4Route> ns3::dsr::DsrRouting::SetRoute(ns3::Ipv4Address nextHop, ns3::Ipv4Address srcAddress) [member function]
+    cls.add_method('SetRoute', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ipv4Address', 'nextHop'), param('ns3::Ipv4Address', 'srcAddress')])
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::SetRouteCache(ns3::Ptr<ns3::dsr::DsrRouteCache> r) [member function]
+    cls.add_method('SetRouteCache', 
                    'void', 
-                   [])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCache::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::Ptr< ns3::dsr::DsrRouteCache >', 'r')])
+    ## dsr-routing.h (module 'dsr'): bool ns3::dsr::DsrRouting::UpdateRouteEntry(ns3::Ipv4Address dst) [member function]
     cls.add_method('UpdateRouteEntry', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCache::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::UseExtends(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > rt) [member function]
     cls.add_method('UseExtends', 
                    'void', 
                    [param('std::vector< ns3::Ipv4Address >', 'rt')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_arp [variable]
-    cls.add_instance_attribute('m_arp', 'std::vector< ns3::Ptr< ns3::ArpCache > >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_delay [variable]
-    cls.add_instance_attribute('m_delay', 'ns3::Time', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_handleLinkFailure [variable]
-    cls.add_instance_attribute('m_handleLinkFailure', 'ns3::Callback< void, ns3::Ipv4Address, unsigned char, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_nb [variable]
-    cls.add_instance_attribute('m_nb', 'std::vector< ns3::dsr::RouteCache::Neighbor >', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_ntimer [variable]
-    cls.add_instance_attribute('m_ntimer', 'ns3::Timer', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::m_txErrorCallback [variable]
-    cls.add_instance_attribute('m_txErrorCallback', 'ns3::Callback< void, ns3::WifiMacHeader const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## dsr-routing.h (module 'dsr'): ns3::dsr::DsrRouting::PROT_NUMBER [variable]
+    cls.add_static_attribute('PROT_NUMBER', 'uint8_t const', is_const=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## dsr-routing.h (module 'dsr'): void ns3::dsr::DsrRouting::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3DsrRouteCacheNeighbor_methods(root_module, cls):
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor(ns3::dsr::RouteCache::Neighbor const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCache::Neighbor const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor(ns3::Ipv4Address ip, ns3::Mac48Address mac, ns3::Time t) [constructor]
-    cls.add_constructor([param('ns3::Ipv4Address', 'ip'), param('ns3::Mac48Address', 'mac'), param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::Neighbor() [constructor]
+def register_Ns3DsrDsrRoutingHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader(ns3::dsr::DsrRoutingHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRoutingHeader const &', 'arg0')])
+    ## dsr-fs-header.h (module 'dsr'): ns3::dsr::DsrRoutingHeader::DsrRoutingHeader() [constructor]
     cls.add_constructor([])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::close [variable]
-    cls.add_instance_attribute('close', 'bool', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_expireTime [variable]
-    cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_hardwareAddress [variable]
-    cls.add_instance_attribute('m_hardwareAddress', 'ns3::Mac48Address', is_const=False)
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCache::Neighbor::m_neighborAddress [variable]
-    cls.add_instance_attribute('m_neighborAddress', 'ns3::Ipv4Address', is_const=False)
-    return
-
-def register_Ns3DsrRouteCacheEntry_methods(root_module, cls):
-    cls.add_binary_comparison_operator('==')
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry::RouteCacheEntry(ns3::dsr::RouteCacheEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RouteCacheEntry const &', 'arg0')])
-    ## dsr-rcache.h (module 'dsr'): ns3::dsr::RouteCacheEntry::RouteCacheEntry(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > const & ip=std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >(), ns3::Ipv4Address dst=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( )) [constructor]
-    cls.add_constructor([param('std::vector< ns3::Ipv4Address > const &', 'ip', default_value='std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> >()'), param('ns3::Ipv4Address', 'dst', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )')])
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCacheEntry::GetBlacklistTimeout() const [member function]
-    cls.add_method('GetBlacklistTimeout', 
-                   'ns3::Time', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::RouteCacheEntry::GetDestination() const [member function]
-    cls.add_method('GetDestination', 
-                   'ns3::Ipv4Address', 
-                   [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): ns3::Time ns3::dsr::RouteCacheEntry::GetExpireTime() const [member function]
-    cls.add_method('GetExpireTime', 
-                   'ns3::Time', 
+    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): ns3::TypeId ns3::dsr::DsrRoutingHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > ns3::dsr::RouteCacheEntry::GetVector() const [member function]
-    cls.add_method('GetVector', 
-                   'std::vector< ns3::Ipv4Address >', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): uint32_t ns3::dsr::DsrRoutingHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::Invalidate(ns3::Time badLinkLifetime) [member function]
-    cls.add_method('Invalidate', 
-                   'void', 
-                   [param('ns3::Time', 'badLinkLifetime')])
-    ## dsr-rcache.h (module 'dsr'): bool ns3::dsr::RouteCacheEntry::IsUnidirectional() const [member function]
-    cls.add_method('IsUnidirectional', 
-                   'bool', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRoutingHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
                    [], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::Print(std::ostream & os) const [member function]
+                   is_static=True)
+    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
-                   is_const=True)
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetBlacklistTimeout(ns3::Time t) [member function]
-    cls.add_method('SetBlacklistTimeout', 
-                   'void', 
-                   [param('ns3::Time', 't')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetDestination(ns3::Ipv4Address d) [member function]
-    cls.add_method('SetDestination', 
-                   'void', 
-                   [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetExpireTime(ns3::Time exp) [member function]
-    cls.add_method('SetExpireTime', 
-                   'void', 
-                   [param('ns3::Time', 'exp')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetUnidirectional(bool u) [member function]
-    cls.add_method('SetUnidirectional', 
-                   'void', 
-                   [param('bool', 'u')])
-    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::RouteCacheEntry::SetVector(std::vector<ns3::Ipv4Address, std::allocator<ns3::Ipv4Address> > v) [member function]
-    cls.add_method('SetVector', 
+                   is_const=True, is_virtual=True)
+    ## dsr-fs-header.h (module 'dsr'): void ns3::dsr::DsrRoutingHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
                    'void', 
-                   [param('std::vector< ns3::Ipv4Address >', 'v')])
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
     return
 
-def register_Ns3DsrRreqTable_methods(root_module, cls):
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable::RreqTable(ns3::dsr::RreqTable const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RreqTable const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTable::RreqTable() [constructor]
+def register_Ns3DsrDsrRreqTable_methods(root_module, cls):
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable::DsrRreqTable(ns3::dsr::DsrRreqTable const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrRreqTable const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::DsrRreqTable::DsrRreqTable() [constructor]
     cls.add_constructor([])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::CheckUniqueRreqId(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::CheckUniqueRreqId(ns3::Ipv4Address dst) [member function]
     cls.add_method('CheckUniqueRreqId', 
                    'uint32_t', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::FindAndUpdate(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::FindAndUpdate(ns3::Ipv4Address dst) [member function]
     cls.add_method('FindAndUpdate', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::RreqTable::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::DsrRreqTable::FindSourceEntry(ns3::Ipv4Address src, ns3::Ipv4Address dst, uint16_t id) [member function]
     cls.add_method('FindSourceEntry', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'src'), param('ns3::Ipv4Address', 'dst'), param('uint16_t', 'id')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList * ns3::dsr::RreqTable::FindUnidirectional(ns3::Ipv4Address neighbor) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::BlackList * ns3::dsr::DsrRreqTable::FindUnidirectional(ns3::Ipv4Address neighbor) [member function]
     cls.add_method('FindUnidirectional', 
                    'ns3::dsr::BlackList *', 
                    [param('ns3::Ipv4Address', 'neighbor')])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetInitHopLimit() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetInitHopLimit() const [member function]
     cls.add_method('GetInitHopLimit', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqCnt(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqCnt(ns3::Ipv4Address dst) [member function]
     cls.add_method('GetRreqCnt', 
                    'uint32_t', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqIdSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqIdSize() const [member function]
     cls.add_method('GetRreqIdSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqSize() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqSize() [member function]
     cls.add_method('GetRreqSize', 
                    'uint32_t', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetRreqTableSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetRreqTableSize() const [member function]
     cls.add_method('GetRreqTableSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::RreqTable::GetTypeId() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): static ns3::TypeId ns3::dsr::DsrRreqTable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::RreqTable::GetUniqueRreqIdSize() const [member function]
+    ## dsr-rreq-table.h (module 'dsr'): uint32_t ns3::dsr::DsrRreqTable::GetUniqueRreqIdSize() const [member function]
     cls.add_method('GetUniqueRreqIdSize', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::Invalidate() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::Invalidate() [member function]
     cls.add_method('Invalidate', 
                    'void', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::RreqTable::MarkLinkAsUnidirectional(ns3::Ipv4Address neighbor, ns3::Time blacklistTimeout) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): bool ns3::dsr::DsrRreqTable::MarkLinkAsUnidirectional(ns3::Ipv4Address neighbor, ns3::Time blacklistTimeout) [member function]
     cls.add_method('MarkLinkAsUnidirectional', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'neighbor'), param('ns3::Time', 'blacklistTimeout')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::PurgeNeighbor() [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::PurgeNeighbor() [member function]
     cls.add_method('PurgeNeighbor', 
                    'void', 
                    [])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::RemoveLeastExpire(std::map<ns3::Ipv4Address, ns3::dsr::RreqTableEntry, std::less<ns3::Ipv4Address>, std::allocator<std::pair<ns3::Ipv4Address const, ns3::dsr::RreqTableEntry> > > & rreqDstMap) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::RemoveLeastExpire(std::map<ns3::Ipv4Address, ns3::dsr::RreqTableEntry, std::less<ns3::Ipv4Address>, std::allocator<std::pair<ns3::Ipv4Address const, ns3::dsr::RreqTableEntry> > > & rreqDstMap) [member function]
     cls.add_method('RemoveLeastExpire', 
                    'void', 
                    [param('std::map< ns3::Ipv4Address, ns3::dsr::RreqTableEntry > &', 'rreqDstMap')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::RemoveRreqEntry(ns3::Ipv4Address dst) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::RemoveRreqEntry(ns3::Ipv4Address dst) [member function]
     cls.add_method('RemoveRreqEntry', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetInitHopLimit(uint32_t hl) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetInitHopLimit(uint32_t hl) [member function]
     cls.add_method('SetInitHopLimit', 
                    'void', 
                    [param('uint32_t', 'hl')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetRreqIdSize(uint32_t id) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetRreqIdSize(uint32_t id) [member function]
     cls.add_method('SetRreqIdSize', 
                    'void', 
                    [param('uint32_t', 'id')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetRreqTableSize(uint32_t rt) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetRreqTableSize(uint32_t rt) [member function]
     cls.add_method('SetRreqTableSize', 
                    'void', 
                    [param('uint32_t', 'rt')])
-    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::RreqTable::SetUniqueRreqIdSize(uint32_t uid) [member function]
+    ## dsr-rreq-table.h (module 'dsr'): void ns3::dsr::DsrRreqTable::SetUniqueRreqIdSize(uint32_t uid) [member function]
     cls.add_method('SetUniqueRreqIdSize', 
                    'void', 
                    [param('uint32_t', 'uid')])
     return
 
-def register_Ns3DsrRreqTableEntry_methods(root_module, cls):
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry() [constructor]
-    cls.add_constructor([])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry(ns3::dsr::RreqTableEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::RreqTableEntry const &', 'arg0')])
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_expire [variable]
-    cls.add_instance_attribute('m_expire', 'ns3::Time', is_const=False)
-    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_reqNo [variable]
-    cls.add_instance_attribute('m_reqNo', 'uint32_t', is_const=False)
-    return
-
-def register_Ns3DsrSendBuffEntry_methods(root_module, cls):
+def register_Ns3DsrDsrSendBuffEntry_methods(root_module, cls):
     cls.add_binary_comparison_operator('==')
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry::SendBuffEntry(ns3::dsr::SendBuffEntry const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::SendBuffEntry const &', 'arg0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffEntry::SendBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry::DsrSendBuffEntry(ns3::dsr::DsrSendBuffEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrSendBuffEntry const &', 'arg0')])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffEntry::DsrSendBuffEntry(ns3::Ptr<ns3::Packet const> pa=0, ns3::Ipv4Address d=ns3::Ipv4Address(), ns3::Time exp=ns3::Simulator::Now( ), uint8_t p=0) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Packet const >', 'pa', default_value='0'), param('ns3::Ipv4Address', 'd', default_value='ns3::Ipv4Address()'), param('ns3::Time', 'exp', default_value='ns3::Simulator::Now( )'), param('uint8_t', 'p', default_value='0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::SendBuffEntry::GetDestination() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ipv4Address ns3::dsr::DsrSendBuffEntry::GetDestination() const [member function]
     cls.add_method('GetDestination', 
                    'ns3::Ipv4Address', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::SendBuffEntry::GetExpireTime() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrSendBuffEntry::GetExpireTime() const [member function]
     cls.add_method('GetExpireTime', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::SendBuffEntry::GetPacket() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Ptr<ns3::Packet const> ns3::dsr::DsrSendBuffEntry::GetPacket() const [member function]
     cls.add_method('GetPacket', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): uint8_t ns3::dsr::SendBuffEntry::GetProtocol() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint8_t ns3::dsr::DsrSendBuffEntry::GetProtocol() const [member function]
     cls.add_method('GetProtocol', 
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetDestination(ns3::Ipv4Address d) [member function]
     cls.add_method('SetDestination', 
                    'void', 
                    [param('ns3::Ipv4Address', 'd')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetExpireTime(ns3::Time exp) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetExpireTime(ns3::Time exp) [member function]
     cls.add_method('SetExpireTime', 
                    'void', 
                    [param('ns3::Time', 'exp')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetPacket(ns3::Ptr<ns3::Packet const> p) [member function]
     cls.add_method('SetPacket', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'p')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffEntry::SetProtocol(uint8_t p) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffEntry::SetProtocol(uint8_t p) [member function]
     cls.add_method('SetProtocol', 
                    'void', 
                    [param('uint8_t', 'p')])
     return
 
-def register_Ns3DsrSendBuffer_methods(root_module, cls):
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer::SendBuffer(ns3::dsr::SendBuffer const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::dsr::SendBuffer const &', 'arg0')])
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::SendBuffer::SendBuffer() [constructor]
+def register_Ns3DsrDsrSendBuffer_methods(root_module, cls):
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer::DsrSendBuffer(ns3::dsr::DsrSendBuffer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::DsrSendBuffer const &', 'arg0')])
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::dsr::DsrSendBuffer::DsrSendBuffer() [constructor]
     cls.add_constructor([])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::SendBuffEntry & entry) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Dequeue(ns3::Ipv4Address dst, ns3::dsr::DsrSendBuffEntry & entry) [member function]
     cls.add_method('Dequeue', 
                    'bool', 
-                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::SendBuffEntry &', 'entry')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::DropPacketWithDst(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::Ipv4Address', 'dst'), param('ns3::dsr::DsrSendBuffEntry &', 'entry')])
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::DropPacketWithDst(ns3::Ipv4Address dst) [member function]
     cls.add_method('DropPacketWithDst', 
                    'void', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Enqueue(ns3::dsr::SendBuffEntry & entry) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Enqueue(ns3::dsr::DsrSendBuffEntry & entry) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::dsr::SendBuffEntry &', 'entry')])
-    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::SendBuffer::Find(ns3::Ipv4Address dst) [member function]
+                   [param('ns3::dsr::DsrSendBuffEntry &', 'entry')])
+    ## dsr-rsendbuff.h (module 'dsr'): bool ns3::dsr::DsrSendBuffer::Find(ns3::Ipv4Address dst) [member function]
     cls.add_method('Find', 
                    'bool', 
                    [param('ns3::Ipv4Address', 'dst')])
-    ## dsr-rsendbuff.h (module 'dsr'): std::vector<ns3::dsr::SendBuffEntry, std::allocator<ns3::dsr::SendBuffEntry> > & ns3::dsr::SendBuffer::GetBuffer() [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): std::vector<ns3::dsr::DsrSendBuffEntry, std::allocator<ns3::dsr::DsrSendBuffEntry> > & ns3::dsr::DsrSendBuffer::GetBuffer() [member function]
     cls.add_method('GetBuffer', 
-                   'std::vector< ns3::dsr::SendBuffEntry > &', 
+                   'std::vector< ns3::dsr::DsrSendBuffEntry > &', 
                    [])
-    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::SendBuffer::GetMaxQueueLen() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrSendBuffer::GetMaxQueueLen() const [member function]
     cls.add_method('GetMaxQueueLen', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::SendBuffer::GetSendBufferTimeout() const [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): ns3::Time ns3::dsr::DsrSendBuffer::GetSendBufferTimeout() const [member function]
     cls.add_method('GetSendBufferTimeout', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::SendBuffer::GetSize() [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): uint32_t ns3::dsr::DsrSendBuffer::GetSize() [member function]
     cls.add_method('GetSize', 
                    'uint32_t', 
                    [])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::SetMaxQueueLen(uint32_t len) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::SetMaxQueueLen(uint32_t len) [member function]
     cls.add_method('SetMaxQueueLen', 
                    'void', 
                    [param('uint32_t', 'len')])
-    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::SendBuffer::SetSendBufferTimeout(ns3::Time t) [member function]
+    ## dsr-rsendbuff.h (module 'dsr'): void ns3::dsr::DsrSendBuffer::SetSendBufferTimeout(ns3::Time t) [member function]
     cls.add_method('SetSendBufferTimeout', 
                    'void', 
                    [param('ns3::Time', 't')])
     return
 
+def register_Ns3DsrGraReplyEntry_methods(root_module, cls):
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::dsr::GraReplyEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::GraReplyEntry const &', 'arg0')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::GraReplyEntry(ns3::Ipv4Address t, ns3::Ipv4Address f, ns3::Time h) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 't'), param('ns3::Ipv4Address', 'f'), param('ns3::Time', 'h')])
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_gratReplyHoldoff [variable]
+    cls.add_instance_attribute('m_gratReplyHoldoff', 'ns3::Time', is_const=False)
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_hearFrom [variable]
+    cls.add_instance_attribute('m_hearFrom', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-gratuitous-reply-table.h (module 'dsr'): ns3::dsr::GraReplyEntry::m_replyTo [variable]
+    cls.add_instance_attribute('m_replyTo', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrLink_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::dsr::Link const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::Link const &', 'arg0')])
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::Link(ns3::Ipv4Address ip1, ns3::Ipv4Address ip2) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ip1'), param('ns3::Ipv4Address', 'ip2')])
+    ## dsr-rcache.h (module 'dsr'): void ns3::dsr::Link::Print() const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [], 
+                   is_const=True)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_high [variable]
+    cls.add_instance_attribute('m_high', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-rcache.h (module 'dsr'): ns3::dsr::Link::m_low [variable]
+    cls.add_instance_attribute('m_low', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrLinkKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::LinkKey(ns3::dsr::LinkKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::LinkKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_nextHop [variable]
+    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_ourAdd [variable]
+    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::LinkKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrNetworkKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::NetworkKey(ns3::dsr::NetworkKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::NetworkKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ackId [variable]
+    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_nextHop [variable]
+    cls.add_instance_attribute('m_nextHop', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_ourAdd [variable]
+    cls.add_instance_attribute('m_ourAdd', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::NetworkKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrPassiveKey_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey() [constructor]
+    cls.add_constructor([])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::PassiveKey(ns3::dsr::PassiveKey const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::PassiveKey const &', 'arg0')])
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_ackId [variable]
+    cls.add_instance_attribute('m_ackId', 'uint16_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_destination [variable]
+    cls.add_instance_attribute('m_destination', 'ns3::Ipv4Address', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_segsLeft [variable]
+    cls.add_instance_attribute('m_segsLeft', 'uint8_t', is_const=False)
+    ## dsr-maintain-buff.h (module 'dsr'): ns3::dsr::PassiveKey::m_source [variable]
+    cls.add_instance_attribute('m_source', 'ns3::Ipv4Address', is_const=False)
+    return
+
+def register_Ns3DsrRreqTableEntry_methods(root_module, cls):
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry() [constructor]
+    cls.add_constructor([])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::RreqTableEntry(ns3::dsr::RreqTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::dsr::RreqTableEntry const &', 'arg0')])
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_expire [variable]
+    cls.add_instance_attribute('m_expire', 'ns3::Time', is_const=False)
+    ## dsr-rreq-table.h (module 'dsr'): ns3::dsr::RreqTableEntry::m_reqNo [variable]
+    cls.add_instance_attribute('m_reqNo', 'uint32_t', is_const=False)
+    return
+
 def register_Ns3DsrDsrOptionAck_methods(root_module, cls):
     ## dsr-options.h (module 'dsr'): ns3::dsr::DsrOptionAck::DsrOptionAck(ns3::dsr::DsrOptionAck const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::dsr::DsrOptionAck const &', 'arg0')])
diff -Naur ns-3.24.1/src/dsr/examples/dsr.cc ns-3.25/src/dsr/examples/dsr.cc
--- ns-3.24.1/src/dsr/examples/dsr.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/examples/dsr.cc	2016-03-23 21:36:53.000000000 -0700
@@ -66,9 +66,9 @@
   LogComponentEnable ("DsrFsHeader", LOG_LEVEL_ALL);
   LogComponentEnable ("DsrGraReplyTable", LOG_LEVEL_ALL);
   LogComponentEnable ("DsrSendBuffer", LOG_LEVEL_ALL);
-  LogComponentEnable ("RouteCache", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrRouteCache", LOG_LEVEL_ALL);
   LogComponentEnable ("DsrMaintainBuffer", LOG_LEVEL_ALL);
-  LogComponentEnable ("RreqTable", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrRreqTable", LOG_LEVEL_ALL);
   LogComponentEnable ("DsrErrorBuffer", LOG_LEVEL_ALL);
   LogComponentEnable ("DsrNetworkQueue", LOG_LEVEL_ALL);
 #endif
@@ -127,8 +127,8 @@
   wifiChannel.AddPropagationLoss ("ns3::RangePropagationLossModel", "MaxRange", DoubleValue (txpDistance));
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a mac and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue (dataMode), "ControlMode",
                                 StringValue (phyMode));
 
diff -Naur ns-3.24.1/src/dsr/model/dsr-errorbuff.cc ns-3.25/src/dsr/model/dsr-errorbuff.cc
--- ns-3.24.1/src/dsr/model/dsr-errorbuff.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-errorbuff.cc	2016-03-23 21:36:53.000000000 -0700
@@ -43,17 +43,17 @@
 namespace dsr {
 
 uint32_t
-ErrorBuffer::GetSize ()
+DsrErrorBuffer::GetSize ()
 {
   Purge ();
   return m_errorBuffer.size ();
 }
 
 bool
-ErrorBuffer::Enqueue (ErrorBuffEntry & entry)
+DsrErrorBuffer::Enqueue (DsrErrorBuffEntry & entry)
 {
   Purge ();
-  for (std::vector<ErrorBuffEntry>::const_iterator i = m_errorBuffer.begin (); i
+  for (std::vector<DsrErrorBuffEntry>::const_iterator i = m_errorBuffer.begin (); i
        != m_errorBuffer.end (); ++i)
     {
       NS_LOG_INFO ("packet id " << i->GetPacket ()->GetUid () << " " << entry.GetPacket ()->GetUid () << " source " << i->GetSource () << " " << entry.GetSource ()
@@ -82,7 +82,7 @@
 }
 
 void
-ErrorBuffer::DropPacketForErrLink (Ipv4Address source, Ipv4Address nextHop)
+DsrErrorBuffer::DropPacketForErrLink (Ipv4Address source, Ipv4Address nextHop)
 {
   NS_LOG_FUNCTION (this << source << nextHop);
   Purge ();
@@ -93,7 +93,7 @@
   /*
    * Drop the packet with the error link source----------nextHop
    */
-  for (std::vector<ErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i
+  for (std::vector<DsrErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i
        != m_errorBuffer.end (); ++i)
     {
       if (LinkEqual (*i, link))
@@ -102,17 +102,17 @@
         }
     }
   m_errorBuffer.erase (std::remove_if (m_errorBuffer.begin (), m_errorBuffer.end (),
-                                       std::bind2nd (std::ptr_fun (ErrorBuffer::LinkEqual), link)), m_errorBuffer.end ());
+                                       std::bind2nd (std::ptr_fun (DsrErrorBuffer::LinkEqual), link)), m_errorBuffer.end ());
 }
 
 bool
-ErrorBuffer::Dequeue (Ipv4Address dst, ErrorBuffEntry & entry)
+DsrErrorBuffer::Dequeue (Ipv4Address dst, DsrErrorBuffEntry & entry)
 {
   Purge ();
   /*
    * Dequeue the entry with destination address dst
    */
-  for (std::vector<ErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i != m_errorBuffer.end (); ++i)
+  for (std::vector<DsrErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i != m_errorBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
         {
@@ -126,12 +126,12 @@
 }
 
 bool
-ErrorBuffer::Find (Ipv4Address dst)
+DsrErrorBuffer::Find (Ipv4Address dst)
 {
   /*
    * Make sure if the send buffer contains entry with certain dst
    */
-  for (std::vector<ErrorBuffEntry>::const_iterator i = m_errorBuffer.begin (); i
+  for (std::vector<DsrErrorBuffEntry>::const_iterator i = m_errorBuffer.begin (); i
        != m_errorBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
@@ -146,7 +146,7 @@
 struct IsExpired
 {
   bool
-  operator() (ErrorBuffEntry const & e) const
+  operator() (DsrErrorBuffEntry const & e) const
   {
     // NS_LOG_DEBUG("Expire time for packet in req queue: "<<e.GetExpireTime ());
     return (e.GetExpireTime () < Seconds (0));
@@ -154,14 +154,14 @@
 };
 
 void
-ErrorBuffer::Purge ()
+DsrErrorBuffer::Purge ()
 {
   /*
    * Purge the buffer to eliminate expired entries
    */
   NS_LOG_DEBUG ("The error buffer size " << m_errorBuffer.size ());
   IsExpired pred;
-  for (std::vector<ErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i
+  for (std::vector<DsrErrorBuffEntry>::iterator i = m_errorBuffer.begin (); i
        != m_errorBuffer.end (); ++i)
     {
       if (pred (*i))
@@ -175,7 +175,7 @@
 }
 
 void
-ErrorBuffer::Drop (ErrorBuffEntry en, std::string reason)
+DsrErrorBuffer::Drop (DsrErrorBuffEntry en, std::string reason)
 {
   NS_LOG_LOGIC (reason << en.GetPacket ()->GetUid () << " " << en.GetDestination ());
 //  en.GetErrorCallback () (en.GetPacket (), en.GetDestination (),
@@ -184,7 +184,7 @@
 }
 
 void
-ErrorBuffer::DropLink (ErrorBuffEntry en, std::string reason)
+DsrErrorBuffer::DropLink (DsrErrorBuffEntry en, std::string reason)
 {
   NS_LOG_LOGIC (reason << en.GetPacket ()->GetUid () << " " << en.GetSource () << " " << en.GetNextHop ());
 //  en.GetErrorCallback () (en.GetPacket (), en.GetDestination (),
diff -Naur ns-3.24.1/src/dsr/model/dsr-errorbuff.h ns-3.25/src/dsr/model/dsr-errorbuff.h
--- ns-3.24.1/src/dsr/model/dsr-errorbuff.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-errorbuff.h	2016-03-23 21:36:52.000000000 -0700
@@ -42,11 +42,11 @@
  * \ingroup dsr
  * \brief DSR Error Buffer Entry
  */
-class ErrorBuffEntry
+class DsrErrorBuffEntry
 {
 public:
   /**
-   * Create an ErrorBuffEntry with the given parameters.
+   * Create an DsrErrorBuffEntry with the given parameters.
    *
    * \param pa packet
    * \param d IPv4 address of the destination
@@ -55,7 +55,7 @@
    * \param exp expiration time
    * \param p protocol number
    */
-  ErrorBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
+  DsrErrorBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
                   Ipv4Address n = Ipv4Address (), Time exp = Simulator::Now (), uint8_t p = 0)
     : m_packet (pa),
       m_dst (d),
@@ -67,10 +67,10 @@
   }
   /**
    * Compare send buffer entries
-   * \param o another ErrorBuffEntry
+   * \param o another DsrErrorBuffEntry
    * \return true if equal
    */
-  bool operator== (ErrorBuffEntry const & o) const
+  bool operator== (DsrErrorBuffEntry const & o) const
   {
     return ((m_packet == o.m_packet) && (m_source == o.m_source) && (m_nextHop == o.m_nextHop) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
@@ -145,19 +145,19 @@
  * \brief DSR error buffer
  */
 /************************************************************************************************************************/
-class ErrorBuffer
+class DsrErrorBuffer
 {
 public:
   /**
    * Default constructor
    */
-  ErrorBuffer ()
+  DsrErrorBuffer ()
   {
   }
   /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
-  bool Enqueue (ErrorBuffEntry & entry);
+  bool Enqueue (DsrErrorBuffEntry & entry);
   /// Return first found (the earliest) entry for given destination
-  bool Dequeue (Ipv4Address dst, ErrorBuffEntry & entry);
+  bool Dequeue (Ipv4Address dst, DsrErrorBuffEntry & entry);
   /// Remove all packets with the error link
   void DropPacketForErrLink (Ipv4Address source, Ipv4Address nextHop);
   /// Finds whether a packet with destination dst exists in the queue
@@ -183,26 +183,26 @@
     m_errorBufferTimeout = t;
   }
 
-  std::vector<ErrorBuffEntry> & GetBuffer ()
+  std::vector<DsrErrorBuffEntry> & GetBuffer ()
   {
     return m_errorBuffer;
   }
 
 private:
   /// The send buffer to cache unsent packet
-  std::vector<ErrorBuffEntry> m_errorBuffer;
+  std::vector<DsrErrorBuffEntry> m_errorBuffer;
   /// Remove all expired entries
   void Purge ();
   /// Notify that packet is dropped from queue by timeout
-  void Drop (ErrorBuffEntry en, std::string reason);
+  void Drop (DsrErrorBuffEntry en, std::string reason);
   /// Notify that packet is dropped from queue by timeout
-  void DropLink (ErrorBuffEntry en, std::string reason);
+  void DropLink (DsrErrorBuffEntry en, std::string reason);
   /// The maximum number of packets that we allow a routing protocol to buffer.
   uint32_t m_maxLen;
   /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_errorBufferTimeout;
   /// Check if the send buffer entry is the same or not
-  static bool LinkEqual (ErrorBuffEntry en, const std::vector<Ipv4Address> link)
+  static bool LinkEqual (DsrErrorBuffEntry en, const std::vector<Ipv4Address> link)
   {
     return ((en.GetSource () == link[0]) && (en.GetNextHop () == link[1]));
   }
diff -Naur ns-3.24.1/src/dsr/model/dsr-gratuitous-reply-table.cc ns-3.25/src/dsr/model/dsr-gratuitous-reply-table.cc
--- ns-3.24.1/src/dsr/model/dsr-gratuitous-reply-table.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-gratuitous-reply-table.cc	2016-03-23 21:36:52.000000000 -0700
@@ -39,29 +39,29 @@
   
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (GraReply);
+NS_OBJECT_ENSURE_REGISTERED (DsrGraReply);
 
-TypeId GraReply::GetTypeId ()
+TypeId DsrGraReply::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dsr::GraReply")
+  static TypeId tid = TypeId ("ns3::dsr::DsrGraReply")
     .SetParent<Object> ()
     .SetGroupName ("Dsr")
-    .AddConstructor<GraReply> ()
+    .AddConstructor<DsrGraReply> ()
   ;
   return tid;
 }
 
-GraReply::GraReply ()
+DsrGraReply::DsrGraReply ()
 {
 }
 
-GraReply::~GraReply ()
+DsrGraReply::~DsrGraReply ()
 {
   NS_LOG_FUNCTION_NOARGS ();
 }
 
 bool
-GraReply::FindAndUpdate (Ipv4Address replyTo, Ipv4Address replyFrom, Time gratReplyHoldoff)
+DsrGraReply::FindAndUpdate (Ipv4Address replyTo, Ipv4Address replyFrom, Time gratReplyHoldoff)
 {
   Purge ();  // purge the gratuitous reply table
   for (std::vector<GraReplyEntry>::iterator i = m_graReply.begin ();
@@ -78,14 +78,14 @@
 }
 
 bool
-GraReply::AddEntry (GraReplyEntry & graTableEntry)
+DsrGraReply::AddEntry (GraReplyEntry & graTableEntry)
 {
   m_graReply.push_back (graTableEntry);
   return true;
 }
 
 void
-GraReply::Purge ()
+DsrGraReply::Purge ()
 {
   /*
    * Purge the expired gratuitous reply entries
diff -Naur ns-3.24.1/src/dsr/model/dsr-gratuitous-reply-table.h ns-3.25/src/dsr/model/dsr-gratuitous-reply-table.h
--- ns-3.24.1/src/dsr/model/dsr-gratuitous-reply-table.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-gratuitous-reply-table.h	2016-03-23 21:36:52.000000000 -0700
@@ -62,14 +62,14 @@
  * \ingroup dsr
  * \brief maintain the gratuitous reply
  */
-class GraReply  : public Object
+class DsrGraReply  : public Object
 {
 public:
 
   static TypeId GetTypeId ();
 
-  GraReply ();
-  virtual ~GraReply ();
+  DsrGraReply ();
+  virtual ~DsrGraReply ();
 
   /// Set the gratuitous reply table size
   void SetGraTableSize (uint32_t g)
diff -Naur ns-3.24.1/src/dsr/model/dsr-maintain-buff.cc ns-3.25/src/dsr/model/dsr-maintain-buff.cc
--- ns-3.24.1/src/dsr/model/dsr-maintain-buff.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-maintain-buff.cc	2016-03-23 21:36:52.000000000 -0700
@@ -43,17 +43,17 @@
 namespace dsr {
 
 uint32_t
-MaintainBuffer::GetSize ()
+DsrMaintainBuffer::GetSize ()
 {
   Purge ();
   return m_maintainBuffer.size ();
 }
 
 bool
-MaintainBuffer::Enqueue (MaintainBuffEntry & entry)
+DsrMaintainBuffer::Enqueue (DsrMaintainBuffEntry & entry)
 {
   Purge ();
-  for (std::vector<MaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
 //      NS_LOG_INFO ("nexthop " << i->GetNextHop () << " " << entry.GetNextHop () << " our add " << i->GetOurAdd () << " " << entry.GetOurAdd ()
@@ -80,20 +80,20 @@
 }
 
 void
-MaintainBuffer::DropPacketWithNextHop (Ipv4Address nextHop)
+DsrMaintainBuffer::DropPacketWithNextHop (Ipv4Address nextHop)
 {
   NS_LOG_FUNCTION (this << nextHop);
   Purge ();
   NS_LOG_INFO ("Drop Packet With next hop " << nextHop);
   m_maintainBuffer.erase (std::remove_if (m_maintainBuffer.begin (), m_maintainBuffer.end (),
-                                          std::bind2nd (std::ptr_fun (MaintainBuffer::IsEqual), nextHop)), m_maintainBuffer.end ());
+                                          std::bind2nd (std::ptr_fun (DsrMaintainBuffer::IsEqual), nextHop)), m_maintainBuffer.end ());
 }
 
 bool
-MaintainBuffer::Dequeue (Ipv4Address nextHop, MaintainBuffEntry & entry)
+DsrMaintainBuffer::Dequeue (Ipv4Address nextHop, DsrMaintainBuffEntry & entry)
 {
   Purge ();
-  for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i != m_maintainBuffer.end (); ++i)
+  for (std::vector<DsrMaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i != m_maintainBuffer.end (); ++i)
     {
       if (i->GetNextHop () == nextHop)
         {
@@ -107,9 +107,9 @@
 }
 
 bool
-MaintainBuffer::Find (Ipv4Address nextHop)
+DsrMaintainBuffer::Find (Ipv4Address nextHop)
 {
-  for (std::vector<MaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::const_iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
       if (i->GetNextHop () == nextHop)
@@ -122,9 +122,9 @@
 }
 
 bool
-MaintainBuffer::AllEqual (MaintainBuffEntry & entry)
+DsrMaintainBuffer::AllEqual (DsrMaintainBuffEntry & entry)
 {
-  for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
 //      NS_LOG_DEBUG ("nexthop " << i->GetNextHop () << " " << entry.GetNextHop () << " our address " << i->GetOurAdd () << " " << entry.GetOurAdd ()
@@ -143,9 +143,9 @@
 }
 
 bool
-MaintainBuffer::NetworkEqual (MaintainBuffEntry & entry)
+DsrMaintainBuffer::NetworkEqual (DsrMaintainBuffEntry & entry)
 {
-  for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
 //      NS_LOG_DEBUG ("nexthop " << i->GetNextHop () << " " << entry.GetNextHop () << " our address " << i->GetOurAdd () << " " << entry.GetOurAdd ()
@@ -164,10 +164,10 @@
 }
 
 bool
-MaintainBuffer::PromiscEqual (MaintainBuffEntry & entry)
+DsrMaintainBuffer::PromiscEqual (DsrMaintainBuffEntry & entry)
 {
   NS_LOG_DEBUG ("The maintenance buffer size " << m_maintainBuffer.size ());
-  for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
 //      NS_LOG_DEBUG ("src " << i->GetSrc () << " " << entry.GetSrc () << " dst " << i->GetDst () << " " << entry.GetDst ()
@@ -187,10 +187,10 @@
 }
 
 bool
-MaintainBuffer::LinkEqual (MaintainBuffEntry & entry)
+DsrMaintainBuffer::LinkEqual (DsrMaintainBuffEntry & entry)
 {
   NS_LOG_DEBUG ("The maintenance buffer size " << m_maintainBuffer.size ());
-  for (std::vector<MaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
+  for (std::vector<DsrMaintainBuffEntry>::iterator i = m_maintainBuffer.begin (); i
        != m_maintainBuffer.end (); ++i)
     {
 //      NS_LOG_DEBUG ("src " << i->GetSrc () << " " << entry.GetSrc () << " dst " << i->GetDst () << " " << entry.GetDst ()
@@ -212,7 +212,7 @@
 struct IsExpired
 {
   bool
-  operator() (MaintainBuffEntry const & e) const
+  operator() (DsrMaintainBuffEntry const & e) const
   {
     // NS_LOG_DEBUG("Expire time for packet in req queue: "<<e.GetExpireTime ());
     return (e.GetExpireTime () < Seconds (0));
@@ -220,7 +220,7 @@
 };
 
 void
-MaintainBuffer::Purge ()
+DsrMaintainBuffer::Purge ()
 {
   NS_LOG_DEBUG ("Purging Maintenance Buffer");
   IsExpired pred;
diff -Naur ns-3.24.1/src/dsr/model/dsr-maintain-buff.h ns-3.25/src/dsr/model/dsr-maintain-buff.h
--- ns-3.24.1/src/dsr/model/dsr-maintain-buff.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-maintain-buff.h	2016-03-23 21:36:52.000000000 -0700
@@ -129,11 +129,11 @@
  * \ingroup dsr
  * \brief DSR Maintain Buffer Entry
  */
-class MaintainBuffEntry
+class DsrMaintainBuffEntry
 {
 public:
   /**
-   * Construct a MaintainBuffEntry with the given parameters
+   * Construct a DsrMaintainBuffEntry with the given parameters
    *
    * \param pa packet
    * \param us our IPv4 address
@@ -144,7 +144,7 @@
    * \param segs number of segments left
    * \param exp expiration time
    */
-  MaintainBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address us = Ipv4Address (),
+  DsrMaintainBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address us = Ipv4Address (),
                      Ipv4Address n = Ipv4Address (), Ipv4Address s = Ipv4Address (), Ipv4Address dst = Ipv4Address (),
                      uint16_t ackId = 0, uint8_t segs = 0, Time exp = Simulator::Now ())
     : m_packet (pa),
@@ -247,19 +247,19 @@
  * \brief DSR maintain buffer
  */
 /************************************************************************************************************************/
-class MaintainBuffer
+class DsrMaintainBuffer
 {
 public:
   /**
    * Default constructor
    */
-  MaintainBuffer ()
+  DsrMaintainBuffer ()
   {
   }
   /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
-  bool Enqueue (MaintainBuffEntry & entry);
+  bool Enqueue (DsrMaintainBuffEntry & entry);
   /// Return first found (the earliest) entry for given destination
-  bool Dequeue (Ipv4Address dst, MaintainBuffEntry & entry);
+  bool Dequeue (Ipv4Address dst, DsrMaintainBuffEntry & entry);
   /// Remove all packets with destination IP address dst
   void DropPacketWithNextHop (Ipv4Address nextHop);
   /// Finds whether a packet with destination dst exists in the queue
@@ -285,17 +285,17 @@
     m_maintainBufferTimeout = t;
   }
   /// Verify if all the elements in the maintainence buffer entry is the same
-  bool AllEqual (MaintainBuffEntry & entry);
+  bool AllEqual (DsrMaintainBuffEntry & entry);
   /// Verify if the maintain buffer entry is the same in every field for link ack
-  bool LinkEqual (MaintainBuffEntry & entry);
+  bool LinkEqual (DsrMaintainBuffEntry & entry);
   /// Verify if the maintain buffer entry is the same in every field for network ack
-  bool NetworkEqual (MaintainBuffEntry & entry);
+  bool NetworkEqual (DsrMaintainBuffEntry & entry);
   /// Verify if the maintain buffer entry is the same in every field for promiscuous ack
-  bool PromiscEqual (MaintainBuffEntry & entry);
+  bool PromiscEqual (DsrMaintainBuffEntry & entry);
 
 private:
   /// The vector of maintain buffer entries
-  std::vector<MaintainBuffEntry> m_maintainBuffer;
+  std::vector<DsrMaintainBuffEntry> m_maintainBuffer;
   std::vector<NetworkKey> m_allNetworkKey;
   /// Remove all expired entries
   void Purge ();
@@ -304,7 +304,7 @@
   /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_maintainBufferTimeout;
   /// Verify if the maintain buffer is equal or not
-  static bool IsEqual (MaintainBuffEntry en, const Ipv4Address nextHop)
+  static bool IsEqual (DsrMaintainBuffEntry en, const Ipv4Address nextHop)
   {
     return (en.GetNextHop () == nextHop);
   }
diff -Naur ns-3.24.1/src/dsr/model/dsr-option-header.cc ns-3.25/src/dsr/model/dsr-option-header.cc
--- ns-3.24.1/src/dsr/model/dsr-option-header.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-option-header.cc	2016-03-23 21:36:52.000000000 -0700
@@ -277,7 +277,7 @@
 void DsrOptionRreqHeader::SetNumberAddress (uint8_t n)
 {
   m_ipv4Address.clear ();
-  m_ipv4Address.assign (n, Ipv4Address (""));
+  m_ipv4Address.assign (n, Ipv4Address ());
 }
 
 Ipv4Address DsrOptionRreqHeader::GetTarget ()
@@ -425,7 +425,7 @@
 void DsrOptionRrepHeader::SetNumberAddress (uint8_t n)
 {
   m_ipv4Address.clear ();
-  m_ipv4Address.assign (n, Ipv4Address (""));
+  m_ipv4Address.assign (n, Ipv4Address ());
 }
 
 void DsrOptionRrepHeader::SetNodesAddress (std::vector<Ipv4Address> ipv4Address)
@@ -568,7 +568,7 @@
 void DsrOptionSRHeader::SetNumberAddress (uint8_t n)
 {
   m_ipv4Address.clear ();
-  m_ipv4Address.assign (n, Ipv4Address (""));
+  m_ipv4Address.assign (n, Ipv4Address ());
 }
 
 void DsrOptionSRHeader::SetNodesAddress (std::vector<Ipv4Address> ipv4Address)
diff -Naur ns-3.24.1/src/dsr/model/dsr-options.cc ns-3.25/src/dsr/model/dsr-options.cc
--- ns-3.24.1/src/dsr/model/dsr-options.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-options.cc	2016-03-23 21:36:52.000000000 -0700
@@ -609,10 +609,10 @@
   else
     {
       // A node ignores all RREQs received from any node in its blacklist
-      RouteCacheEntry toPrev;
+      DsrRouteCacheEntry toPrev;
       bool isRouteInCache = dsr->LookupRoute (targetAddress,
                                               toPrev);
-      RouteCacheEntry::IP_VECTOR ip = toPrev.GetVector (); // The route from our own route cache to dst
+      DsrRouteCacheEntry::IP_VECTOR ip = toPrev.GetVector (); // The route from our own route cache to dst
       PrintVector (ip);
       std::vector<Ipv4Address> saveRoute (nodeList);
       PrintVector (saveRoute);
@@ -687,7 +687,7 @@
               bool addRoute = false;
               if (numberAddress > 0)
                 {
-                  RouteCacheEntry toSource (/*IP_VECTOR=*/ m_finalRoute, /*dst=*/
+                  DsrRouteCacheEntry toSource (/*IP_VECTOR=*/ m_finalRoute, /*dst=*/
                                                            dst, /*expire time=*/ ActiveRouteTimeout);
                   if (dsr->IsLinkCache ())
                     {
@@ -792,7 +792,7 @@
                   NS_LOG_DEBUG ("This is the route save in route cache");
                   PrintVector (saveRoute);
 
-                  RouteCacheEntry toSource (/*IP_VECTOR=*/ saveRoute, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
+                  DsrRouteCacheEntry toSource (/*IP_VECTOR=*/ saveRoute, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
                   NS_ASSERT (saveRoute.front () == ipv4Address);
                   // Add the route entry in the route cache
                   if (dsr->IsLinkCache ())
@@ -1039,7 +1039,7 @@
        * The route looks like:
        * \\ "srcAddress" + "intermediate node address" + "targetAddress"
        */
-      RouteCacheEntry toDestination (/*IP_VECTOR=*/ nodeList, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
+      DsrRouteCacheEntry toDestination (/*IP_VECTOR=*/ nodeList, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
       NS_ASSERT (nodeList.front () == ipv4Address);
       bool addRoute = false;
       if (dsr->IsLinkCache ())
@@ -1106,7 +1106,7 @@
         {
           Ipv4Address dst = cutRoute.back ();
           NS_LOG_DEBUG ("The route destination after cut " << dst);
-          RouteCacheEntry toDestination (/*IP_VECTOR=*/ cutRoute, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
+          DsrRouteCacheEntry toDestination (/*IP_VECTOR=*/ cutRoute, /*dst=*/ dst, /*expire time=*/ ActiveRouteTimeout);
           NS_ASSERT (cutRoute.front () == ipv4Address);
           bool addRoute = false;
           if (dsr->IsLinkCache ())
diff -Naur ns-3.24.1/src/dsr/model/dsr-options.h ns-3.25/src/dsr/model/dsr-options.h
--- ns-3.24.1/src/dsr/model/dsr-options.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-options.h	2016-03-23 21:36:52.000000000 -0700
@@ -236,11 +236,11 @@
   /**
    * \brief The route request table.
    */
-  Ptr<dsr::RreqTable> m_rreqTable;
+  Ptr<dsr::DsrRreqTable> m_rreqTable;
   /**
    * \brief The route cache table.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ipv4 route.
    */
@@ -346,7 +346,7 @@
   /**
    * \brief The route cache.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ipv4.
    */
@@ -382,7 +382,7 @@
   /**
    * \brief The route cache.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ip layer 3.
    */
@@ -461,7 +461,7 @@
   /**
    * \brief The route cache.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ipv4 layer 3.
    */
@@ -497,7 +497,7 @@
   /**
    * \brief The route cache.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ipv4 layer 3.
    */
@@ -533,7 +533,7 @@
   /**
    * \brief The route cache.
    */
-  Ptr<dsr::RouteCache> m_routeCache;
+  Ptr<dsr::DsrRouteCache> m_routeCache;
   /**
    * \brief The ipv4 layer 3.
    */
diff -Naur ns-3.24.1/src/dsr/model/dsr-passive-buff.cc ns-3.25/src/dsr/model/dsr-passive-buff.cc
--- ns-3.24.1/src/dsr/model/dsr-passive-buff.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-passive-buff.cc	2016-03-23 21:36:52.000000000 -0700
@@ -38,42 +38,42 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("PassiveBuffer");
+NS_LOG_COMPONENT_DEFINE ("DsrPassiveBuffer");
   
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (PassiveBuffer);
+NS_OBJECT_ENSURE_REGISTERED (DsrPassiveBuffer);
 
-TypeId PassiveBuffer::GetTypeId ()
+TypeId DsrPassiveBuffer::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dsr::PassiveBuffer")
+  static TypeId tid = TypeId ("ns3::dsr::DsrPassiveBuffer")
     .SetParent<Object> ()
     .SetGroupName ("Dsr")
-    .AddConstructor<PassiveBuffer> ()
+    .AddConstructor<DsrPassiveBuffer> ()
   ;
   return tid;
 }
 
-PassiveBuffer::PassiveBuffer ()
+DsrPassiveBuffer::DsrPassiveBuffer ()
 {
 }
 
-PassiveBuffer::~PassiveBuffer ()
+DsrPassiveBuffer::~DsrPassiveBuffer ()
 {
 }
 
 uint32_t
-PassiveBuffer::GetSize ()
+DsrPassiveBuffer::GetSize ()
 {
   Purge ();
   return m_passiveBuffer.size ();
 }
 
 bool
-PassiveBuffer::Enqueue (PassiveBuffEntry & entry)
+DsrPassiveBuffer::Enqueue (DsrPassiveBuffEntry & entry)
 {
   Purge ();
-  for (std::vector<PassiveBuffEntry>::const_iterator i = m_passiveBuffer.begin (); i
+  for (std::vector<DsrPassiveBuffEntry>::const_iterator i = m_passiveBuffer.begin (); i
        != m_passiveBuffer.end (); ++i)
     {
 //      NS_LOG_INFO ("packet id " << i->GetPacket ()->GetUid () << " " << entry.GetPacket ()->GetUid () << " source " << i->GetSource () << " " << entry.GetSource ()
@@ -104,9 +104,9 @@
 }
 
 bool
-PassiveBuffer::AllEqual (PassiveBuffEntry & entry)
+DsrPassiveBuffer::AllEqual (DsrPassiveBuffEntry & entry)
 {
-  for (std::vector<PassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i
+  for (std::vector<DsrPassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i
        != m_passiveBuffer.end (); ++i)
     {
 //      NS_LOG_INFO ("packet id " << i->GetPacket ()->GetUid () << " " << entry.GetPacket ()->GetUid () << " source " << i->GetSource () << " " << entry.GetSource ()
@@ -126,13 +126,13 @@
 }
 
 bool
-PassiveBuffer::Dequeue (Ipv4Address dst, PassiveBuffEntry & entry)
+DsrPassiveBuffer::Dequeue (Ipv4Address dst, DsrPassiveBuffEntry & entry)
 {
   Purge ();
   /*
    * Dequeue the entry with destination address dst
    */
-  for (std::vector<PassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i != m_passiveBuffer.end (); ++i)
+  for (std::vector<DsrPassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i != m_passiveBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
         {
@@ -146,12 +146,12 @@
 }
 
 bool
-PassiveBuffer::Find (Ipv4Address dst)
+DsrPassiveBuffer::Find (Ipv4Address dst)
 {
   /*
    * Make sure if the send buffer contains entry with certain dst
    */
-  for (std::vector<PassiveBuffEntry>::const_iterator i = m_passiveBuffer.begin (); i
+  for (std::vector<DsrPassiveBuffEntry>::const_iterator i = m_passiveBuffer.begin (); i
        != m_passiveBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
@@ -166,7 +166,7 @@
 struct IsExpired
 {
   bool
-  operator() (PassiveBuffEntry const & e) const
+  operator() (DsrPassiveBuffEntry const & e) const
   {
     // NS_LOG_DEBUG("Expire time for packet in req queue: "<<e.GetExpireTime ());
     return (e.GetExpireTime () < Seconds (0));
@@ -174,14 +174,14 @@
 };
 
 void
-PassiveBuffer::Purge ()
+DsrPassiveBuffer::Purge ()
 {
   /*
    * Purge the buffer to eliminate expired entries
    */
   NS_LOG_DEBUG ("The passive buffer size " << m_passiveBuffer.size ());
   IsExpired pred;
-  for (std::vector<PassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i
+  for (std::vector<DsrPassiveBuffEntry>::iterator i = m_passiveBuffer.begin (); i
        != m_passiveBuffer.end (); ++i)
     {
       if (pred (*i))
@@ -195,7 +195,7 @@
 }
 
 void
-PassiveBuffer::Drop (PassiveBuffEntry en, std::string reason)
+DsrPassiveBuffer::Drop (DsrPassiveBuffEntry en, std::string reason)
 {
   NS_LOG_LOGIC (reason << en.GetPacket ()->GetUid () << " " << en.GetDestination ());
 //  en.GetErrorCallback () (en.GetPacket (), en.GetDestination (),
@@ -204,7 +204,7 @@
 }
 
 void
-PassiveBuffer::DropLink (PassiveBuffEntry en, std::string reason)
+DsrPassiveBuffer::DropLink (DsrPassiveBuffEntry en, std::string reason)
 {
   NS_LOG_LOGIC (reason << en.GetPacket ()->GetUid () << " " << en.GetSource () << " " << en.GetNextHop ());
 //  en.GetErrorCallback () (en.GetPacket (), en.GetDestination (),
diff -Naur ns-3.24.1/src/dsr/model/dsr-passive-buff.h ns-3.25/src/dsr/model/dsr-passive-buff.h
--- ns-3.24.1/src/dsr/model/dsr-passive-buff.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-passive-buff.h	2016-03-23 21:36:52.000000000 -0700
@@ -42,11 +42,11 @@
  * \ingroup dsr
  * \brief DSR Passive Buffer Entry
  */
-class PassiveBuffEntry
+class DsrPassiveBuffEntry
 {
 public:
   /**
-   * Construct a PassiveBuffEntry with the given parameters
+   * Construct a DsrPassiveBuffEntry with the given parameters
    *
    * \param pa packet
    * \param d IPv4 address of the destination
@@ -58,7 +58,7 @@
    * \param exp expiration time
    * \param p protocol number
    */
-  PassiveBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
+  DsrPassiveBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (), Ipv4Address s = Ipv4Address (),
                   Ipv4Address n = Ipv4Address (), uint16_t i = 0, uint16_t f = 0, uint8_t seg = 0, Time exp = Simulator::Now (),
                   uint8_t p = 0)
     : m_packet (pa),
@@ -76,7 +76,7 @@
    * Compare send buffer entries
    * \return true if equal
    */
-  bool operator== (PassiveBuffEntry const & o) const
+  bool operator== (DsrPassiveBuffEntry const & o) const
   {
     return ((m_packet == o.m_packet) && (m_source == o.m_source) && (m_nextHop == o.m_nextHop) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
@@ -179,23 +179,23 @@
  * \brief DSR passive buffer
  */
 /************************************************************************************************************************/
-class PassiveBuffer  : public Object
+class DsrPassiveBuffer  : public Object
 {
 public:
 
   static TypeId GetTypeId ();
 
-  PassiveBuffer ();
-  virtual ~PassiveBuffer ();
+  DsrPassiveBuffer ();
+  virtual ~DsrPassiveBuffer ();
 
   /// Push entry in queue, if there is no entry with the same packet and destination address in queue.
-  bool Enqueue (PassiveBuffEntry & entry);
+  bool Enqueue (DsrPassiveBuffEntry & entry);
   /// Return first found (the earliest) entry for given destination
-  bool Dequeue (Ipv4Address dst, PassiveBuffEntry & entry);
+  bool Dequeue (Ipv4Address dst, DsrPassiveBuffEntry & entry);
   /// Finds whether a packet with destination dst exists in the queue
   bool Find (Ipv4Address dst);
   /// Check if all the entries in passive buffer entry is all equal or not
-  bool AllEqual (PassiveBuffEntry & entry);
+  bool AllEqual (DsrPassiveBuffEntry & entry);
   /// Number of entries
   uint32_t GetSize ();
 
@@ -219,19 +219,19 @@
 
 private:
   /// The send buffer to cache unsent packet
-  std::vector<PassiveBuffEntry> m_passiveBuffer;
+  std::vector<DsrPassiveBuffEntry> m_passiveBuffer;
   /// Remove all expired entries
   void Purge ();
   /// Notify that packet is dropped from queue by timeout
-  void Drop (PassiveBuffEntry en, std::string reason);
+  void Drop (DsrPassiveBuffEntry en, std::string reason);
   /// Notify that packet is dropped from queue by timeout
-  void DropLink (PassiveBuffEntry en, std::string reason);
+  void DropLink (DsrPassiveBuffEntry en, std::string reason);
   /// The maximum number of packets that we allow a routing protocol to buffer.
   uint32_t m_maxLen;
   /// The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   Time m_passiveBufferTimeout;
   /// Check if the send buffer entry is the same or not
-  static bool LinkEqual (PassiveBuffEntry en, const std::vector<Ipv4Address> link)
+  static bool LinkEqual (DsrPassiveBuffEntry en, const std::vector<Ipv4Address> link)
   {
     return ((en.GetSource () == link[0]) && (en.GetNextHop () == link[1]));
   }
diff -Naur ns-3.24.1/src/dsr/model/dsr-rcache.cc ns-3.25/src/dsr/model/dsr-rcache.cc
--- ns-3.24.1/src/dsr/model/dsr-rcache.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rcache.cc	2016-03-23 21:36:52.000000000 -0700
@@ -49,11 +49,11 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("RouteCache");
+NS_LOG_COMPONENT_DEFINE ("DsrRouteCache");
   
 namespace dsr {
 
-bool CompareRoutesBoth (const RouteCacheEntry &a, const RouteCacheEntry &b)
+bool CompareRoutesBoth (const DsrRouteCacheEntry &a, const DsrRouteCacheEntry &b)
 {
   // compare based on both with hop count considered priority
   return (a.GetVector ().size () < b.GetVector ().size ())
@@ -61,13 +61,13 @@
   ;
 }
 
-bool CompareRoutesHops (const RouteCacheEntry &a, const RouteCacheEntry &b)
+bool CompareRoutesHops (const DsrRouteCacheEntry &a, const DsrRouteCacheEntry &b)
 {
   // compare based on hops
   return a.GetVector ().size () < b.GetVector ().size ();
 }
 
-bool CompareRoutesExpire (const RouteCacheEntry &a, const RouteCacheEntry &b)
+bool CompareRoutesExpire (const DsrRouteCacheEntry &a, const DsrRouteCacheEntry &b)
 {
   // compare based on expire time
   return a.GetExpireTime () > b.GetExpireTime ();
@@ -78,32 +78,32 @@
   NS_LOG_DEBUG (m_low << "----" << m_high);
 }
 
-NodeStab::NodeStab (Time nodeStab)
+DsrNodeStab::DsrNodeStab (Time nodeStab)
   : m_nodeStability (nodeStab + Simulator::Now ())
 {
 }
 
-NodeStab::~NodeStab ()
+DsrNodeStab::~DsrNodeStab ()
 {
 }
 
-LinkStab::LinkStab (Time linkStab)
+DsrLinkStab::DsrLinkStab (Time linkStab)
   : m_linkStability (linkStab + Simulator::Now ())
 {
 }
 
-LinkStab::~LinkStab ()
+DsrLinkStab::~DsrLinkStab ()
 {
 }
 
-void LinkStab::Print ( ) const
+void DsrLinkStab::Print ( ) const
 {
   NS_LOG_LOGIC ("LifeTime: " << GetLinkStability ().GetSeconds ());
 }
 
-typedef std::list<RouteCacheEntry>::value_type route_pair;
+typedef std::list<DsrRouteCacheEntry>::value_type route_pair;
 
-RouteCacheEntry::RouteCacheEntry (IP_VECTOR const  & ip, Ipv4Address dst, Time exp)
+DsrRouteCacheEntry::DsrRouteCacheEntry (IP_VECTOR const  & ip, Ipv4Address dst, Time exp)
   : m_ackTimer (Timer::CANCEL_ON_DESTROY),
     m_dst (dst),
     m_path (ip),
@@ -114,37 +114,37 @@
 {
 }
 
-RouteCacheEntry::~RouteCacheEntry ()
+DsrRouteCacheEntry::~DsrRouteCacheEntry ()
 {
 }
 
 void
-RouteCacheEntry::Invalidate (Time badLinkLifetime)
+DsrRouteCacheEntry::Invalidate (Time badLinkLifetime)
 {
   m_reqCount = 0;
   m_expire = badLinkLifetime + Simulator::Now ();
 }
 
 void
-RouteCacheEntry::Print (std::ostream & os) const
+DsrRouteCacheEntry::Print (std::ostream & os) const
 {
   os << m_dst << "\t" << (m_expire - Simulator::Now ()).GetSeconds ()
      << "\t";
 }
 
-NS_OBJECT_ENSURE_REGISTERED (RouteCache);
+NS_OBJECT_ENSURE_REGISTERED (DsrRouteCache);
 
-TypeId RouteCache::GetTypeId ()
+TypeId DsrRouteCache::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dsr::RouteCache")
+  static TypeId tid = TypeId ("ns3::dsr::DsrRouteCache")
     .SetParent<Object> ()
     .SetGroupName ("Dsr")
-    .AddConstructor<RouteCache> ()
+    .AddConstructor<DsrRouteCache> ()
   ;
   return tid;
 }
 
-RouteCache::RouteCache ()
+DsrRouteCache::DsrRouteCache ()
   : m_vector (0),
     m_maxEntriesEachDst (3),
     m_isLinkCache (false),
@@ -155,11 +155,11 @@
    * The timer to set layer 2 notification, not fully supported by ns3 yet
    */
   m_ntimer.SetDelay (m_delay);
-  m_ntimer.SetFunction (&RouteCache::PurgeMac, this);
-  m_txErrorCallback = MakeCallback (&RouteCache::ProcessTxError, this);
+  m_ntimer.SetFunction (&DsrRouteCache::PurgeMac, this);
+  m_txErrorCallback = MakeCallback (&DsrRouteCache::ProcessTxError, this);
 }
 
-RouteCache::~RouteCache ()
+DsrRouteCache::~DsrRouteCache ()
 {
   NS_LOG_FUNCTION_NOARGS ();
   // clear the route cache when done
@@ -167,7 +167,7 @@
 }
 
 void
-RouteCache::RemoveLastEntry (std::list<RouteCacheEntry> & rtVector)
+DsrRouteCache::RemoveLastEntry (std::list<DsrRouteCacheEntry> & rtVector)
 {
   NS_LOG_FUNCTION (this);
   // Release the last entry of route list
@@ -175,10 +175,10 @@
 }
 
 bool
-RouteCache::UpdateRouteEntry (Ipv4Address dst)
+DsrRouteCache::UpdateRouteEntry (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
-  std::map<Ipv4Address, std::list<RouteCacheEntry> >::const_iterator i =
+  std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::const_iterator i =
     m_sortedRoutes.find (dst);
   if (i == m_sortedRoutes.end ())
     {
@@ -187,8 +187,8 @@
     }
   else
     {
-      std::list<RouteCacheEntry> rtVector = i->second;
-      RouteCacheEntry successEntry = rtVector.front ();
+      std::list<DsrRouteCacheEntry> rtVector = i->second;
+      DsrRouteCacheEntry successEntry = rtVector.front ();
       successEntry.SetExpireTime (RouteCacheTimeout);
       rtVector.pop_front ();
       rtVector.push_back (successEntry);
@@ -197,7 +197,7 @@
       /*
        * Save the new route cache along with the destination address in map
        */
-      std::pair<std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator, bool> result =
+      std::pair<std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator, bool> result =
         m_sortedRoutes.insert (std::make_pair (dst, rtVector));
       return result.second;
     }
@@ -205,7 +205,7 @@
 }
 
 bool
-RouteCache::LookupRoute (Ipv4Address id, RouteCacheEntry & rt)
+DsrRouteCache::LookupRoute (Ipv4Address id, DsrRouteCacheEntry & rt)
 {
   NS_LOG_FUNCTION (this << id);
   if (IsLinkCache ())
@@ -220,24 +220,24 @@
           NS_LOG_LOGIC ("Route to " << id << " not found; m_sortedRoutes is empty");
           return false;
         }
-      std::map<Ipv4Address, std::list<RouteCacheEntry> >::const_iterator i = m_sortedRoutes.find (id);
+      std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::const_iterator i = m_sortedRoutes.find (id);
       if (i == m_sortedRoutes.end ())
         {
           NS_LOG_LOGIC ("No Direct Route to " << id << " found");
-          for (std::map<Ipv4Address, std::list<RouteCacheEntry> >::const_iterator j =
+          for (std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::const_iterator j =
                  m_sortedRoutes.begin (); j != m_sortedRoutes.end (); ++j)
             {
-              std::list<RouteCacheEntry> rtVector = j->second; // The route cache vector linked with destination address
+              std::list<DsrRouteCacheEntry> rtVector = j->second; // The route cache vector linked with destination address
               /*
                * Loop through the possibly multiple routes within the route vector
                */
-              for (std::list<RouteCacheEntry>::const_iterator k = rtVector.begin (); k != rtVector.end (); ++k)
+              for (std::list<DsrRouteCacheEntry>::const_iterator k = rtVector.begin (); k != rtVector.end (); ++k)
                 {
                   // return the first route in the route vector
-                  RouteCacheEntry::IP_VECTOR routeVector = k->GetVector ();
-                  RouteCacheEntry::IP_VECTOR changeVector;
+                  DsrRouteCacheEntry::IP_VECTOR routeVector = k->GetVector ();
+                  DsrRouteCacheEntry::IP_VECTOR changeVector;
 
-                  for (RouteCacheEntry::IP_VECTOR::iterator l = routeVector.begin (); l != routeVector.end (); ++l)
+                  for (DsrRouteCacheEntry::IP_VECTOR::iterator l = routeVector.begin (); l != routeVector.end (); ++l)
                     {
                       if (*l != id)
                         {
@@ -255,13 +255,13 @@
                    */
                   if ((changeVector.size () < routeVector.size ())  && (changeVector.size () > 1))
                     {
-                      RouteCacheEntry changeEntry; // Create the route entry
+                      DsrRouteCacheEntry changeEntry; // Create the route entry
                       changeEntry.SetVector (changeVector);
                       changeEntry.SetDestination (id);
                       // Use the expire time from original route entry
                       changeEntry.SetExpireTime (k->GetExpireTime ());
                       // We need to add new route entry here
-                      std::list<RouteCacheEntry> newVector;
+                      std::list<DsrRouteCacheEntry> newVector;
                       newVector.push_back (changeEntry);
                       newVector.sort (CompareRoutesExpire);  // sort the route vector first
                       m_sortedRoutes[id] = newVector;   // Only get the first sub route and add it in route cache
@@ -271,7 +271,7 @@
             }
         }
       NS_LOG_INFO ("Here we check the route cache again after updated the sub routes");
-      std::map<Ipv4Address, std::list<RouteCacheEntry> >::const_iterator m = m_sortedRoutes.find (id);
+      std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::const_iterator m = m_sortedRoutes.find (id);
       if (m == m_sortedRoutes.end ())
         {
           NS_LOG_LOGIC ("No updated route till last time");
@@ -280,7 +280,7 @@
       /*
        * We have a direct route to the destination address
        */
-      std::list<RouteCacheEntry> rtVector = m->second;
+      std::list<DsrRouteCacheEntry> rtVector = m->second;
       rt = rtVector.front ();  // use the first entry in the route vector
       NS_LOG_LOGIC ("Route to " << id << " with route size " << rtVector.size ());
       return true;
@@ -288,7 +288,7 @@
 }
 
 void
-RouteCache::SetCacheType (std::string type)
+DsrRouteCache::SetCacheType (std::string type)
 {
   NS_LOG_FUNCTION (this << type);
   if (type == std::string ("LinkCache"))
@@ -307,14 +307,14 @@
 }
 
 bool
-RouteCache::IsLinkCache ()
+DsrRouteCache::IsLinkCache ()
 {
   NS_LOG_FUNCTION (this);
   return m_isLinkCache;
 }
 
 void
-RouteCache::RebuildBestRouteTable (Ipv4Address source)
+DsrRouteCache::RebuildBestRouteTable (Ipv4Address source)
 {
   NS_LOG_FUNCTION (this << source);
   /**
@@ -381,8 +381,8 @@
                */
               else if (d[k->first] == d[tempip] + k->second)
                 {
-                  std::map<Link, LinkStab>::iterator oldlink = m_linkCache.find (Link (k->first, pre[k->first]));
-                  std::map<Link, LinkStab>::iterator newlink = m_linkCache.find (Link (k->first, tempip));
+                  std::map<Link, DsrLinkStab>::iterator oldlink = m_linkCache.find (Link (k->first, pre[k->first]));
+                  std::map<Link, DsrLinkStab>::iterator newlink = m_linkCache.find (Link (k->first, tempip));
                   if (oldlink != m_linkCache.end () && newlink != m_linkCache.end ())
                     {
                       if (oldlink->second.GetLinkStability () < newlink->second.GetLinkStability ())
@@ -405,7 +405,7 @@
   for (std::map<Ipv4Address, Ipv4Address>::iterator i = pre.begin (); i != pre.end (); ++i)
     {
       // loop for all vertexes
-      RouteCacheEntry::IP_VECTOR route;
+      DsrRouteCacheEntry::IP_VECTOR route;
       Ipv4Address iptemp = i->first;
 
       if (!i->second.IsBroadcast () && iptemp != source)
@@ -417,8 +417,8 @@
             }
           route.push_back (source);
           // Reverse the route
-          RouteCacheEntry::IP_VECTOR reverseroute;
-          for (RouteCacheEntry::IP_VECTOR::reverse_iterator j = route.rbegin (); j != route.rend (); ++j)
+          DsrRouteCacheEntry::IP_VECTOR reverseroute;
+          for (DsrRouteCacheEntry::IP_VECTOR::reverse_iterator j = route.rbegin (); j != route.rend (); ++j)
             {
               reverseroute.push_back (*j);
             }
@@ -430,12 +430,12 @@
 }
 
 bool
-RouteCache::LookupRoute_Link (Ipv4Address id, RouteCacheEntry & rt)
+DsrRouteCache::LookupRoute_Link (Ipv4Address id, DsrRouteCacheEntry & rt)
 {
   NS_LOG_FUNCTION (this << id);
   /// We need to purge the link node cache
   PurgeLinkNode ();
-  std::map<Ipv4Address, RouteCacheEntry::IP_VECTOR>::const_iterator i = m_bestRoutesTable_link.find (id);
+  std::map<Ipv4Address, DsrRouteCacheEntry::IP_VECTOR>::const_iterator i = m_bestRoutesTable_link.find (id);
   if (i == m_bestRoutesTable_link.end ())
     {
       NS_LOG_INFO ("No route find to " << id);
@@ -449,7 +449,7 @@
           return false;
         }
 
-      RouteCacheEntry newEntry; // Create the route entry
+      DsrRouteCacheEntry newEntry; // Create the route entry
       newEntry.SetVector (i->second);
       newEntry.SetDestination (id);
       newEntry.SetExpireTime (RouteCacheTimeout);
@@ -462,13 +462,13 @@
 }
 
 void
-RouteCache::PurgeLinkNode ()
+DsrRouteCache::PurgeLinkNode ()
 {
   NS_LOG_FUNCTION (this);
-  for (std::map<Link, LinkStab>::iterator i = m_linkCache.begin (); i != m_linkCache.end (); )
+  for (std::map<Link, DsrLinkStab>::iterator i = m_linkCache.begin (); i != m_linkCache.end (); )
     {
       NS_LOG_DEBUG ("The link stability " << i->second.GetLinkStability ().GetSeconds ());
-      std::map<Link, LinkStab>::iterator itmp = i;
+      std::map<Link, DsrLinkStab>::iterator itmp = i;
       if (i->second.GetLinkStability () <= Seconds (0))
         {
           ++i;
@@ -480,10 +480,10 @@
         }
     }
   /// may need to remove them after verify
-  for (std::map<Ipv4Address, NodeStab>::iterator i = m_nodeCache.begin (); i != m_nodeCache.end (); )
+  for (std::map<Ipv4Address, DsrNodeStab>::iterator i = m_nodeCache.begin (); i != m_nodeCache.end (); )
     {
       NS_LOG_DEBUG ("The node stability " << i->second.GetNodeStability ().GetSeconds ());
-      std::map<Ipv4Address, NodeStab>::iterator itmp = i;
+      std::map<Ipv4Address, DsrNodeStab>::iterator itmp = i;
       if (i->second.GetNodeStability () <= Seconds (0))
         {
           ++i;
@@ -497,11 +497,11 @@
 }
 
 void
-RouteCache::UpdateNetGraph ()
+DsrRouteCache::UpdateNetGraph ()
 {
   NS_LOG_FUNCTION (this);
   m_netGraph.clear ();
-  for (std::map<Link, LinkStab>::iterator i = m_linkCache.begin (); i != m_linkCache.end (); ++i)
+  for (std::map<Link, DsrLinkStab>::iterator i = m_linkCache.begin (); i != m_linkCache.end (); ++i)
     {
       // Here the weight is set as 1
       /// \todo May need to set different weight for different link here later
@@ -512,14 +512,14 @@
 }
 
 bool
-RouteCache::IncStability (Ipv4Address node)
+DsrRouteCache::IncStability (Ipv4Address node)
 {
   NS_LOG_FUNCTION (this << node);
-  std::map<Ipv4Address, NodeStab>::const_iterator i = m_nodeCache.find (node);
+  std::map<Ipv4Address, DsrNodeStab>::const_iterator i = m_nodeCache.find (node);
   if (i == m_nodeCache.end ())
     {
       NS_LOG_INFO ("The initial stability " << m_initStability.GetSeconds ());
-      NodeStab ns (m_initStability);
+      DsrNodeStab ns (m_initStability);
       m_nodeCache[node] = ns;
       return false;
     }
@@ -528,7 +528,7 @@
       /// \todo get rid of the debug here
       NS_LOG_INFO ("The node stability " << i->second.GetNodeStability ().GetSeconds ());
       NS_LOG_INFO ("The stability here " << Time (i->second.GetNodeStability () * m_stabilityIncrFactor).GetSeconds ());
-      NodeStab ns (Time (i->second.GetNodeStability () * m_stabilityIncrFactor));
+      DsrNodeStab ns (Time (i->second.GetNodeStability () * m_stabilityIncrFactor));
       m_nodeCache[node] = ns;
       return true;
     }
@@ -536,13 +536,13 @@
 }
 
 bool
-RouteCache::DecStability (Ipv4Address node)
+DsrRouteCache::DecStability (Ipv4Address node)
 {
   NS_LOG_FUNCTION (this << node);
-  std::map<Ipv4Address, NodeStab>::const_iterator i = m_nodeCache.find (node);
+  std::map<Ipv4Address, DsrNodeStab>::const_iterator i = m_nodeCache.find (node);
   if (i == m_nodeCache.end ())
     {
-      NodeStab ns (m_initStability);
+      DsrNodeStab ns (m_initStability);
       m_nodeCache[node] = ns;
       return false;
     }
@@ -551,7 +551,7 @@
       /// \todo remove it here
       NS_LOG_INFO ("The stability here " << i->second.GetNodeStability ().GetSeconds ());
       NS_LOG_INFO ("The stability here " << Time (i->second.GetNodeStability () / m_stabilityDecrFactor).GetSeconds ());
-      NodeStab ns (Time (i->second.GetNodeStability () / m_stabilityDecrFactor));
+      DsrNodeStab ns (Time (i->second.GetNodeStability () / m_stabilityDecrFactor));
       m_nodeCache[node] = ns;
       return true;
     }
@@ -559,7 +559,7 @@
 }
 
 bool
-RouteCache::AddRoute_Link (RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source)
+DsrRouteCache::AddRoute_Link (DsrRouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source)
 {
   NS_LOG_FUNCTION (this << source);
   NS_LOG_LOGIC ("Use Link Cache");
@@ -567,7 +567,7 @@
   PurgeLinkNode ();
   for (uint32_t i = 0; i < nodelist.size () - 1; i++)
     {
-      NodeStab ns;                /// This is the node stability
+      DsrNodeStab ns;                /// This is the node stability
       ns.SetNodeStability (m_initStability);
 
       if (m_nodeCache.find (nodelist[i]) == m_nodeCache.end ())
@@ -579,7 +579,7 @@
           m_nodeCache[nodelist[i + 1]] = ns;
         }
       Link link (nodelist[i], nodelist[i + 1]);         /// Link represent the one link for the route
-      LinkStab stab;                /// Link stability
+      DsrLinkStab stab;                /// Link stability
       stab.SetLinkStability (m_initStability);
       /// Set the link stability as the smallest node stability
       if (m_nodeCache[nodelist[i]].GetNodeStability () < m_nodeCache[nodelist[i + 1]].GetNodeStability ())
@@ -608,7 +608,7 @@
 }
 
 void
-RouteCache::UseExtends (RouteCacheEntry::IP_VECTOR rt)
+DsrRouteCache::UseExtends (DsrRouteCacheEntry::IP_VECTOR rt)
 {
   NS_LOG_FUNCTION (this);
   /// Purge the link node cache first
@@ -618,7 +618,7 @@
       NS_LOG_INFO ("The route is too short");
       return;
     }
-  for (RouteCacheEntry::IP_VECTOR::iterator i = rt.begin (); i != rt.end () - 1; ++i)
+  for (DsrRouteCacheEntry::IP_VECTOR::iterator i = rt.begin (); i != rt.end () - 1; ++i)
     {
       Link link (*i, *(i + 1));
       if (m_linkCache.find (link) != m_linkCache.end ())
@@ -636,7 +636,7 @@
         }
     }
   /// Increase the stability of the node cache
-  for (RouteCacheEntry::IP_VECTOR::iterator i = rt.begin (); i != rt.end (); ++i)
+  for (DsrRouteCacheEntry::IP_VECTOR::iterator i = rt.begin (); i != rt.end (); ++i)
     {
       if (m_nodeCache.find (*i) != m_nodeCache.end ())
         {
@@ -654,16 +654,16 @@
 }
 
 bool
-RouteCache::AddRoute (RouteCacheEntry & rt)
+DsrRouteCache::AddRoute (DsrRouteCacheEntry & rt)
 {
   NS_LOG_FUNCTION (this);
   Purge ();
-  std::list<RouteCacheEntry> rtVector;   // Declare the route cache entry vector
+  std::list<DsrRouteCacheEntry> rtVector;   // Declare the route cache entry vector
   Ipv4Address dst = rt.GetDestination ();
   std::vector<Ipv4Address> route = rt.GetVector ();
 
   NS_LOG_DEBUG ("The route destination we have " << dst);
-  std::map<Ipv4Address, std::list<RouteCacheEntry> >::const_iterator i =
+  std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::const_iterator i =
     m_sortedRoutes.find (dst);
 
   if (i == m_sortedRoutes.end ())
@@ -673,7 +673,7 @@
       /**
        * Save the new route cache along with the destination address in map
        */
-      std::pair<std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator, bool> result =
+      std::pair<std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator, bool> result =
         m_sortedRoutes.insert (std::make_pair (dst, rtVector));
       return result.second;
     }
@@ -711,7 +711,7 @@
               /**
                * Save the new route cache along with the destination address in map
                */
-              std::pair<std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator, bool> result =
+              std::pair<std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator, bool> result =
                 m_sortedRoutes.insert (std::make_pair (dst, rtVector));
               return result.second;
             }
@@ -724,14 +724,14 @@
   return false;
 }
 
-bool RouteCache::FindSameRoute (RouteCacheEntry & rt, std::list<RouteCacheEntry> & rtVector)
+bool DsrRouteCache::FindSameRoute (DsrRouteCacheEntry & rt, std::list<DsrRouteCacheEntry> & rtVector)
 {
   NS_LOG_FUNCTION (this);
-  for (std::list<RouteCacheEntry>::iterator i = rtVector.begin (); i != rtVector.end (); ++i)
+  for (std::list<DsrRouteCacheEntry>::iterator i = rtVector.begin (); i != rtVector.end (); ++i)
     {
       // return the first route in the route vector
-      RouteCacheEntry::IP_VECTOR routeVector = i->GetVector ();
-      RouteCacheEntry::IP_VECTOR newVector = rt.GetVector ();
+      DsrRouteCacheEntry::IP_VECTOR routeVector = i->GetVector ();
+      DsrRouteCacheEntry::IP_VECTOR newVector = rt.GetVector ();
 
       if (routeVector == newVector)
         {
@@ -748,7 +748,7 @@
           /*
            * Save the new route cache along with the destination address in map
            */
-          std::pair<std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator, bool> result =
+          std::pair<std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator, bool> result =
             m_sortedRoutes.insert (std::make_pair (rt.GetDestination (), rtVector));
           return result.second;
         }
@@ -757,7 +757,7 @@
 }
 
 bool
-RouteCache::DeleteRoute (Ipv4Address dst)
+DsrRouteCache::DeleteRoute (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
   Purge (); // purge the route cache first to remove timeout entries
@@ -771,7 +771,7 @@
 }
 
 void
-RouteCache::DeleteAllRoutesIncludeLink (Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node)
+DsrRouteCache::DeleteAllRoutesIncludeLink (Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node)
 {
   NS_LOG_FUNCTION (this << errorSrc << unreachNode << node);
   if (IsLinkCache ())
@@ -792,7 +792,7 @@
       m_linkCache.erase (link2);
       NS_LOG_DEBUG ("The link cache size " << m_linkCache.size());
 
-      std::map<Ipv4Address, NodeStab>::iterator i = m_nodeCache.find (errorSrc);
+      std::map<Ipv4Address, DsrNodeStab>::iterator i = m_nodeCache.find (errorSrc);
       if (i == m_nodeCache.end ())
         {
           NS_LOG_LOGIC ("Update the node stability unsuccessfully");
@@ -827,24 +827,24 @@
       /*
        * Loop all the routes saved in the route cache
        */
-      for (std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator j =
+      for (std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator j =
              m_sortedRoutes.begin (); j != m_sortedRoutes.end (); )
         {
-          std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator jtmp = j;
+          std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator jtmp = j;
           Ipv4Address address = j->first;
-          std::list<RouteCacheEntry> rtVector = j->second;
+          std::list<DsrRouteCacheEntry> rtVector = j->second;
           /*
            * Loop all the routes for a single destination
            */
-          for (std::list<RouteCacheEntry>::iterator k = rtVector.begin (); k != rtVector.end (); )
+          for (std::list<DsrRouteCacheEntry>::iterator k = rtVector.begin (); k != rtVector.end (); )
             {
               // return the first route in the route vector
-              RouteCacheEntry::IP_VECTOR routeVector = k->GetVector ();
-              RouteCacheEntry::IP_VECTOR changeVector;
+              DsrRouteCacheEntry::IP_VECTOR routeVector = k->GetVector ();
+              DsrRouteCacheEntry::IP_VECTOR changeVector;
               /*
                * Loop the ip addresses within a single route entry
                */
-              for (RouteCacheEntry::IP_VECTOR::iterator i = routeVector.begin (); i != routeVector.end (); ++i)
+              for (DsrRouteCacheEntry::IP_VECTOR::iterator i = routeVector.begin (); i != routeVector.end (); ++i)
                 {
                   if (*i != errorSrc)
                     {
@@ -881,7 +881,7 @@
                        * Remove the route first
                        */
                       k = rtVector.erase (k);
-                      RouteCacheEntry changeEntry;
+                      DsrRouteCacheEntry changeEntry;
                       changeEntry.SetVector (changeVector);
                       Ipv4Address destination = changeVector.back ();
                       NS_LOG_DEBUG ("The destination of the newly formed route " << destination << " and the size of the route " << changeVector.size ());
@@ -929,7 +929,7 @@
 }
 
 void
-RouteCache::PrintVector (std::vector<Ipv4Address>& vec)
+DsrRouteCache::PrintVector (std::vector<Ipv4Address>& vec)
 {
   NS_LOG_FUNCTION (this);
   /*
@@ -950,10 +950,10 @@
 }
 
 void
-RouteCache::PrintRouteVector (std::list<RouteCacheEntry> route)
+DsrRouteCache::PrintRouteVector (std::list<DsrRouteCacheEntry> route)
 {
   NS_LOG_FUNCTION (this);
-  for (std::list<RouteCacheEntry>::iterator i = route.begin (); i != route.end (); i++)
+  for (std::list<DsrRouteCacheEntry>::iterator i = route.begin (); i != route.end (); i++)
     {
       std::vector<Ipv4Address> path = i->GetVector ();
       NS_LOG_INFO ("Route NO. ");
@@ -962,7 +962,7 @@
 }
 
 void
-RouteCache::Purge ()
+DsrRouteCache::Purge ()
 {
   NS_LOG_FUNCTION (this);
   //Trying to purge the route cache
@@ -971,20 +971,20 @@
       NS_LOG_DEBUG ("The route cache is empty");
       return;
     }
-  for (std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator i =
+  for (std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator i =
          m_sortedRoutes.begin (); i != m_sortedRoutes.end (); )
     {
       // Loop of route cache entry with the route size
-      std::map<Ipv4Address, std::list<RouteCacheEntry> >::iterator itmp = i;
+      std::map<Ipv4Address, std::list<DsrRouteCacheEntry> >::iterator itmp = i;
       /*
        * The route cache entry vector
        */
       Ipv4Address dst = i->first;
-      std::list<RouteCacheEntry> rtVector = i->second;
+      std::list<DsrRouteCacheEntry> rtVector = i->second;
       NS_LOG_DEBUG ("The route vector size of 1 " << dst << " " << rtVector.size ());
       if (rtVector.size ())
         {
-          for (std::list<RouteCacheEntry>::iterator j = rtVector.begin (); j != rtVector.end (); )
+          for (std::list<DsrRouteCacheEntry>::iterator j = rtVector.begin (); j != rtVector.end (); )
             {
               NS_LOG_DEBUG ("The expire time of every entry with expire time " << j->GetExpireTime ());
               /*
@@ -1029,13 +1029,13 @@
 }
 
 void
-RouteCache::Print (std::ostream &os)
+DsrRouteCache::Print (std::ostream &os)
 {
   NS_LOG_FUNCTION (this);
   Purge ();
   os << "\nDSR Route Cache\n"
      << "Destination\tGateway\t\tInterface\tFlag\tExpire\tHops\n";
-  for (std::list<RouteCacheEntry>::const_iterator i =
+  for (std::list<DsrRouteCacheEntry>::const_iterator i =
          m_routeEntryVector.begin (); i != m_routeEntryVector.end (); ++i)
     {
       i->Print (os);
@@ -1048,7 +1048,7 @@
  * This part of code maintains an Acknowledgment id cache for next hop and remove duplicate ids
  */
 uint16_t
-RouteCache::CheckUniqueAckId (Ipv4Address nextHop)
+DsrRouteCache::CheckUniqueAckId (Ipv4Address nextHop)
 {
   NS_LOG_FUNCTION (this);
   std::map<Ipv4Address, uint16_t>::const_iterator i =
@@ -1070,7 +1070,7 @@
 }
 
 uint16_t
-RouteCache::GetAckSize ()
+DsrRouteCache::GetAckSize ()
 {
   return m_ackIdCache.size ();
 }
@@ -1080,7 +1080,7 @@
  * This part maintains a neighbor list to handle unidirectional links and link-layer acks
  */
 bool
-RouteCache::IsNeighbor (Ipv4Address addr)
+DsrRouteCache::IsNeighbor (Ipv4Address addr)
 {
   NS_LOG_FUNCTION (this);
   PurgeMac ();  // purge the mac cache
@@ -1096,7 +1096,7 @@
 }
 
 Time
-RouteCache::GetExpireTime (Ipv4Address addr)
+DsrRouteCache::GetExpireTime (Ipv4Address addr)
 {
   NS_LOG_FUNCTION (this);
   PurgeMac ();
@@ -1112,7 +1112,7 @@
 }
 
 void
-RouteCache::UpdateNeighbor (std::vector<Ipv4Address> nodeList, Time expire)
+DsrRouteCache::UpdateNeighbor (std::vector<Ipv4Address> nodeList, Time expire)
 {
   NS_LOG_FUNCTION (this);
   for (std::vector<Neighbor>::iterator i = m_nb.begin (); i != m_nb.end (); ++i)
@@ -1140,7 +1140,7 @@
 }
 
 void
-RouteCache::AddNeighbor (std::vector<Ipv4Address> nodeList, Ipv4Address ownAddress, Time expire)
+DsrRouteCache::AddNeighbor (std::vector<Ipv4Address> nodeList, Ipv4Address ownAddress, Time expire)
 {
   NS_LOG_LOGIC ("Add neighbor number " << nodeList.size ());
   for (std::vector<Ipv4Address>::iterator j = nodeList.begin (); j != nodeList.end ();)
@@ -1163,14 +1163,14 @@
 
 struct CloseNeighbor
 {
-  bool operator() (const RouteCache::Neighbor & nb) const
+  bool operator() (const DsrRouteCache::Neighbor & nb) const
   {
     return ((nb.m_expireTime < Simulator::Now ()) || nb.close);
   }
 };
 
 void
-RouteCache::PurgeMac ()
+DsrRouteCache::PurgeMac ()
 {
   if (m_nb.empty ())
     {
@@ -1196,26 +1196,26 @@
 }
 
 void
-RouteCache::ScheduleTimer ()
+DsrRouteCache::ScheduleTimer ()
 {
   m_ntimer.Cancel ();
   m_ntimer.Schedule ();
 }
 
 void
-RouteCache::AddArpCache (Ptr<ArpCache> a)
+DsrRouteCache::AddArpCache (Ptr<ArpCache> a)
 {
   m_arp.push_back (a);
 }
 
 void
-RouteCache::DelArpCache (Ptr<ArpCache> a)
+DsrRouteCache::DelArpCache (Ptr<ArpCache> a)
 {
   m_arp.erase (std::remove (m_arp.begin (), m_arp.end (), a), m_arp.end ());
 }
 
 Mac48Address
-RouteCache::LookupMacAddress (Ipv4Address addr)
+DsrRouteCache::LookupMacAddress (Ipv4Address addr)
 {
   Mac48Address hwaddr;
   for (std::vector<Ptr<ArpCache> >::const_iterator i = m_arp.begin ();
@@ -1232,7 +1232,7 @@
 }
 
 void
-RouteCache::ProcessTxError (WifiMacHeader const & hdr)
+DsrRouteCache::ProcessTxError (WifiMacHeader const & hdr)
 {
   Mac48Address addr = hdr.GetAddr1 ();
 
diff -Naur ns-3.24.1/src/dsr/model/dsr-rcache.h ns-3.25/src/dsr/model/dsr-rcache.h
--- ns-3.24.1/src/dsr/model/dsr-rcache.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rcache.h	2016-03-23 21:36:52.000000000 -0700
@@ -118,17 +118,17 @@
   void Print () const;
 };
 
-class LinkStab
+class DsrLinkStab
 {
 public:
   /**
    * \brief Constructor
    */
-  LinkStab (Time linkStab = Simulator::Now ());
+  DsrLinkStab (Time linkStab = Simulator::Now ());
   /**
    * \brief Destructor
    */
-  virtual ~LinkStab ();
+  virtual ~DsrLinkStab ();
 
   /**
    * \brief set/get the link stability
@@ -152,12 +152,12 @@
   Time m_linkStability;
 };
 
-class NodeStab
+class DsrNodeStab
 {
 public:
 
-  NodeStab (Time nodeStab = Simulator::Now ());
-  virtual ~NodeStab ();
+  DsrNodeStab (Time nodeStab = Simulator::Now ());
+  virtual ~DsrNodeStab ();
 
   void SetNodeStability (Time nodeStab)
   {
@@ -171,14 +171,14 @@
   Time m_nodeStability;
 };
 
-class RouteCacheEntry
+class DsrRouteCacheEntry
 {
 public:
   typedef std::vector<Ipv4Address> IP_VECTOR;                ///< Define the vector to hold Ip address
   typedef std::vector<Ipv4Address>::iterator Iterator;       ///< Define the iterator
 
-  RouteCacheEntry (IP_VECTOR const  & ip = IP_VECTOR (), Ipv4Address dst = Ipv4Address (), Time exp = Simulator::Now ());
-  virtual ~RouteCacheEntry ();
+  DsrRouteCacheEntry (IP_VECTOR const  & ip = IP_VECTOR (), Ipv4Address dst = Ipv4Address (), Time exp = Simulator::Now ());
+  virtual ~DsrRouteCacheEntry ();
 
   /// Mark entry as "down" (i.e. disable it)
   void Invalidate (Time badLinkLifetime);
@@ -233,7 +233,7 @@
    * \brief Compare the route cache entry
    * \return true if equal
    */
-  bool operator== (RouteCacheEntry const & o) const
+  bool operator== (DsrRouteCacheEntry const & o) const
   {
     if (m_path.size () != o.m_path.size ())
       {
@@ -282,23 +282,23 @@
  * \brief DSR route request queue
  * Since DSR is an on demand routing we queue requests while looking for route.
  */
-class RouteCache : public Object
+class DsrRouteCache : public Object
 {
 public:
 
   static TypeId GetTypeId ();
 
-  RouteCache ();
-  virtual ~RouteCache ();
+  DsrRouteCache ();
+  virtual ~DsrRouteCache ();
 
   /**
    * \brief Remove the aged route cache entries when the route cache is full
    */
-  void RemoveLastEntry (std::list<RouteCacheEntry> & rtVector);
+  void RemoveLastEntry (std::list<DsrRouteCacheEntry> & rtVector);
   /**
    * \brief Define the vector of route entries.
    */
-  typedef std::list<RouteCacheEntry::IP_VECTOR> routeVector;
+  typedef std::list<DsrRouteCacheEntry::IP_VECTOR> routeVector;
 
   // Fields
   bool GetSubRoute () const
@@ -393,14 +393,14 @@
    * \param rt route cache entry
    * \return true in success
    */
-  bool AddRoute (RouteCacheEntry & rt);
+  bool AddRoute (DsrRouteCacheEntry & rt);
   /**
    * \brief Lookup route cache entry with destination address dst
    * \param id destination address
    * \param rt entry with destination address id, if exists
    * \return true on success
    */
-  bool LookupRoute (Ipv4Address id, RouteCacheEntry & rt);
+  bool LookupRoute (Ipv4Address id, DsrRouteCacheEntry & rt);
   /**
    * \brief Print the route vector elements
    * \param vec the route vector
@@ -410,13 +410,13 @@
    * \brief Print all the route vector elements from the route list
    * \param route the route list
    */
-  void PrintRouteVector (std::list<RouteCacheEntry> route);
+  void PrintRouteVector (std::list<DsrRouteCacheEntry> route);
   /**
    * \brief Find the same route in the route cache
    * \param rt entry with destination address dst, if exists
    * \param rtVector the route vector
    */
-  bool FindSameRoute (RouteCacheEntry & rt, std::list<RouteCacheEntry> & rtVector);
+  bool FindSameRoute (DsrRouteCacheEntry & rt, std::list<DsrRouteCacheEntry> & rtVector);
   /**
    * \brief Delete the route with certain destination address
    * \param dst the destination address of the routes that should be deleted
@@ -533,8 +533,8 @@
   }
 
 private:
-  RouteCache & operator= (RouteCache const &);
-  RouteCacheEntry::IP_VECTOR m_vector;                  ///< The route vector to save the ip addresses for intermediate nodes.
+  DsrRouteCache & operator= (DsrRouteCache const &);
+  DsrRouteCacheEntry::IP_VECTOR m_vector;               ///< The route vector to save the ip addresses for intermediate nodes.
   uint32_t m_maxCacheLen;                               ///< The maximum number of packets that we allow a routing protocol to buffer.
   Time     RouteCacheTimeout;                           ///< The maximum period of time that dsr is allowed to for an unused route.
   Time     m_badLinkLifetime;                           ///< The time for which the neighboring node is put into the blacklist.
@@ -549,7 +549,7 @@
   /**
    * Define the route cache data structure
    */
-  typedef std::list<RouteCacheEntry> routeEntryVector;
+  typedef std::list<DsrRouteCacheEntry> routeEntryVector;
 
   std::map<Ipv4Address, routeEntryVector> m_sortedRoutes;       ///< Map the ipv4Address to route entry vector
 
@@ -574,15 +574,15 @@
    */
   std::map<Ipv4Address, std::map<Ipv4Address, uint32_t> > m_netGraph;
 
-  std::map<Ipv4Address, RouteCacheEntry::IP_VECTOR> m_bestRoutesTable_link;     ///< for link route cache
-  std::map<Link, LinkStab> m_linkCache;                                         ///< The data structure to store link info
-  std::map<Ipv4Address, NodeStab> m_nodeCache;                                  ///< The data structure to store node info
+  std::map<Ipv4Address, DsrRouteCacheEntry::IP_VECTOR> m_bestRoutesTable_link;     ///< for link route cache
+  std::map<Link, DsrLinkStab> m_linkCache;                                         ///< The data structure to store link info
+  std::map<Ipv4Address, DsrNodeStab> m_nodeCache;                                  ///< The data structure to store node info
   /**
    * \brief used by LookupRoute when LinkCache
    * \param id the ip address we are looking for
    * \param rt the route cache entry to store the found one
    */
-  bool LookupRoute_Link (Ipv4Address id, RouteCacheEntry & rt);
+  bool LookupRoute_Link (Ipv4Address id, DsrRouteCacheEntry & rt);
   /**
    * \brief increase the stability of the node
    * \param node the ip address of the node we want to increase stability
@@ -602,7 +602,7 @@
    */
   void SetCacheType (std::string type);
   bool IsLinkCache ();
-  bool AddRoute_Link (RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address node);
+  bool AddRoute_Link (DsrRouteCacheEntry::IP_VECTOR nodelist, Ipv4Address node);
   /**
    *  \brief USE MAXWEIGHT TO REPRESENT MAX; USE BROADCAST ADDRESS TO REPRESENT NULL PRECEEDING ADDRESS
    *  \param source The source address the routes based on
@@ -615,7 +615,7 @@
    * amount of time since that link was last used. When a link is used in a route chosen for a packet originated or
    * salvaged by this node, the link's lifetime is set to be at least UseExtends into the future
    */
-  void UseExtends (RouteCacheEntry::IP_VECTOR rt);
+  void UseExtends (DsrRouteCacheEntry::IP_VECTOR rt);
   /**
    *  \brief Update the Net Graph for the link and node cache has changed
    */
diff -Naur ns-3.24.1/src/dsr/model/dsr-routing.cc ns-3.25/src/dsr/model/dsr-routing.cc
--- ns-3.24.1/src/dsr/model/dsr-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-routing.cc	2016-03-23 21:36:52.000000000 -0700
@@ -116,20 +116,20 @@
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetRouteCache,
                                         &DsrRouting::GetRouteCache),
-                   MakePointerChecker<RouteCache> ())
+                   MakePointerChecker<DsrRouteCache> ())
     .AddAttribute ("RreqTable",
                    "The request table to manage route requests.",
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetRequestTable,
                                         &DsrRouting::GetRequestTable),
-                   MakePointerChecker<RreqTable> ())
+                   MakePointerChecker<DsrRreqTable> ())
     .AddAttribute ("PassiveBuffer",
                    "The passive buffer to manage "
                    "promisucously received passive ack.",
                    PointerValue (0),
                    MakePointerAccessor (&DsrRouting::SetPassiveBuffer,
                                         &DsrRouting::GetPassiveBuffer),
-                   MakePointerChecker<PassiveBuffer> ())
+                   MakePointerChecker<DsrPassiveBuffer> ())
     .AddAttribute ("MaxSendBuffLen",
                    "Maximum number of packets that can be stored "
                    "in send buffer.",
@@ -433,7 +433,7 @@
       std::pair<std::map<uint32_t, Ptr<dsr::DsrNetworkQueue> >::iterator, bool> result_i = m_priorityQueue.insert (std::make_pair (i, queue_i));
       NS_ASSERT_MSG (result_i.second, "Error in creating queues");
     }
-  Ptr<dsr::RreqTable> rreqTable = CreateObject<dsr::RreqTable> ();
+  Ptr<dsr::DsrRreqTable> rreqTable = CreateObject<dsr::DsrRreqTable> ();
   // Set the initial hop limit
   rreqTable->SetInitHopLimit (m_discoveryHopLimit);
   // Configure the request table parameters
@@ -442,7 +442,7 @@
   rreqTable->SetUniqueRreqIdSize (m_maxRreqId);
   SetRequestTable (rreqTable);
   // Set the passive buffer parameters using just the send buffer parameters
-  Ptr<dsr::PassiveBuffer> passiveBuffer = CreateObject<dsr::PassiveBuffer> ();
+  Ptr<dsr::DsrPassiveBuffer> passiveBuffer = CreateObject<dsr::DsrPassiveBuffer> ();
   passiveBuffer->SetMaxQueueLen (m_maxSendBuffLen);
   passiveBuffer->SetPassiveBufferTimeout (m_sendBufferTimeout);
   SetPassiveBuffer (passiveBuffer);
@@ -472,7 +472,7 @@
               /*
                * Set dsr route cache
                */
-              Ptr<dsr::RouteCache> routeCache = CreateObject<dsr::RouteCache> ();
+              Ptr<dsr::DsrRouteCache> routeCache = CreateObject<dsr::DsrRouteCache> ();
               // Configure the path cache parameters
               routeCache->SetCacheType (m_cacheType);
               routeCache->SetSubRoute (m_subRoute);
@@ -593,7 +593,7 @@
 
       Ptr<Packet> p = Create<Packet> ();
       // Here the segments left value need to plus one to check the earlier hop maintain buffer entry
-      MaintainBuffEntry newEntry;
+      DsrMaintainBuffEntry newEntry;
       newEntry.SetPacket (p);
       newEntry.SetSrc (sourceIp);
       newEntry.SetDst (destinationIp);
@@ -674,39 +674,39 @@
   return m_node;
 }
 
-void DsrRouting::SetRouteCache (Ptr<dsr::RouteCache> r)
+void DsrRouting::SetRouteCache (Ptr<dsr::DsrRouteCache> r)
 {
   // / Set the route cache to use
   m_routeCache = r;
 }
 
-Ptr<dsr::RouteCache>
+Ptr<dsr::DsrRouteCache>
 DsrRouting::GetRouteCache () const
 {
   // / Get the route cache to use
   return m_routeCache;
 }
 
-void DsrRouting::SetRequestTable (Ptr<dsr::RreqTable> q)
+void DsrRouting::SetRequestTable (Ptr<dsr::DsrRreqTable> q)
 {
   // / Set the request table to use
   m_rreqTable = q;
 }
 
-Ptr<dsr::RreqTable>
+Ptr<dsr::DsrRreqTable>
 DsrRouting::GetRequestTable () const
 {
   // / Get the request table to use
   return m_rreqTable;
 }
 
-void DsrRouting::SetPassiveBuffer (Ptr<dsr::PassiveBuffer> p)
+void DsrRouting::SetPassiveBuffer (Ptr<dsr::DsrPassiveBuffer> p)
 {
   // / Set the request table to use
   m_passiveBuffer = p;
 }
 
-Ptr<dsr::PassiveBuffer>
+Ptr<dsr::DsrPassiveBuffer>
 DsrRouting::GetPassiveBuffer () const
 {
   // / Get the request table to use
@@ -736,24 +736,24 @@
   return m_routeCache->IsLinkCache ();
 }
 
-void DsrRouting::UseExtends (RouteCacheEntry::IP_VECTOR rt)
+void DsrRouting::UseExtends (DsrRouteCacheEntry::IP_VECTOR rt)
 {
   m_routeCache->UseExtends (rt);
 }
 
-bool DsrRouting::LookupRoute (Ipv4Address id, RouteCacheEntry & rt)
+bool DsrRouting::LookupRoute (Ipv4Address id, DsrRouteCacheEntry & rt)
 {
   return m_routeCache->LookupRoute (id, rt);
 }
 
-bool DsrRouting::AddRoute_Link (RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source)
+bool DsrRouting::AddRoute_Link (DsrRouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source)
 {
   Ipv4Address nextHop = SearchNextHop (source, nodelist);
   m_errorBuffer.DropPacketForErrLink (source, nextHop);
   return m_routeCache->AddRoute_Link (nodelist, source);
 }
 
-bool DsrRouting::AddRoute (RouteCacheEntry & rt)
+bool DsrRouting::AddRoute (DsrRouteCacheEntry & rt)
 {
   std::vector<Ipv4Address> nodelist = rt.GetVector ();
   Ipv4Address nextHop = SearchNextHop (m_mainAddress, nodelist);
@@ -925,11 +925,11 @@
   NS_LOG_INFO (Simulator::Now ().GetSeconds ()
                << " Checking send buffer at " << m_mainAddress << " with size " << m_sendBuffer.GetSize ());
 
-  for (std::vector<SendBuffEntry>::iterator i = m_sendBuffer.GetBuffer ().begin (); i != m_sendBuffer.GetBuffer ().end (); )
+  for (std::vector<DsrSendBuffEntry>::iterator i = m_sendBuffer.GetBuffer ().begin (); i != m_sendBuffer.GetBuffer ().end (); )
     {
       NS_LOG_DEBUG ("Here we try to find the data packet in the send buffer");
       Ipv4Address destination = i->GetDestination ();
-      RouteCacheEntry toDst;
+      DsrRouteCacheEntry toDst;
       bool findRoute = m_routeCache->LookupRoute (destination, toDst);
       if (findRoute)
         {
@@ -1061,7 +1061,7 @@
               cleanP->AddHeader (dsrRoutingHeader);
               Ptr<const Packet> mtP = cleanP->Copy ();
               // Put the data packet in the maintenance queue for data packet retransmission
-              MaintainBuffEntry newEntry (/*Packet=*/ mtP, /*Ipv4Address=*/ m_mainAddress, /*nextHop=*/ nextHop,
+              DsrMaintainBuffEntry newEntry (/*Packet=*/ mtP, /*Ipv4Address=*/ m_mainAddress, /*nextHop=*/ nextHop,
                                                       /*source=*/ m_mainAddress, /*destination=*/ destination, /*ackId=*/ 0,
                                                       /*SegsLeft=*/ nodeList.size () - 2, /*expire time=*/ m_maxMaintainTime);
               bool result = m_maintainBuffer.Enqueue (newEntry); // Enqueue the packet the the maintenance buffer
@@ -1200,7 +1200,7 @@
 {
   NS_LOG_FUNCTION (this << packet << source << destination << (uint32_t)protocol);
   // Look up routes for the specific destination
-  RouteCacheEntry toDst;
+  DsrRouteCacheEntry toDst;
   bool findRoute = m_routeCache->LookupRoute (destination, toDst);
   // Queue the packet if there is no route pre-existing
   if (!findRoute)
@@ -1209,7 +1209,7 @@
                    << "s " << m_mainAddress << " there is no route for this packet, queue the packet");
 
       Ptr<Packet> p = packet->Copy ();
-      SendBuffEntry newEntry (p, destination, m_sendBufferTimeout, protocol);     // Create a new entry for send buffer
+      DsrSendBuffEntry newEntry (p, destination, m_sendBufferTimeout, protocol);     // Create a new entry for send buffer
       bool result = m_sendBuffer.Enqueue (newEntry);     // Enqueue the packet in send buffer
       if (result)
         {
@@ -1260,7 +1260,7 @@
       Ptr<const Packet> mtP = cleanP->Copy ();
       SetRoute (nextHop, m_mainAddress);
       // Put the data packet in the maintenance queue for data packet retransmission
-      MaintainBuffEntry newEntry (/*Packet=*/ mtP, /*Ipv4Address=*/ m_mainAddress, /*nextHop=*/ nextHop,
+      DsrMaintainBuffEntry newEntry (/*Packet=*/ mtP, /*Ipv4Address=*/ m_mainAddress, /*nextHop=*/ nextHop,
                                               /*source=*/ source, /*destination=*/ destination, /*ackId=*/ 0,
                                               /*SegsLeft=*/ nodeList.size () - 2, /*expire time=*/ m_maxMaintainTime);
       bool result = m_maintainBuffer.Enqueue (newEntry);     // Enqueue the packet the the maintenance buffer
@@ -1331,7 +1331,7 @@
   uint8_t rerrLength = rerrUnreachHeader.GetLength ();
 
 
-  RouteCacheEntry toDst;
+  DsrRouteCacheEntry toDst;
   bool findRoute = m_routeCache->LookupRoute (destination, toDst);
   // Queue the packet if there is no route pre-existing
   Ptr<Packet> newPacket = Create<Packet> ();
@@ -1353,7 +1353,7 @@
         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);
+        DsrErrorBuffEntry newEntry (p, destination, m_mainAddress, unreachNode, m_sendBufferTimeout, protocol);
         bool result = m_errorBuffer.Enqueue (newEntry);                    // Enqueue the packet in send buffer
         if (result)
           {
@@ -1484,7 +1484,7 @@
   else
     {
       // Look up routes for the specific destination
-      RouteCacheEntry toDst;
+      DsrRouteCacheEntry toDst;
       bool findRoute = m_routeCache->LookupRoute (destination, toDst);
       // Queue the packet if there is no route pre-existing
       if (!findRoute)
@@ -1493,7 +1493,7 @@
                        << "s " << m_mainAddress << " there is no route for this packet, queue the packet");
 
           Ptr<Packet> p = packet->Copy ();
-          SendBuffEntry newEntry (p, destination, m_sendBufferTimeout, protocol);     // Create a new entry for send buffer
+          DsrSendBuffEntry newEntry (p, destination, m_sendBufferTimeout, protocol);     // Create a new entry for send buffer
           bool result = m_sendBuffer.Enqueue (newEntry);     // Enqueue the packet in send buffer
           if (result)
             {
@@ -1550,7 +1550,7 @@
           Ptr<const Packet> mtP = cleanP->Copy ();
           NS_LOG_DEBUG ("maintain packet size " << cleanP->GetSize ());
           // Put the data packet in the maintenance queue for data packet retransmission
-          MaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
+          DsrMaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
                                                   /*source=*/ source, /*destination=*/ destination, /*ackId=*/ 0,
                                                   /*SegsLeft=*/ nodeList.size () - 2, /*expire time=*/ m_maxMaintainTime);
           bool result = m_maintainBuffer.Enqueue (newEntry);       // Enqueue the packet the the maintenance buffer
@@ -1818,7 +1818,7 @@
         {
           m_routeCache->UseExtends (nodeList);
         }
-      SendBuffEntry entry;
+      DsrSendBuffEntry entry;
       if (m_sendBuffer.Dequeue (destination, entry))
         {
           Ptr<Packet> packet = entry.GetPacket ()->Copy ();
@@ -1838,7 +1838,7 @@
 
           Ptr<const Packet> mtP = p->Copy ();
           // Put the data packet in the maintenance queue for data packet retransmission
-          MaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
+          DsrMaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
                                       /*source=*/ source, /*destination=*/ destination, /*ackId=*/ 0,
                                       /*SegsLeft=*/ nodeList.size () - 2, /*expire time=*/ m_maxMaintainTime);
           bool result = m_maintainBuffer.Enqueue (newEntry);       // Enqueue the packet the the maintenance buffer
@@ -1905,7 +1905,7 @@
    */
   else if (m_errorBuffer.Find (destination))
     {
-      ErrorBuffEntry entry;
+      DsrErrorBuffEntry entry;
       if (m_errorBuffer.Dequeue (destination, entry))
         {
           Ptr<Packet> packet = entry.GetPacket ()->Copy ();
@@ -2014,7 +2014,7 @@
 
   Ptr<Packet> p = packet->Copy ();
   // Here the segments left value need to plus one to check the earlier hop maintain buffer entry
-  PassiveBuffEntry newEntry;
+  DsrPassiveBuffEntry newEntry;
   newEntry.SetPacket (p);
   newEntry.SetSource (source);
   newEntry.SetDestination (destination);
@@ -2031,7 +2031,7 @@
       // It only compares the source and destination address, ackId, and the segments left value
       NS_LOG_DEBUG ("We get the all equal for passive buffer here");
 
-      MaintainBuffEntry mbEntry;
+      DsrMaintainBuffEntry mbEntry;
       mbEntry.SetPacket (p);
       mbEntry.SetSrc (source);
       mbEntry.SetDst (destination);
@@ -2059,7 +2059,7 @@
 
   Ptr<Packet> p = packet->Copy ();
   // Here the segments left value need to plus one to check the earlier hop maintain buffer entry
-  MaintainBuffEntry newEntry;
+  DsrMaintainBuffEntry newEntry;
   newEntry.SetPacket (p);
   newEntry.SetSrc (source);
   newEntry.SetDst (destination);
@@ -2087,14 +2087,14 @@
    * 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,
+  DsrMaintainBuffEntry 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)
+DsrRouting::CancelPacketAllTimer (DsrMaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
   CancelLinkPacketTimer (mb);
@@ -2103,7 +2103,7 @@
 }
 
 void
-DsrRouting::CancelLinkPacketTimer (MaintainBuffEntry & mb)
+DsrRouting::CancelLinkPacketTimer (DsrMaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
   LinkKey linkKey;
@@ -2153,7 +2153,7 @@
 }
 
 void
-DsrRouting::CancelNetworkPacketTimer (MaintainBuffEntry & mb)
+DsrRouting::CancelNetworkPacketTimer (DsrMaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
   NetworkKey networkKey;
@@ -2203,7 +2203,7 @@
 }
 
 void
-DsrRouting::CancelPassivePacketTimer (MaintainBuffEntry & mb)
+DsrRouting::CancelPassivePacketTimer (DsrMaintainBuffEntry & mb)
 {
   NS_LOG_FUNCTION (this);
   PassiveKey passiveKey;
@@ -2243,7 +2243,7 @@
 {
   NS_LOG_FUNCTION (this << nextHop << (uint32_t)protocol);
 
-  MaintainBuffEntry entry;
+  DsrMaintainBuffEntry entry;
   std::vector<Ipv4Address> previousErrorDst;
   if (m_maintainBuffer.Dequeue (nextHop, entry))
     {
@@ -2339,7 +2339,7 @@
   /*
    * Look in the route cache for other routes for this destination
    */
-  RouteCacheEntry toDst;
+  DsrRouteCacheEntry toDst;
   bool findRoute = m_routeCache->LookupRoute (dst, toDst);
   if (findRoute && (salvage < m_maxSalvageCount))
     {
@@ -2411,7 +2411,7 @@
 }
 
 void
-DsrRouting::ScheduleLinkPacketRetry (MaintainBuffEntry & mb,
+DsrRouting::ScheduleLinkPacketRetry (DsrMaintainBuffEntry & mb,
                                      uint8_t protocol)
 {
   NS_LOG_FUNCTION (this << (uint32_t) protocol);
@@ -2441,7 +2441,7 @@
 }
 
 void
-DsrRouting::SchedulePassivePacketRetry (MaintainBuffEntry & mb,
+DsrRouting::SchedulePassivePacketRetry (DsrMaintainBuffEntry & mb,
                                         uint8_t protocol)
 {
   NS_LOG_FUNCTION (this << (uint32_t)protocol);
@@ -2472,7 +2472,7 @@
 }
 
 void
-DsrRouting::ScheduleNetworkPacketRetry (MaintainBuffEntry & mb,
+DsrRouting::ScheduleNetworkPacketRetry (DsrMaintainBuffEntry & mb,
                                         bool isFirst,
                                         uint8_t protocol)
 {
@@ -2495,7 +2495,7 @@
       SendPacket (p, source, nextHop, protocol);
 
       dsrP = p->Copy ();
-      MaintainBuffEntry newEntry = mb;
+      DsrMaintainBuffEntry newEntry = mb;
       // The function AllEqual will find the exact entry and delete it if found
       m_maintainBuffer.AllEqual (mb);
       newEntry.SetPacket (dsrP);
@@ -2580,7 +2580,7 @@
 }
 
 void
-DsrRouting::LinkScheduleTimerExpire  (MaintainBuffEntry & mb,
+DsrRouting::LinkScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                       uint8_t protocol)
 {
   NS_LOG_FUNCTION (this << (uint32_t)protocol);
@@ -2627,7 +2627,7 @@
 }
 
 void
-DsrRouting::PassiveScheduleTimerExpire  (MaintainBuffEntry & mb,
+DsrRouting::PassiveScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                          uint8_t protocol)
 {
   NS_LOG_FUNCTION (this << (uint32_t)protocol);
@@ -2676,7 +2676,7 @@
 }
 
 void
-DsrRouting::NetworkScheduleTimerExpire  (MaintainBuffEntry & mb,
+DsrRouting::NetworkScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                          uint8_t protocol)
 {
   Ptr<Packet> p = mb.GetPacket ()->Copy ();
@@ -2739,7 +2739,7 @@
 
   Ptr<const Packet> mtP = p->Copy ();
 
-  MaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
+  DsrMaintainBuffEntry newEntry (/*Packet=*/ mtP, /*ourAddress=*/ m_mainAddress, /*nextHop=*/ nextHop,
                               /*source=*/ source, /*destination=*/ targetAddress, /*ackId=*/ m_ackId,
                               /*SegsLeft=*/ sourceRoute.GetSegmentsLeft (), /*expire time=*/ m_maxMaintainTime);
   bool result = m_maintainBuffer.Enqueue (newEntry);
@@ -2848,7 +2848,7 @@
   NS_LOG_DEBUG ("our own address here " << m_mainAddress << " error source " << rerr.GetErrorSrc () << " error destination " << rerr.GetErrorDst ()
                                         << " error next hop " << rerr.GetUnreachNode () << " original dst " << rerr.GetOriginalDst ()
                 );
-  RouteCacheEntry toDst;
+  DsrRouteCacheEntry toDst;
   if (m_routeCache->LookupRoute (dst, toDst))
     {
       /*
@@ -3075,7 +3075,7 @@
 
   Ipv4Address source = address[0];
   Ipv4Address dst = address[1];
-  RouteCacheEntry toDst;
+  DsrRouteCacheEntry toDst;
   if (m_routeCache->LookupRoute (dst, toDst))
     {
       /*
diff -Naur ns-3.24.1/src/dsr/model/dsr-routing.h ns-3.25/src/dsr/model/dsr-routing.h
--- ns-3.24.1/src/dsr/model/dsr-routing.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-routing.h	2016-03-23 21:36:52.000000000 -0700
@@ -126,40 +126,40 @@
    * \brief Set the route cache.
    * \param r the route cache to set
    */
-  void SetRouteCache (Ptr<dsr::RouteCache> r);
+  void SetRouteCache (Ptr<dsr::DsrRouteCache> r);
   /**
    * \brief Get the route cache.
    * \return the route cache
    */
-  Ptr<dsr::RouteCache> GetRouteCache () const;
+  Ptr<dsr::DsrRouteCache> GetRouteCache () const;
   /**
    * \brief Set the node.
    * \param r the request table to set
    */
-  void SetRequestTable (Ptr<dsr::RreqTable> r);
+  void SetRequestTable (Ptr<dsr::DsrRreqTable> r);
   /**
     * \brief Get the request table.
     * \return the request table
     */
-  Ptr<dsr::RreqTable> GetRequestTable () const;
+  Ptr<dsr::DsrRreqTable> GetRequestTable () const;
   /**
    * \brief Set the node.
    * \param r the passive buffer to set
    */
-  void SetPassiveBuffer (Ptr<dsr::PassiveBuffer> r);
+  void SetPassiveBuffer (Ptr<dsr::DsrPassiveBuffer> r);
   /**
     * \brief Get the passive buffer
     * \return the passive buffer
     */
-  Ptr<dsr::PassiveBuffer> GetPassiveBuffer () const;
+  Ptr<dsr::DsrPassiveBuffer> GetPassiveBuffer () const;
 
   /// functions used to direct to route cache
   //\{
   bool IsLinkCache ();
-  void UseExtends (RouteCacheEntry::IP_VECTOR rt);
-  bool LookupRoute (Ipv4Address id, RouteCacheEntry & rt);
-  bool AddRoute_Link (RouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source);
-  bool AddRoute (RouteCacheEntry & rt);
+  void UseExtends (DsrRouteCacheEntry::IP_VECTOR rt);
+  bool LookupRoute (Ipv4Address id, DsrRouteCacheEntry & rt);
+  bool AddRoute_Link (DsrRouteCacheEntry::IP_VECTOR nodelist, Ipv4Address source);
+  bool AddRoute (DsrRouteCacheEntry & rt);
   void DeleteAllRoutesIncludeLink (Ipv4Address errorSrc, Ipv4Address unreachNode, Ipv4Address node);
   bool UpdateRouteEntry (Ipv4Address dst);
   bool FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id);
@@ -307,7 +307,7 @@
   /**
   * \brief Cancel all the packet timers
   */
-  void CancelPacketAllTimer (MaintainBuffEntry & mb);
+  void CancelPacketAllTimer (DsrMaintainBuffEntry & mb);
   /**
    * \brief Cancel the passive timer
    */
@@ -319,15 +319,15 @@
   /**
    * \brief Cancel the network packet retransmission timer for a specific maintenance entry
    */
-  void CancelNetworkPacketTimer (MaintainBuffEntry & mb);
+  void CancelNetworkPacketTimer (DsrMaintainBuffEntry & mb);
   /**
    * \brief Cancel the passive packet retransmission timer for a specific maintenance entry
    */
-  void CancelPassivePacketTimer (MaintainBuffEntry & mb);
+  void CancelPassivePacketTimer (DsrMaintainBuffEntry & mb);
   /**
    * \brief Cancel the link packet retransmission timer for a specific maintenance entry
    */
-  void CancelLinkPacketTimer (MaintainBuffEntry & mb);
+  void CancelLinkPacketTimer (DsrMaintainBuffEntry & mb);
   /**
    * \brief Cancel the packet retransmission timer for a all maintenance entries with nextHop address
    */
@@ -341,14 +341,14 @@
    * \param mb maintainenace buffer entry
    * \param protocol the protocol number
    */
-  void ScheduleLinkPacketRetry   (MaintainBuffEntry & mb,
+  void ScheduleLinkPacketRetry   (DsrMaintainBuffEntry & mb,
                                   uint8_t protocol);
   /**
    * \brief Schedule the packet retransmission based on passive acknowledgment
    * \param mb maintainenace buffer entry
    * \param protocol the protocol number
    */
-  void SchedulePassivePacketRetry   (MaintainBuffEntry & mb,
+  void SchedulePassivePacketRetry   (DsrMaintainBuffEntry & mb,
                                      uint8_t protocol);
   /**
    * \brief Schedule the packet retransmission based on network layer acknowledgment
@@ -356,23 +356,23 @@
    * \param isFirst see if this is the first packet retry or not
    * \param protocol the protocol number
    */
-  void ScheduleNetworkPacketRetry   (MaintainBuffEntry & mb,
+  void ScheduleNetworkPacketRetry   (DsrMaintainBuffEntry & mb,
                                      bool isFirst,
                                      uint8_t protocol);
   /**
    * \brief This function deals with packet retransmission timer expire using link acknowledgment
    */
-  void LinkScheduleTimerExpire  (MaintainBuffEntry & mb,
+  void LinkScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                  uint8_t protocol);
   /**
    * \brief This function deals with packet retransmission timer expire using network acknowledgment
    */
-  void NetworkScheduleTimerExpire  (MaintainBuffEntry & mb,
+  void NetworkScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                     uint8_t protocol);
   /**
    * \brief This function deals with packet retransmission timer expire using passive acknowledgment
    */
-  void PassiveScheduleTimerExpire  (MaintainBuffEntry & mb,
+  void PassiveScheduleTimerExpire  (DsrMaintainBuffEntry & mb,
                                     uint8_t protocol);
   /**
    * \brief Forward the packet using the route saved in the source route option header
@@ -654,9 +654,9 @@
 
   Time  m_sendBufferTimeout;                            ///< The maximum period of time that a routing protocol is allowed to buffer a packet for.
 
-  SendBuffer m_sendBuffer;                              ///< The send buffer
+  DsrSendBuffer m_sendBuffer;                           ///< The send buffer
 
-  ErrorBuffer m_errorBuffer;                            ///< The error buffer to save the error messages
+  DsrErrorBuffer m_errorBuffer;                         ///< The error buffer to save the error messages
 
   uint32_t  m_maxMaintainLen;                           ///< Max # of entries for maintainance buffer
 
@@ -670,7 +670,7 @@
 
   uint32_t  m_maxEntriesEachDst;                        ///< Max number of route entries to save for each destination
 
-  MaintainBuffer m_maintainBuffer;                      ///< The declaration of maintain buffer
+  DsrMaintainBuffer m_maintainBuffer;                   ///< The declaration of maintain buffer
 
   uint32_t m_requestId;                                 ///< The id assigned to each route request
 
@@ -742,11 +742,11 @@
 
   std::map<LinkKey, Timer> m_linkAckTimer;              ///< The timer for link acknowledgment
 
-  Ptr<dsr::RouteCache> m_routeCache;                    ///< A "drop-front" queue used by the routing layer to cache routes found.
+  Ptr<dsr::DsrRouteCache> m_routeCache;                 ///< A "drop-front" queue used by the routing layer to cache routes found.
 
-  Ptr<dsr::RreqTable> m_rreqTable;                      ///< A "drop-front" queue used by the routing layer to cache route request sent.
+  Ptr<dsr::DsrRreqTable> m_rreqTable;                   ///< A "drop-front" queue used by the routing layer to cache route request sent.
 
-  Ptr<dsr::PassiveBuffer> m_passiveBuffer;              ///< A "drop-front" queue used by the routing layer to cache route request sent.
+  Ptr<dsr::DsrPassiveBuffer> m_passiveBuffer;           ///< A "drop-front" queue used by the routing layer to cache route request sent.
 
   uint32_t m_numPriorityQueues;                         ///< The number of priority queues used
 
@@ -754,7 +754,7 @@
 
   std::map<uint32_t, Ptr<dsr::DsrNetworkQueue> > m_priorityQueue;   ///< priority queues
 
-  GraReply m_graReply;                                  ///< The gratuitous route reply.
+  DsrGraReply m_graReply;                               ///< The gratuitous route reply.
 
   DsrNetworkQueue m_networkQueue;                       ///< The network queue.
 
diff -Naur ns-3.24.1/src/dsr/model/dsr-rreq-table.cc ns-3.25/src/dsr/model/dsr-rreq-table.cc
--- ns-3.24.1/src/dsr/model/dsr-rreq-table.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rreq-table.cc	2016-03-23 21:36:52.000000000 -0700
@@ -36,34 +36,34 @@
 
 namespace ns3 {
 
-NS_LOG_COMPONENT_DEFINE ("RreqTable");
+NS_LOG_COMPONENT_DEFINE ("DsrRreqTable");
   
 namespace dsr {
 
-NS_OBJECT_ENSURE_REGISTERED (RreqTable);
+NS_OBJECT_ENSURE_REGISTERED (DsrRreqTable);
 
-TypeId RreqTable::GetTypeId ()
+TypeId DsrRreqTable::GetTypeId ()
 {
-  static TypeId tid = TypeId ("ns3::dsr::RreqTable")
+  static TypeId tid = TypeId ("ns3::dsr::DsrRreqTable")
     .SetParent<Object> ()
     .SetGroupName ("Dsr")
-    .AddConstructor<RreqTable> ()
+    .AddConstructor<DsrRreqTable> ()
   ;
   return tid;
 }
 
-RreqTable::RreqTable ()
+DsrRreqTable::DsrRreqTable ()
   : m_linkStates (PROBABLE)
 {
 }
 
-RreqTable::~RreqTable ()
+DsrRreqTable::~DsrRreqTable ()
 {
   NS_LOG_FUNCTION_NOARGS ();
 }
 
 void
-RreqTable::RemoveLeastExpire (std::map<Ipv4Address, RreqTableEntry > & rreqDstMap)
+DsrRreqTable::RemoveLeastExpire (std::map<Ipv4Address, RreqTableEntry > & rreqDstMap)
 {
   NS_LOG_FUNCTION (this);
   Ipv4Address firstExpire;
@@ -83,7 +83,7 @@
 }
 
 void
-RreqTable::FindAndUpdate (Ipv4Address dst)
+DsrRreqTable::FindAndUpdate (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
   std::map<Ipv4Address, RreqTableEntry >::const_iterator i =
@@ -116,7 +116,7 @@
 }
 
 void
-RreqTable::RemoveRreqEntry (Ipv4Address dst)
+DsrRreqTable::RemoveRreqEntry (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
   std::map<Ipv4Address, RreqTableEntry >::const_iterator i =
@@ -133,7 +133,7 @@
 }
 
 uint32_t
-RreqTable::GetRreqCnt (Ipv4Address dst)
+DsrRreqTable::GetRreqCnt (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
   std::map<Ipv4Address, RreqTableEntry >::const_iterator i =
@@ -156,7 +156,7 @@
  * Essentially a counter
  */
 uint32_t
-RreqTable::CheckUniqueRreqId (Ipv4Address dst)
+DsrRreqTable::CheckUniqueRreqId (Ipv4Address dst)
 {
   NS_LOG_LOGIC ("The size of id cache " << m_rreqIdCache.size ());
   std::map<Ipv4Address, uint32_t>::const_iterator i =
@@ -188,7 +188,7 @@
 }
 
 uint32_t
-RreqTable::GetRreqSize ()
+DsrRreqTable::GetRreqSize ()
 {
   return m_rreqIdCache.size ();
 }
@@ -199,7 +199,7 @@
  */
 
 void
-RreqTable::Invalidate ()
+DsrRreqTable::Invalidate ()
 {
   if (m_linkStates == QUESTIONABLE)
     {
@@ -209,7 +209,7 @@
 }
 
 BlackList*
-RreqTable::FindUnidirectional (Ipv4Address neighbor)
+DsrRreqTable::FindUnidirectional (Ipv4Address neighbor)
 {
   PurgeNeighbor ();  // purge the neighbor cache
   for (std::vector<BlackList>::iterator i = m_blackList.begin ();
@@ -224,7 +224,7 @@
 }
 
 bool
-RreqTable::MarkLinkAsUnidirectional (Ipv4Address neighbor, Time blacklistTimeout)
+DsrRreqTable::MarkLinkAsUnidirectional (Ipv4Address neighbor, Time blacklistTimeout)
 {
   NS_LOG_LOGIC ("Add neighbor address in blacklist " << m_blackList.size ());
   for (std::vector<BlackList>::iterator i = m_blackList.begin (); i != m_blackList.end (); i++)
@@ -243,7 +243,7 @@
 }
 
 void
-RreqTable::PurgeNeighbor ()
+DsrRreqTable::PurgeNeighbor ()
 {
   /*
    * Purge the expired blacklist entries
@@ -253,17 +253,17 @@
 }
 
 bool
-RreqTable::FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id)
+DsrRreqTable::FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id)
 {
   NS_LOG_FUNCTION (this << src << dst << id);
-  ReceivedRreqEntry rreqEntry;
+  DsrReceivedRreqEntry rreqEntry;
   rreqEntry.SetDestination (dst);
   rreqEntry.SetIdentification (id);
-  std::list<ReceivedRreqEntry> receivedRreqEntryList;
+  std::list<DsrReceivedRreqEntry> receivedRreqEntryList;
   /*
    * this function will return false if the entry is not found, true if duplicate entry find
    */
-  std::map<Ipv4Address, std::list<ReceivedRreqEntry> >::const_iterator i = m_sourceRreqMap.find (src);
+  std::map<Ipv4Address, std::list<DsrReceivedRreqEntry> >::const_iterator i = m_sourceRreqMap.find (src);
   if (i == m_sourceRreqMap.end ())
     {
       NS_LOG_LOGIC ("The source request table entry for " << src << " not found");
@@ -287,7 +287,7 @@
         }
       Ipv4Address src = i->first;
       // We loop the receive rreq entry to find duplicate
-      for (std::list<ReceivedRreqEntry>::const_iterator j = receivedRreqEntryList.begin (); j != receivedRreqEntryList.end (); ++j)
+      for (std::list<DsrReceivedRreqEntry>::const_iterator j = receivedRreqEntryList.begin (); j != receivedRreqEntryList.end (); ++j)
         {
           if (*j == rreqEntry)          /// Check if we have found one duplication entry or not
             {
diff -Naur ns-3.24.1/src/dsr/model/dsr-rreq-table.h ns-3.25/src/dsr/model/dsr-rreq-table.h
--- ns-3.24.1/src/dsr/model/dsr-rreq-table.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rreq-table.h	2016-03-23 21:36:52.000000000 -0700
@@ -83,26 +83,26 @@
  * The request entry for intermediate nodes to check if they have received this request or not
  * This is used to control the duplication request from being processed
  */
-class ReceivedRreqEntry
+class DsrReceivedRreqEntry
 {
 public:
   /**
-   * Construct a ReceivedRreqEntry with the given parameters
+   * Construct a DsrReceivedRreqEntry with the given parameters
    *
    * \param d IPv4 address of the destination
    * \param i identification
    */
-  ReceivedRreqEntry (Ipv4Address d = Ipv4Address (), uint16_t i = 0)
+  DsrReceivedRreqEntry (Ipv4Address d = Ipv4Address (), uint16_t i = 0)
     : m_destination (d),
       m_identification (i)
   {
   }
   /**
    * \brief Compare send buffer entries (destination address and identification)
-   * \param o another ReceivedRreqEntry
+   * \param o another DsrReceivedRreqEntry
    * \return true if equal
    */
-  bool operator== (ReceivedRreqEntry const & o) const
+  bool operator== (DsrReceivedRreqEntry const & o) const
   {
     return ((m_destination == o.m_destination) && (m_identification == o.m_identification)
            );
@@ -194,16 +194,16 @@
 
 /**
  * \ingroup dsr
- * \brief maintain list of RreqTable entry
+ * \brief maintain list of DsrRreqTable entry
  */
-class RreqTable  : public Object
+class DsrRreqTable  : public Object
 {
 public:
 
   static TypeId GetTypeId ();
 
-  RreqTable ();
-  virtual ~RreqTable ();
+  DsrRreqTable ();
+  virtual ~DsrRreqTable ();
 
   /**
    * Set the initial discovert hop limit
@@ -359,13 +359,13 @@
   /// The state of the unidirectional link
   LinkStates m_linkStates;
   /// Map of entries
-  std::list<ReceivedRreqEntry> m_sourceRequests;
+  std::list<DsrReceivedRreqEntry> m_sourceRequests;
   /// The id cache to ensure all the ids are unique, it is used when sending out route request
   std::map<Ipv4Address, uint32_t> m_rreqIdCache;
   /// The cache to save route request table entries indexed with destination address
   std::map<Ipv4Address, RreqTableEntry > m_rreqDstMap;
   /// The cache to ensure all the route request from unique source
-  std::map<Ipv4Address, std::list<ReceivedRreqEntry> > m_sourceRreqMap;
+  std::map<Ipv4Address, std::list<DsrReceivedRreqEntry> > m_sourceRreqMap;
 
   /// The Black list
   std::vector<BlackList> m_blackList;
diff -Naur ns-3.24.1/src/dsr/model/dsr-rsendbuff.cc ns-3.25/src/dsr/model/dsr-rsendbuff.cc
--- ns-3.24.1/src/dsr/model/dsr-rsendbuff.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rsendbuff.cc	2016-03-23 21:36:52.000000000 -0700
@@ -43,17 +43,17 @@
 namespace dsr {
 
 uint32_t
-SendBuffer::GetSize ()
+DsrSendBuffer::GetSize ()
 {
   Purge ();
   return m_sendBuffer.size ();
 }
 
 bool
-SendBuffer::Enqueue (SendBuffEntry & entry)
+DsrSendBuffer::Enqueue (DsrSendBuffEntry & entry)
 {
   Purge ();
-  for (std::vector<SendBuffEntry>::const_iterator i = m_sendBuffer.begin (); i
+  for (std::vector<DsrSendBuffEntry>::const_iterator i = m_sendBuffer.begin (); i
        != m_sendBuffer.end (); ++i)
     {
 //      NS_LOG_DEBUG ("packet id " << i->GetPacket ()->GetUid () << " " << entry.GetPacket ()->GetUid ()
@@ -81,14 +81,14 @@
 }
 
 void
-SendBuffer::DropPacketWithDst (Ipv4Address dst)
+DsrSendBuffer::DropPacketWithDst (Ipv4Address dst)
 {
   NS_LOG_FUNCTION (this << dst);
   Purge ();
   /*
    * Drop the packet with destination address dst
    */
-  for (std::vector<SendBuffEntry>::iterator i = m_sendBuffer.begin (); i
+  for (std::vector<DsrSendBuffEntry>::iterator i = m_sendBuffer.begin (); i
        != m_sendBuffer.end (); ++i)
     {
       if (IsEqual (*i, dst))
@@ -97,17 +97,17 @@
         }
     }
   m_sendBuffer.erase (std::remove_if (m_sendBuffer.begin (), m_sendBuffer.end (),
-                                      std::bind2nd (std::ptr_fun (SendBuffer::IsEqual), dst)), m_sendBuffer.end ());
+                                      std::bind2nd (std::ptr_fun (DsrSendBuffer::IsEqual), dst)), m_sendBuffer.end ());
 }
 
 bool
-SendBuffer::Dequeue (Ipv4Address dst, SendBuffEntry & entry)
+DsrSendBuffer::Dequeue (Ipv4Address dst, DsrSendBuffEntry & entry)
 {
   Purge ();
   /*
    * Dequeue the entry with destination address dst
    */
-  for (std::vector<SendBuffEntry>::iterator i = m_sendBuffer.begin (); i != m_sendBuffer.end (); ++i)
+  for (std::vector<DsrSendBuffEntry>::iterator i = m_sendBuffer.begin (); i != m_sendBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
         {
@@ -121,12 +121,12 @@
 }
 
 bool
-SendBuffer::Find (Ipv4Address dst)
+DsrSendBuffer::Find (Ipv4Address dst)
 {
   /*
    * Make sure if the send buffer contains entry with certain dst
    */
-  for (std::vector<SendBuffEntry>::const_iterator i = m_sendBuffer.begin (); i
+  for (std::vector<DsrSendBuffEntry>::const_iterator i = m_sendBuffer.begin (); i
        != m_sendBuffer.end (); ++i)
     {
       if (i->GetDestination () == dst)
@@ -141,7 +141,7 @@
 struct IsExpired
 {
   bool
-  operator() (SendBuffEntry const & e) const
+  operator() (DsrSendBuffEntry const & e) const
   {
     // NS_LOG_DEBUG("Expire time for packet in req queue: "<<e.GetExpireTime ());
     return (e.GetExpireTime () < Seconds (0));
@@ -149,14 +149,14 @@
 };
 
 void
-SendBuffer::Purge ()
+DsrSendBuffer::Purge ()
 {
   /*
    * Purge the buffer to eliminate expired entries
    */
   NS_LOG_INFO ("The send buffer size " << m_sendBuffer.size ());
   IsExpired pred;
-  for (std::vector<SendBuffEntry>::iterator i = m_sendBuffer.begin (); i
+  for (std::vector<DsrSendBuffEntry>::iterator i = m_sendBuffer.begin (); i
        != m_sendBuffer.end (); ++i)
     {
       if (pred (*i))
@@ -170,7 +170,7 @@
 }
 
 void
-SendBuffer::Drop (SendBuffEntry en, std::string reason)
+DsrSendBuffer::Drop (DsrSendBuffEntry en, std::string reason)
 {
   NS_LOG_LOGIC (reason << en.GetPacket ()->GetUid () << " " << en.GetDestination ());
 //  en.GetErrorCallback () (en.GetPacket (), en.GetDestination (),
diff -Naur ns-3.24.1/src/dsr/model/dsr-rsendbuff.h ns-3.25/src/dsr/model/dsr-rsendbuff.h
--- ns-3.24.1/src/dsr/model/dsr-rsendbuff.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/model/dsr-rsendbuff.h	2016-03-23 21:36:52.000000000 -0700
@@ -42,18 +42,18 @@
  * \ingroup dsr
  * \brief DSR Send Buffer Entry
  */
-class SendBuffEntry
+class DsrSendBuffEntry
 {
 public:
   /**
-   * Construct SendBuffEntry with the given parameters.
+   * Construct DsrSendBuffEntry with the given parameters.
    *
    * \param pa packet
    * \param d destination address
    * \param exp expiration time
    * \param p protocol number
    */
-  SendBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (),
+  DsrSendBuffEntry (Ptr<const Packet> pa = 0, Ipv4Address d = Ipv4Address (),
                  Time exp = Simulator::Now (), uint8_t p = 0)
     : m_packet (pa),
       m_dst (d),
@@ -63,10 +63,10 @@
   }
   /**
    * Compare send buffer entries
-   * \param o another SendBuffEntry
+   * \param o another DsrSendBuffEntry
    * \return true if equal
    */
-  bool operator== (SendBuffEntry const & o) const
+  bool operator== (DsrSendBuffEntry const & o) const
   {
     return ((m_packet == o.m_packet) && (m_dst == o.m_dst) && (m_expire == o.m_expire));
   }
@@ -121,24 +121,24 @@
  * \brief DSR send buffer
  */
 /************************************************************************************************************************/
-class SendBuffer
+class DsrSendBuffer
 {
 public:
   /**
    * Default constructor
    */
-  SendBuffer ()
+  DsrSendBuffer ()
   {
   }
   /**
    * Push entry in queue, if there is no entry with
    * the same packet and destination address in queue.
    *
-   * \param entry SendBuffEntry to put in the queue
+   * \param entry DsrSendBuffEntry to put in the queue
    * \return true if successfully enqueued,
    *         false otherwise
    */
-  bool Enqueue (SendBuffEntry & entry);
+  bool Enqueue (DsrSendBuffEntry & entry);
   /**
    * Return first found (the earliest) entry for
    * the given destination.
@@ -148,7 +148,7 @@
    * \return true if successfully dequeued,
    *         false otherwise
    */
-  bool Dequeue (Ipv4Address dst, SendBuffEntry & entry);
+  bool Dequeue (Ipv4Address dst, DsrSendBuffEntry & entry);
   /**
    * Remove all packets with destination IP address dst
    *
@@ -211,16 +211,16 @@
    *
    * \return a pointer to the internal queue
    */
-  std::vector<SendBuffEntry> & GetBuffer ()
+  std::vector<DsrSendBuffEntry> & GetBuffer ()
   {
     return m_sendBuffer;
   }
 
 private:
 
-  std::vector<SendBuffEntry> m_sendBuffer;                      ///< The send buffer to cache unsent packet
+  std::vector<DsrSendBuffEntry> m_sendBuffer;                   ///< The send buffer to cache unsent packet
   void Purge ();                                                ///< Remove all expired entries
-  void Drop (SendBuffEntry en, std::string reason);             ///< Notify that packet is dropped from queue by timeout
+  void Drop (DsrSendBuffEntry en, std::string reason);          ///< Notify that packet is dropped from queue by timeout
   uint32_t m_maxLen;                                            ///< The maximum number of packets that we allow a routing protocol to buffer.
   Time m_sendBufferTimeout;                                     ///< The maximum period of time that a routing protocol is allowed to buffer a packet for, seconds.
   /**
@@ -231,7 +231,7 @@
    * \return true if the SendBufferEntry destination is the same,
    *         false otherwise
    */
-  static bool IsEqual (SendBuffEntry en, const Ipv4Address dst)
+  static bool IsEqual (DsrSendBuffEntry en, const Ipv4Address dst)
   {
     return (en.GetDestination () == dst);
   }
diff -Naur ns-3.24.1/src/dsr/test/dsr-test-suite.cc ns-3.25/src/dsr/test/dsr-test-suite.cc
--- ns-3.24.1/src/dsr/test/dsr-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/dsr/test/dsr-test-suite.cc	2016-03-23 21:36:52.000000000 -0700
@@ -350,12 +350,12 @@
 void
 DsrCacheEntryTest::DoRun ()
 {
-  Ptr<dsr::RouteCache> rcache = CreateObject<dsr::RouteCache> ();
+  Ptr<dsr::DsrRouteCache> rcache = CreateObject<dsr::DsrRouteCache> ();
   std::vector<Ipv4Address> ip;
   ip.push_back (Ipv4Address ("0.0.0.0"));
   ip.push_back (Ipv4Address ("0.0.0.1"));
   Ipv4Address dst = Ipv4Address ("0.0.0.1");
-  dsr::RouteCacheEntry entry (ip, dst, Seconds (1));
+  dsr::DsrRouteCacheEntry entry (ip, dst, Seconds (1));
   NS_TEST_EXPECT_MSG_EQ (entry.GetVector ().size (), 2, "trivial");
   NS_TEST_EXPECT_MSG_EQ (entry.GetDestination (), Ipv4Address ("0.0.0.1"), "trivial");
   NS_TEST_EXPECT_MSG_EQ (entry.GetExpireTime (), Seconds (1), "trivial");
@@ -374,8 +374,8 @@
   ip2.push_back (Ipv4Address ("1.1.1.0"));
   ip2.push_back (Ipv4Address ("1.1.1.1"));
   Ipv4Address dst2 = Ipv4Address ("1.1.1.1");
-  dsr::RouteCacheEntry entry2 (ip2, dst2, Seconds (2));
-  dsr::RouteCacheEntry newEntry;
+  dsr::DsrRouteCacheEntry entry2 (ip2, dst2, Seconds (2));
+  dsr::DsrRouteCacheEntry newEntry;
   NS_TEST_EXPECT_MSG_EQ (rcache->AddRoute (entry2), true, "trivial");
   NS_TEST_EXPECT_MSG_EQ (rcache->LookupRoute (dst2, newEntry), true, "trivial");
   NS_TEST_EXPECT_MSG_EQ (rcache->DeleteRoute (Ipv4Address ("2.2.2.2")), false, "trivial");
@@ -395,7 +395,7 @@
   void CheckSizeLimit ();
   void CheckTimeout ();
 
-  dsr::SendBuffer q;
+  dsr::DsrSendBuffer q;
 };
 DsrSendBuffTest::DsrSendBuffTest ()
   : TestCase ("DSR SendBuff"),
@@ -415,7 +415,7 @@
 
   Ptr<const Packet> packet = Create<Packet> ();
   Ipv4Address dst1 = Ipv4Address ("0.0.0.1");
-  dsr::SendBuffEntry e1 (packet, dst1, Seconds (1));
+  dsr::DsrSendBuffEntry e1 (packet, dst1, Seconds (1));
   q.Enqueue (e1);
   q.Enqueue (e1);
   q.Enqueue (e1);
@@ -427,11 +427,11 @@
   NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 0, "trivial");
 
   Ipv4Address dst2 = Ipv4Address ("0.0.0.2");
-  dsr::SendBuffEntry e2 (packet, dst2, Seconds (1));
+  dsr::DsrSendBuffEntry e2 (packet, dst2, Seconds (1));
   q.Enqueue (e1);
   q.Enqueue (e2);
   Ptr<Packet> packet2 = Create<Packet> ();
-  dsr::SendBuffEntry e3 (packet2, dst2, Seconds (1));
+  dsr::DsrSendBuffEntry e3 (packet2, dst2, Seconds (1));
   NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address ("0.0.0.3"), e3), false, "trivial");
   NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address ("0.0.0.2"), e3), true, "trivial");
   NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("0.0.0.2")), false, "trivial");
@@ -440,7 +440,7 @@
   NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial");
   Ptr<Packet> packet4 = Create<Packet> ();
   Ipv4Address dst4 = Ipv4Address ("0.0.0.4");
-  dsr::SendBuffEntry e4 (packet4, dst4, Seconds (20));
+  dsr::DsrSendBuffEntry e4 (packet4, dst4, Seconds (20));
   q.Enqueue (e4);
   NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 3, "trivial");
   q.DropPacketWithDst (Ipv4Address ("0.0.0.4"));
@@ -458,7 +458,7 @@
 {
   Ptr<Packet> packet = Create<Packet> ();
   Ipv4Address dst;
-  dsr::SendBuffEntry e1 (packet, dst, Seconds (1));
+  dsr::DsrSendBuffEntry e1 (packet, dst, Seconds (1));
 
   for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i)
     {
diff -Naur ns-3.24.1/src/energy/bindings/callbacks_list.py ns-3.25/src/energy/bindings/callbacks_list.py
--- ns-3.24.1/src/energy/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/bindings/callbacks_list.py	2016-03-23 21:36:52.000000000 -0700
@@ -1,3 +1,5 @@
 callback_classes = [
     ['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'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/energy/bindings/modulegen__gcc_ILP32.py ns-3.25/src/energy/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/energy/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:52.000000000 -0700
@@ -54,6 +54,8 @@
     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')
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper [class]
+    module.add_class('LiIonEnergySourceHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## 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]
@@ -112,6 +114,10 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -210,6 +216,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -220,6 +230,8 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel [class]
     module.add_class('RvBatteryModel', parent=root_module['ns3::EnergySource'])
     ## simple-device-energy-model.h (module 'energy'): ns3::SimpleDeviceEnergyModel [class]
@@ -349,6 +361,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3LiIonEnergySourceHelper_methods(root_module, root_module['ns3::LiIonEnergySourceHelper'])
     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'])
@@ -376,6 +389,8 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -421,11 +436,14 @@
     register_Ns3LiIonEnergySource_methods(root_module, root_module['ns3::LiIonEnergySource'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
@@ -844,6 +862,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -859,6 +882,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1035,7 +1063,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1214,6 +1242,23 @@
                    is_const=True)
     return
 
+def register_Ns3LiIonEnergySourceHelper_methods(root_module, cls):
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper::LiIonEnergySourceHelper(ns3::LiIonEnergySourceHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LiIonEnergySourceHelper const &', 'arg0')])
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper::LiIonEnergySourceHelper() [constructor]
+    cls.add_constructor([])
+    ## li-ion-energy-source-helper.h (module 'energy'): void ns3::LiIonEnergySourceHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')], 
+                   is_virtual=True)
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::Ptr<ns3::EnergySource> ns3::LiIonEnergySourceHelper::DoInstall(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('DoInstall', 
+                   'ns3::Ptr< ns3::EnergySource >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2100,6 +2145,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3738,7 +3807,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -3865,6 +3934,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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')])
@@ -3900,6 +4055,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4076,6 +4236,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RvBatteryModel_methods(root_module, cls):
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel::RvBatteryModel(ns3::RvBatteryModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RvBatteryModel const &', 'arg0')])
diff -Naur ns-3.24.1/src/energy/bindings/modulegen__gcc_LP64.py ns-3.25/src/energy/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/energy/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:52.000000000 -0700
@@ -54,6 +54,8 @@
     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')
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper [class]
+    module.add_class('LiIonEnergySourceHelper', parent=root_module['ns3::EnergySourceHelper'])
     ## 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]
@@ -112,6 +114,10 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## nstime.h (module 'core'): ns3::Time [class]
@@ -210,6 +216,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -220,6 +230,8 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel [class]
     module.add_class('RvBatteryModel', parent=root_module['ns3::EnergySource'])
     ## simple-device-energy-model.h (module 'energy'): ns3::SimpleDeviceEnergyModel [class]
@@ -349,6 +361,7 @@
     register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
     register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
     register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3LiIonEnergySourceHelper_methods(root_module, root_module['ns3::LiIonEnergySourceHelper'])
     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'])
@@ -376,6 +389,8 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
@@ -421,11 +436,14 @@
     register_Ns3LiIonEnergySource_methods(root_module, root_module['ns3::LiIonEnergySource'])
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RvBatteryModel_methods(root_module, root_module['ns3::RvBatteryModel'])
     register_Ns3SimpleDeviceEnergyModel_methods(root_module, root_module['ns3::SimpleDeviceEnergyModel'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
@@ -844,6 +862,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -859,6 +882,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1035,7 +1063,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -1214,6 +1242,23 @@
                    is_const=True)
     return
 
+def register_Ns3LiIonEnergySourceHelper_methods(root_module, cls):
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper::LiIonEnergySourceHelper(ns3::LiIonEnergySourceHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::LiIonEnergySourceHelper const &', 'arg0')])
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::LiIonEnergySourceHelper::LiIonEnergySourceHelper() [constructor]
+    cls.add_constructor([])
+    ## li-ion-energy-source-helper.h (module 'energy'): void ns3::LiIonEnergySourceHelper::Set(std::string name, ns3::AttributeValue const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'v')], 
+                   is_virtual=True)
+    ## li-ion-energy-source-helper.h (module 'energy'): ns3::Ptr<ns3::EnergySource> ns3::LiIonEnergySourceHelper::DoInstall(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('DoInstall', 
+                   'ns3::Ptr< ns3::EnergySource >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -2100,6 +2145,30 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3738,7 +3807,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -3865,6 +3934,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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')])
@@ -3900,6 +4055,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4076,6 +4236,27 @@
                    is_virtual=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RvBatteryModel_methods(root_module, cls):
     ## rv-battery-model.h (module 'energy'): ns3::RvBatteryModel::RvBatteryModel(ns3::RvBatteryModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RvBatteryModel const &', 'arg0')])
diff -Naur ns-3.24.1/src/energy/examples/basic-energy-model-test.cc ns-3.25/src/energy/examples/basic-energy-model-test.cc
--- ns-3.24.1/src/energy/examples/basic-energy-model-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/examples/basic-energy-model-test.cc	2016-03-23 21:36:52.000000000 -0700
@@ -31,7 +31,6 @@
 #include "ns3/config.h"
 #include "ns3/string.h"
 #include "ns3/yans-wifi-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include <cmath>
 
 using namespace ns3;
@@ -376,8 +375,8 @@
   wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a MAC and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue (phyMode),
                                 "ControlMode", StringValue (phyMode));
diff -Naur ns-3.24.1/src/energy/examples/rv-battery-model-test.cc ns-3.25/src/energy/examples/rv-battery-model-test.cc
--- ns-3.24.1/src/energy/examples/rv-battery-model-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/examples/rv-battery-model-test.cc	2016-03-23 21:36:52.000000000 -0700
@@ -31,7 +31,6 @@
 #include "ns3/config.h"
 #include "ns3/string.h"
 #include "ns3/yans-wifi-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include <cmath>
 
 using namespace ns3;
@@ -744,8 +743,8 @@
   wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a MAC and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue (phyMode),
                                 "ControlMode", StringValue (phyMode));
@@ -831,8 +830,8 @@
   wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  // Add a non-QoS upper MAC, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add a MAC and disable rate control
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue (phyMode),
                                 "ControlMode", StringValue (phyMode));
diff -Naur ns-3.24.1/src/energy/model/basic-energy-source.cc ns-3.25/src/energy/model/basic-energy-source.cc
--- ns-3.24.1/src/energy/model/basic-energy-source.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/model/basic-energy-source.cc	2016-03-23 21:36:52.000000000 -0700
@@ -207,10 +207,6 @@
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("BasicEnergySource:Energy depleted!");
   NotifyEnergyDrained (); // notify DeviceEnergyModel objects
-  if (m_remainingEnergyJ <= 0)
-    {
-      m_remainingEnergyJ = 0; // energy never goes below 0
-    }
 }
 
 void
@@ -230,7 +226,16 @@
   NS_ASSERT (duration.GetSeconds () >= 0);
   // energy = current * voltage * time
   double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds ();
-  m_remainingEnergyJ -= energyToDecreaseJ;
+
+  if (m_remainingEnergyJ < energyToDecreaseJ) 
+    {
+      m_remainingEnergyJ = 0; // energy never goes below 0
+    } 
+  else 
+    {
+      m_remainingEnergyJ -= energyToDecreaseJ;
+    }  
+
   NS_LOG_DEBUG ("BasicEnergySource:Remaining energy = " << m_remainingEnergyJ);
 }
 
diff -Naur ns-3.24.1/src/energy/model/li-ion-energy-source.cc ns-3.25/src/energy/model/li-ion-energy-source.cc
--- ns-3.24.1/src/energy/model/li-ion-energy-source.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/model/li-ion-energy-source.cc	2016-03-23 21:36:52.000000000 -0700
@@ -253,8 +253,6 @@
 LiIonEnergySource::DoDispose (void)
 {
   NS_LOG_FUNCTION (this);
-  // calculate remaining energy at the end of simulation
-  CalculateRemainingEnergy ();
   BreakDeviceEnergyModelRefCycle ();  // break reference cycle
 }
 
@@ -266,10 +264,6 @@
   NS_LOG_DEBUG ("LiIonEnergySource:Energy depleted at node #" <<
                 GetNode ()->GetId ());
   NotifyEnergyDrained (); // notify DeviceEnergyModel objects
-  if (m_remainingEnergyJ <= 0)
-    {
-      m_remainingEnergyJ = 0; // energy never goes below 0
-    }
 }
 
 
@@ -282,7 +276,16 @@
   NS_ASSERT (duration.GetSeconds () >= 0);
   // energy = current * voltage * time
   double energyToDecreaseJ = totalCurrentA * m_supplyVoltageV * duration.GetSeconds ();
-  m_remainingEnergyJ -= energyToDecreaseJ;
+
+  if (m_remainingEnergyJ < energyToDecreaseJ) 
+    {
+      m_remainingEnergyJ = 0; // energy never goes below 0
+    } 
+  else 
+    {
+      m_remainingEnergyJ -= energyToDecreaseJ;
+    }  
+
   m_drainedCapacity += (totalCurrentA * duration.GetSeconds () / 3600);
   // update the supply voltage
   m_supplyVoltageV = GetVoltage (totalCurrentA);
diff -Naur ns-3.24.1/src/energy/wscript ns-3.25/src/energy/wscript
--- ns-3.24.1/src/energy/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/energy/wscript	2016-03-23 21:36:52.000000000 -0700
@@ -15,6 +15,7 @@
         'helper/energy-source-container.cc',
         'helper/energy-model-helper.cc',
         'helper/basic-energy-source-helper.cc',
+        'helper/li-ion-energy-source-helper.cc',
         'helper/rv-battery-model-helper.cc',
         'helper/energy-harvester-container.cc',
         'helper/energy-harvester-helper.cc',
@@ -42,6 +43,7 @@
         'helper/energy-source-container.h',
         'helper/energy-model-helper.h',
         'helper/basic-energy-source-helper.h',
+        'helper/li-ion-energy-source-helper.h',
         'helper/rv-battery-model-helper.h',
         'helper/energy-harvester-container.h',
         'helper/energy-harvester-helper.h',
diff -Naur ns-3.24.1/src/fd-net-device/bindings/callbacks_list.py ns-3.25/src/fd-net-device/bindings/callbacks_list.py
--- ns-3.24.1/src/fd-net-device/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/bindings/callbacks_list.py	2016-03-23 21:36:52.000000000 -0700
@@ -4,4 +4,5 @@
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'unsigned char*', 'long', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/fd-net-device/bindings/modulegen__gcc_ILP32.py ns-3.25/src/fd-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:52.000000000 -0700
@@ -105,7 +105,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -162,12 +162,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SystemThread', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SystemThread>'], 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]
@@ -232,6 +236,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -244,6 +252,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper [class]
     module.add_class('TapFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -385,9 +395,11 @@
     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__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SystemThread_methods(root_module, root_module['ns3::SystemThread'])
@@ -417,12 +429,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TapFdNetDeviceHelper_methods(root_module, root_module['ns3::TapFdNetDeviceHelper'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1204,6 +1219,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1219,6 +1239,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1395,7 +1420,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2113,10 +2138,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -2926,6 +2955,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3040,6 +3073,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3076,6 +3121,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3999,6 +4056,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -4078,6 +4221,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4364,6 +4512,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper::TapFdNetDeviceHelper(ns3::TapFdNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapFdNetDeviceHelper const &', 'arg0')])
diff -Naur ns-3.24.1/src/fd-net-device/bindings/modulegen__gcc_LP64.py ns-3.25/src/fd-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:52.000000000 -0700
@@ -105,7 +105,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -162,12 +162,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::FdReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::FdReader>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SystemThread', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SystemThread>'], 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]
@@ -232,6 +236,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -244,6 +252,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper [class]
     module.add_class('TapFdNetDeviceHelper', parent=root_module['ns3::EmuFdNetDeviceHelper'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -385,9 +395,11 @@
     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__Ns3FdReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3FdReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::FdReader, ns3::empty, ns3::DefaultDeleter<ns3::FdReader> >'])
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SystemThread_methods(root_module, root_module['ns3::SystemThread'])
@@ -417,12 +429,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TapFdNetDeviceHelper_methods(root_module, root_module['ns3::TapFdNetDeviceHelper'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1204,6 +1219,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1219,6 +1239,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1395,7 +1420,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2113,10 +2138,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -2926,6 +2955,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3040,6 +3073,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3076,6 +3121,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3SystemThread_Ns3Empty_Ns3DefaultDeleter__lt__ns3SystemThread__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SystemThread, ns3::empty, ns3::DefaultDeleter<ns3::SystemThread> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -3999,6 +4056,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -4078,6 +4221,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -4364,6 +4512,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TapFdNetDeviceHelper_methods(root_module, cls):
     ## tap-fd-net-device-helper.h (module 'fd-net-device'): ns3::TapFdNetDeviceHelper::TapFdNetDeviceHelper(ns3::TapFdNetDeviceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapFdNetDeviceHelper const &', 'arg0')])
diff -Naur ns-3.24.1/src/fd-net-device/examples/dummy-network.cc ns-3.25/src/fd-net-device/examples/dummy-network.cc
--- ns-3.24.1/src/fd-net-device/examples/dummy-network.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/dummy-network.cc	2016-03-23 21:36:52.000000000 -0700
@@ -26,7 +26,7 @@
 #include "ns3/network-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/fd-net-device-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 
 using namespace ns3;
 
diff -Naur ns-3.24.1/src/fd-net-device/examples/fd-emu-ping.cc ns-3.25/src/fd-net-device/examples/fd-emu-ping.cc
--- ns-3.24.1/src/fd-net-device/examples/fd-emu-ping.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/fd-emu-ping.cc	2016-03-23 21:36:52.000000000 -0700
@@ -72,7 +72,7 @@
 #include "ns3/internet-module.h"
 #include "ns3/network-module.h"
 #include "ns3/fd-net-device-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/ipv4-list-routing-helper.h"
 
diff -Naur ns-3.24.1/src/fd-net-device/examples/fd-planetlab-ping.cc ns-3.25/src/fd-net-device/examples/fd-planetlab-ping.cc
--- ns-3.24.1/src/fd-net-device/examples/fd-planetlab-ping.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/fd-planetlab-ping.cc	2016-03-23 21:36:52.000000000 -0700
@@ -57,7 +57,7 @@
 #include "ns3/internet-module.h"
 #include "ns3/network-module.h"
 #include "ns3/fd-net-device-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/ipv4-list-routing-helper.h"
 
diff -Naur ns-3.24.1/src/fd-net-device/examples/fd-tap-ping6.cc ns-3.25/src/fd-net-device/examples/fd-tap-ping6.cc
--- ns-3.24.1/src/fd-net-device/examples/fd-tap-ping6.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/fd-tap-ping6.cc	2016-03-23 21:36:52.000000000 -0700
@@ -50,7 +50,7 @@
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/csma-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/fd-net-device-module.h"
 
 using namespace ns3;
diff -Naur ns-3.24.1/src/fd-net-device/examples/fd-tap-ping.cc ns-3.25/src/fd-net-device/examples/fd-tap-ping.cc
--- ns-3.24.1/src/fd-net-device/examples/fd-tap-ping.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/fd-tap-ping.cc	2016-03-23 21:36:52.000000000 -0700
@@ -71,7 +71,7 @@
 #include "ns3/internet-module.h"
 #include "ns3/network-module.h"
 #include "ns3/fd-net-device-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/ipv4-list-routing-helper.h"
 
diff -Naur ns-3.24.1/src/fd-net-device/examples/realtime-dummy-network.cc ns-3.25/src/fd-net-device/examples/realtime-dummy-network.cc
--- ns-3.24.1/src/fd-net-device/examples/realtime-dummy-network.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/realtime-dummy-network.cc	2016-03-23 21:36:52.000000000 -0700
@@ -26,7 +26,7 @@
 #include "ns3/network-module.h"
 #include "ns3/internet-module.h"
 #include "ns3/fd-net-device-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 
 using namespace ns3;
 
diff -Naur ns-3.24.1/src/fd-net-device/examples/wscript ns-3.25/src/fd-net-device/examples/wscript
--- ns-3.24.1/src/fd-net-device/examples/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/fd-net-device/examples/wscript	2016-03-23 21:36:52.000000000 -0700
@@ -5,19 +5,19 @@
     if not env['ENABLE_FDNETDEV']:
         return
 
-    obj = bld.create_ns3_program('dummy-network', ['fd-net-device', 'internet', 'applications'])
+    obj = bld.create_ns3_program('dummy-network', ['fd-net-device', 'internet', 'internet-apps'])
     obj.source = 'dummy-network.cc'
     obj = bld.create_ns3_program('fd2fd-onoff', ['fd-net-device', 'internet', 'applications'])
     obj.source = 'fd2fd-onoff.cc'
 
     if bld.env["ENABLE_REAL_TIME"]:
-        obj = bld.create_ns3_program('realtime-dummy-network', ['fd-net-device', 'internet', 'applications'])
+        obj = bld.create_ns3_program('realtime-dummy-network', ['fd-net-device', 'internet', 'internet-apps'])
         obj.source = 'realtime-dummy-network.cc'
         obj = bld.create_ns3_program('realtime-fd2fd-onoff', ['fd-net-device', 'internet', 'applications'])
         obj.source = 'realtime-fd2fd-onoff.cc'
 
     if bld.env['ENABLE_TAP']:
-        obj = bld.create_ns3_program('fd-emu-ping', ['fd-net-device', 'internet', 'applications'])
+        obj = bld.create_ns3_program('fd-emu-ping', ['fd-net-device', 'internet', 'internet-apps'])
         obj.source = 'fd-emu-ping.cc'
         obj = bld.create_ns3_program('fd-emu-udp-echo', ['fd-net-device', 'internet', 'applications'])
         obj.source = 'fd-emu-udp-echo.cc'
@@ -25,12 +25,12 @@
         obj.source = 'fd-emu-onoff.cc'
 
     if bld.env['ENABLE_TAP']:
-        obj = bld.create_ns3_program('fd-tap-ping', ['fd-net-device', 'internet', 'applications'])
+        obj = bld.create_ns3_program('fd-tap-ping', ['fd-net-device', 'internet', 'internet-apps'])
         obj.source = 'fd-tap-ping.cc'
-        obj = bld.create_ns3_program('fd-tap-ping6', ['fd-net-device', 'internet', 'applications', 'csma'])
+        obj = bld.create_ns3_program('fd-tap-ping6', ['fd-net-device', 'internet', 'internet-apps', 'csma'])
         obj.source = 'fd-tap-ping6.cc'
 
     if bld.env['ENABLE_PLANETLAB']:
-        obj = bld.create_ns3_program('fd-planetlab-ping', ['fd-net-device', 'internet', 'applications'])
+        obj = bld.create_ns3_program('fd-planetlab-ping', ['fd-net-device', 'internet', 'internet-apps'])
         obj.source = 'fd-planetlab-ping.cc'
 
diff -Naur ns-3.24.1/src/flow-monitor/bindings/callbacks_list.py ns-3.25/src/flow-monitor/bindings/callbacks_list.py
--- ns-3.24.1/src/flow-monitor/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/flow-monitor/bindings/callbacks_list.py	2016-03-23 21:36:52.000000000 -0700
@@ -1,7 +1,9 @@
 callback_classes = [
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/flow-monitor/bindings/modulegen__gcc_ILP32.py ns-3.25/src/flow-monitor/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/flow-monitor/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:52.000000000 -0700
@@ -148,6 +148,8 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -172,12 +174,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -186,6 +192,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -294,6 +302,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -306,6 +318,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -316,6 +330,7 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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')
@@ -449,9 +464,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -501,12 +518,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1296,6 +1316,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1311,6 +1336,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1548,7 +1578,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2934,11 +2964,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -2998,6 +3038,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -3198,6 +3242,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3234,6 +3290,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3325,6 +3393,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3350,6 +3423,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4592,6 +4680,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4607,6 +4700,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4622,6 +4720,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4672,6 +4780,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -4867,6 +4980,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4882,6 +5000,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4909,7 +5032,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4968,6 +5097,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -5250,6 +5384,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -5260,6 +5399,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -5280,6 +5429,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -5290,6 +5449,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -5459,16 +5623,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -5492,7 +5673,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -5641,6 +5823,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5802,7 +6010,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5929,6 +6137,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6008,6 +6302,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6294,6 +6593,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/flow-monitor/bindings/modulegen__gcc_LP64.py ns-3.25/src/flow-monitor/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/flow-monitor/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:52.000000000 -0700
@@ -148,6 +148,8 @@
     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::DscpType [enumeration]
+    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::Ipv6Header'], import_from_module='ns.internet')
     ## 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]
@@ -172,12 +174,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4MulticastRoute>'], 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::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Ipv4Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv4Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -186,6 +192,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -294,6 +302,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -306,6 +318,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -316,6 +330,7 @@
     module.add_class('AddressChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
     ## address.h (module 'network'): ns3::AddressValue [class]
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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')
@@ -449,9 +464,11 @@
     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> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -501,12 +518,15 @@
     register_Ns3Mac48AddressChecker_methods(root_module, root_module['ns3::Mac48AddressChecker'])
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1296,6 +1316,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1311,6 +1336,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1548,7 +1578,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2934,11 +2964,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -2998,6 +3038,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -3198,6 +3242,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3234,6 +3290,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -3325,6 +3393,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -3350,6 +3423,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -4592,6 +4680,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4607,6 +4700,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4622,6 +4720,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4672,6 +4780,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -4867,6 +4980,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -4882,6 +5000,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -4909,7 +5032,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -4968,6 +5097,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -5250,6 +5384,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -5260,6 +5399,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -5280,6 +5429,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -5290,6 +5449,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -5459,16 +5623,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -5492,7 +5673,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -5641,6 +5823,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5802,7 +6010,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5929,6 +6137,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -6008,6 +6302,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -6294,6 +6593,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
diff -Naur ns-3.24.1/src/flow-monitor/examples/wifi-olsr-flowmon.py ns-3.25/src/flow-monitor/examples/wifi-olsr-flowmon.py
--- ns-3.24.1/src/flow-monitor/examples/wifi-olsr-flowmon.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/flow-monitor/examples/wifi-olsr-flowmon.py	2016-03-23 21:36:52.000000000 -0700
@@ -50,7 +50,7 @@
     cmd.Parse(argv)
 
     wifi = ns.wifi.WifiHelper.Default()
-    wifiMac = ns.wifi.NqosWifiMacHelper.Default()
+    wifiMac = ns.wifi.WifiMacHelper()
     wifiPhy = ns.wifi.YansWifiPhyHelper.Default()
     wifiChannel = ns.wifi.YansWifiChannelHelper.Default()
     wifiPhy.SetChannel(wifiChannel.Create())
diff -Naur ns-3.24.1/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.25/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.24.1/src/flow-monitor/model/ipv4-flow-probe.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/flow-monitor/model/ipv4-flow-probe.cc	2016-03-23 21:36:52.000000000 -0700
@@ -64,8 +64,10 @@
    * \param flowId the flow identifier
    * \param packetId the packet identifier
    * \param packetSize the packet size
+   * \param src packet source address
+   * \param dst packet destination address
    */
-  Ipv4FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize);
+  Ipv4FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize, Ipv4Address src, Ipv4Address dst);
   /**
    * \brief Set the flow identifier
    * \param flowId the flow identifier
@@ -96,11 +98,21 @@
    * \returns the packet size
    */
   uint32_t GetPacketSize (void) const;
+  /**
+   * \brief Checks if the addresses stored in tag are matching
+   * the arguments.
+   *
+   * This check is important for IP over IP encapsulation.
+   *
+   * \returns True if the addresses are matching.
+   */
+  bool IsSrcDstValid (Ipv4Address src, Ipv4Address dst) const;
 private:
   uint32_t m_flowId;      //!< flow identifier
   uint32_t m_packetId;    //!< packet identifier
   uint32_t m_packetSize;  //!< packet size
-
+  Ipv4Address m_src;      //!< IP source
+  Ipv4Address m_dst;      //!< IP destination
 };
 
 TypeId 
@@ -121,7 +133,7 @@
 uint32_t 
 Ipv4FlowProbeTag::GetSerializedSize (void) const
 {
-  return 4 + 4 + 4;
+  return 4 + 4 + 4 + 8;
 }
 void 
 Ipv4FlowProbeTag::Serialize (TagBuffer buf) const
@@ -129,6 +141,12 @@
   buf.WriteU32 (m_flowId);
   buf.WriteU32 (m_packetId);
   buf.WriteU32 (m_packetSize);
+
+  uint8_t tBuf[4];
+  m_src.Serialize (tBuf);
+  buf.Write (tBuf, 4);
+  m_dst.Serialize (tBuf);
+  buf.Write (tBuf, 4);
 }
 void 
 Ipv4FlowProbeTag::Deserialize (TagBuffer buf)
@@ -136,21 +154,27 @@
   m_flowId = buf.ReadU32 ();
   m_packetId = buf.ReadU32 ();
   m_packetSize = buf.ReadU32 ();
+
+  uint8_t tBuf[4];
+  buf.Read (tBuf, 4);
+  m_src = Ipv4Address::Deserialize (tBuf);
+  buf.Read (tBuf, 4);
+  m_dst = Ipv4Address::Deserialize (tBuf);
 }
 void 
 Ipv4FlowProbeTag::Print (std::ostream &os) const
 {
   os << "FlowId=" << m_flowId;
-  os << "PacketId=" << m_packetId;
-  os << "PacketSize=" << m_packetSize;
+  os << " PacketId=" << m_packetId;
+  os << " PacketSize=" << m_packetSize;
 }
 Ipv4FlowProbeTag::Ipv4FlowProbeTag ()
   : Tag () 
 {
 }
 
-Ipv4FlowProbeTag::Ipv4FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize)
-  : Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (packetSize)
+Ipv4FlowProbeTag::Ipv4FlowProbeTag (uint32_t flowId, uint32_t packetId, uint32_t packetSize, Ipv4Address src, Ipv4Address dst)
+  : Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (packetSize), m_src (src), m_dst (dst)
 {
 }
 
@@ -183,7 +207,12 @@
 Ipv4FlowProbeTag::GetPacketSize (void) const
 {
   return m_packetSize;
-} 
+}
+bool
+Ipv4FlowProbeTag::IsSrcDstValid (Ipv4Address src, Ipv4Address dst) const
+{
+  return ((m_src == src) && (m_dst == dst));
+}
 
 ////////////////////////////////////////
 // Ipv4FlowProbe class implementation //
@@ -264,6 +293,13 @@
       return;
     }
 
+  Ipv4FlowProbeTag fTag;
+  bool found = ipPayload->FindFirstMatchingByteTag (fTag);
+  if (found)
+    {
+      return;
+    }
+
   if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
     {
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
@@ -273,7 +309,7 @@
 
       // tag the packet with the flow id and packet id, so that the packet can be identified even
       // when Ipv4Header is not accessible at some non-IPv4 protocol layer
-      Ipv4FlowProbeTag fTag (flowId, packetId, size);
+      Ipv4FlowProbeTag fTag (flowId, packetId, size, ipHeader.GetSource (), ipHeader.GetDestination ());
       ipPayload->AddByteTag (fTag);
     }
 }
@@ -286,6 +322,17 @@
 
   if (found)
     {
+      if (!ipHeader.IsLastFragment () || ipHeader.GetFragmentOffset () != 0)
+        {
+          NS_LOG_WARN ("Not counting fragmented packets");
+          return;
+        }
+      if (!fTag.IsSrcDstValid (ipHeader.GetSource (), ipHeader.GetDestination ()))
+        {
+          NS_LOG_LOGIC ("Not reporting encapsulated packet");
+          return;
+        }
+
       FlowId flowId = fTag.GetFlowId ();
       FlowPacketId packetId = fTag.GetPacketId ();
 
@@ -303,11 +350,18 @@
 
   if (found)
     {
+      if (!fTag.IsSrcDstValid (ipHeader.GetSource (), ipHeader.GetDestination ()))
+        {
+          NS_LOG_LOGIC ("Not reporting encapsulated packet");
+          return;
+        }
+
       FlowId flowId = fTag.GetFlowId ();
       FlowPacketId packetId = fTag.GetPacketId ();
 
       uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ());
-      NS_LOG_DEBUG ("ReportLastRx ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<");");
+      NS_LOG_DEBUG ("ReportLastRx ("<<this<<", "<<flowId<<", "<<packetId<<", "<<size<<"); "
+                                     << ipHeader << *ipPayload);
       m_flowMonitor->ReportLastRx (this, flowId, packetId, size);
     }
 }
diff -Naur ns-3.24.1/src/internet/bindings/callbacks_list.py ns-3.25/src/internet/bindings/callbacks_list.py
--- ns-3.24.1/src/internet/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,7 @@
 callback_classes = [
     ['void', 'ns3::Ipv6Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ipv4Address', 'unsigned char', 'unsigned char', 'unsigned char', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
@@ -11,4 +12,5 @@
     ['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'],
     ['void', 'ns3::Ptr<ns3::ArpCache const>', 'ns3::Ipv4Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/internet/bindings/modulegen__gcc_ILP32.py ns-3.25/src/internet/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/internet/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -199,19 +199,25 @@
     ## 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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
     module.add_class('PcapHelperForIpv4', allow_subclassing=True)
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
     module.add_class('PcapHelperForIpv6', allow_subclassing=True)
+    ## rip-helper.h (module 'internet'): ns3::RipHelper [class]
+    module.add_class('RipHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## 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'])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry [class]
+    module.add_class('RipRoutingTableEntry', parent=root_module['ns3::Ipv4RoutingTableEntry'])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::Status_e [enumeration]
+    module.add_enum('Status_e', ['RIP_VALID', 'RIP_INVALID'], outer_class=root_module['ns3::RipRoutingTableEntry'])
     ## tcp-socket-base.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
@@ -238,8 +244,6 @@
     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')
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool> [class]
-    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['bool'])
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::SequenceNumber<unsigned int, int> > [class]
@@ -248,6 +252,8 @@
     root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'].implicitly_converts_to(root_module['ns3::SequenceNumber32'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t> [class]
     module.add_class('TracedValue', template_parameters=['ns3::TcpSocket::TcpStates_t'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::TcpSocketState::TcpCongState_t'])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -342,6 +348,8 @@
     module.add_class('Ipv6ExtensionRoutingHeader', parent=root_module['ns3::Ipv6ExtensionHeader'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', parent=root_module['ns3::Header'])
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::DscpType [enumeration]
+    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::Ipv6Header'])
     ## 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'])
     ## ipv6-list-routing-helper.h (module 'internet'): ns3::Ipv6ListRoutingHelper [class]
@@ -364,20 +372,34 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=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'])
     ## queue.h (module 'network'): ns3::Queue [class]
     module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
     module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
+    ## rip-header.h (module 'internet'): ns3::RipHeader [class]
+    module.add_class('RipHeader', parent=root_module['ns3::Header'])
+    ## rip-header.h (module 'internet'): ns3::RipHeader::Command_e [enumeration]
+    module.add_enum('Command_e', ['REQUEST', 'RESPONSE'], outer_class=root_module['ns3::RipHeader'])
     ## 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'])
+    ## rip-header.h (module 'internet'): ns3::RipRte [class]
+    module.add_class('RipRte', 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]
@@ -404,12 +426,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv6MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv6MulticastRoute>'], 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::Ipv6Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv6Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv6Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -418,6 +444,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -432,10 +460,14 @@
     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'])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps [class]
+    module.add_class('TcpCongestionOps', parent=root_module['ns3::Object'])
     ## tcp-header.h (module 'internet'): ns3::TcpHeader [class]
     module.add_class('TcpHeader', parent=root_module['ns3::Header'])
     ## tcp-header.h (module 'internet'): ns3::TcpHeader::Flags_t [enumeration]
     module.add_enum('Flags_t', ['NONE', 'FIN', 'SYN', 'RST', 'PSH', 'ACK', 'URG', 'ECE', 'CWR'], outer_class=root_module['ns3::TcpHeader'])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno [class]
+    module.add_class('TcpNewReno', parent=root_module['ns3::TcpCongestionOps'])
     ## tcp-option.h (module 'internet'): ns3::TcpOption [class]
     module.add_class('TcpOption', parent=root_module['ns3::Object'])
     ## tcp-option.h (module 'internet'): ns3::TcpOption::Kind [enumeration]
@@ -452,12 +484,14 @@
     module.add_class('TcpSocketBase', parent=root_module['ns3::TcpSocket'])
     ## tcp-socket-factory.h (module 'internet'): ns3::TcpSocketFactory [class]
     module.add_class('TcpSocketFactory', parent=root_module['ns3::SocketFactory'])
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe [class]
-    module.add_class('TcpTahoe', parent=root_module['ns3::TcpSocketBase'])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState [class]
+    module.add_class('TcpSocketState', parent=root_module['ns3::Object'])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpCongState_t [enumeration]
+    module.add_enum('TcpCongState_t', ['CA_OPEN', 'CA_DISORDER', 'CA_CWR', 'CA_RECOVERY', 'CA_LOSS', 'CA_LAST_STATE'], outer_class=root_module['ns3::TcpSocketState'])
     ## tcp-tx-buffer.h (module 'internet'): ns3::TcpTxBuffer [class]
     module.add_class('TcpTxBuffer', parent=root_module['ns3::Object'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood [class]
-    module.add_class('TcpWestwood', parent=root_module['ns3::TcpSocketBase'])
+    module.add_class('TcpWestwood', parent=root_module['ns3::TcpNewReno'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::ProtocolType [enumeration]
     module.add_enum('ProtocolType', ['WESTWOOD', 'WESTWOODPLUS'], outer_class=root_module['ns3::TcpWestwood'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::FilterType [enumeration]
@@ -474,6 +508,8 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::Time'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
     root_module['ns3::TracedValue< ns3::Time >'].implicitly_converts_to(root_module['ns3::Time'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -520,8 +556,6 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## channel.h (module 'network'): ns3::Channel [class]
     module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue [class]
-    module.add_class('CoDelQueue', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
@@ -576,6 +610,8 @@
     module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
     module.add_class('Ipv4MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter [class]
+    module.add_class('Ipv4PacketFilter', parent=root_module['ns3::PacketFilter'])
     ## ipv4-raw-socket-factory.h (module 'internet'): ns3::Ipv4RawSocketFactory [class]
     module.add_class('Ipv4RawSocketFactory', parent=root_module['ns3::SocketFactory'])
     ## ipv4-raw-socket-impl.h (module 'internet'): ns3::Ipv4RawSocketImpl [class]
@@ -628,6 +664,8 @@
     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-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter [class]
+    module.add_class('Ipv6PacketFilter', parent=root_module['ns3::PacketFilter'])
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
     module.add_class('Ipv6PmtuCache', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
@@ -656,6 +694,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -672,24 +714,30 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter [class]
+    module.add_class('PfifoFastIpv4PacketFilter', parent=root_module['ns3::Ipv4PacketFilter'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::Ipv4TrafficClassMode [enumeration]
+    module.add_enum('Ipv4TrafficClassMode', ['PF_MODE_TOS', 'PF_MODE_DSCP'], outer_class=root_module['ns3::PfifoFastIpv4PacketFilter'])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter [class]
+    module.add_class('PfifoFastIpv6PacketFilter', parent=root_module['ns3::Ipv6PacketFilter'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    ## rip.h (module 'internet'): ns3::Rip [class]
+    module.add_class('Rip', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    ## rip.h (module 'internet'): ns3::Rip::SplitHorizonType_e [enumeration]
+    module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::Rip'])
     ## 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'])
-    ## string.h (module 'core'): ns3::StringChecker [class]
-    module.add_class('StringChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## string.h (module 'core'): ns3::StringValue [class]
-    module.add_class('StringValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed [class]
+    module.add_class('TcpHighSpeed', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla [class]
+    module.add_class('TcpHybla', parent=root_module['ns3::TcpNewReno'])
     ## 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]
-    module.add_class('TcpNewReno', parent=root_module['ns3::TcpSocketBase'])
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno [class]
-    module.add_class('TcpReno', parent=root_module['ns3::TcpSocketBase'])
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793 [class]
-    module.add_class('TcpRfc793', parent=root_module['ns3::TcpSocketBase'])
     ## 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]
@@ -726,13 +774,21 @@
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4QueueDiscItem [class]
+    module.add_class('Ipv4QueueDiscItem', parent=root_module['ns3::QueueDiscItem'])
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6QueueDiscItem [class]
+    module.add_class('Ipv6QueueDiscItem', parent=root_module['ns3::QueueDiscItem'])
     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::RipRte >', 'ns3::RipRte', container_type=u'list')
     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::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', container_type=u'list')
     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*')
@@ -749,6 +805,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) *', u'ns3::TcpCongStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) **', u'ns3::TcpCongStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) *&', u'ns3::TcpCongStatesTracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -918,8 +977,10 @@
     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_Ns3RipHelper_methods(root_module, root_module['ns3::RipHelper'])
     register_Ns3RipNgHelper_methods(root_module, root_module['ns3::RipNgHelper'])
     register_Ns3RipNgRoutingTableEntry_methods(root_module, root_module['ns3::RipNgRoutingTableEntry'])
+    register_Ns3RipRoutingTableEntry_methods(root_module, root_module['ns3::RipRoutingTableEntry'])
     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'])
@@ -930,10 +991,10 @@
     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__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TracedValue__Ns3SequenceNumber__lt__unsigned_int__int__gt___methods(root_module, root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'])
     register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocket::TcpStates_t >'])
+    register_Ns3TracedValue__Ns3TcpSocketStateTcpCongState_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t >'])
     register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -979,11 +1040,16 @@
     register_Ns3Ipv6PacketInfoTag_methods(root_module, root_module['ns3::Ipv6PacketInfoTag'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3RipHeader_methods(root_module, root_module['ns3::RipHeader'])
     register_Ns3RipNgHeader_methods(root_module, root_module['ns3::RipNgHeader'])
     register_Ns3RipNgRte_methods(root_module, root_module['ns3::RipNgRte'])
+    register_Ns3RipRte_methods(root_module, root_module['ns3::RipRte'])
     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'])
@@ -997,9 +1063,11 @@
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6Route> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -1009,19 +1077,22 @@
     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_Ns3TcpCongestionOps_methods(root_module, root_module['ns3::TcpCongestionOps'])
     register_Ns3TcpHeader_methods(root_module, root_module['ns3::TcpHeader'])
+    register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpOption_methods(root_module, root_module['ns3::TcpOption'])
     register_Ns3TcpOptionUnknown_methods(root_module, root_module['ns3::TcpOptionUnknown'])
     register_Ns3TcpRxBuffer_methods(root_module, root_module['ns3::TcpRxBuffer'])
     register_Ns3TcpSocket_methods(root_module, root_module['ns3::TcpSocket'])
     register_Ns3TcpSocketBase_methods(root_module, root_module['ns3::TcpSocketBase'])
     register_Ns3TcpSocketFactory_methods(root_module, root_module['ns3::TcpSocketFactory'])
-    register_Ns3TcpTahoe_methods(root_module, root_module['ns3::TcpTahoe'])
+    register_Ns3TcpSocketState_methods(root_module, root_module['ns3::TcpSocketState'])
     register_Ns3TcpTxBuffer_methods(root_module, root_module['ns3::TcpTxBuffer'])
     register_Ns3TcpWestwood_methods(root_module, root_module['ns3::TcpWestwood'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
+    register_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UdpHeader_methods(root_module, root_module['ns3::UdpHeader'])
@@ -1044,7 +1115,6 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
-    register_Ns3CoDelQueue_methods(root_module, root_module['ns3::CoDelQueue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
@@ -1070,6 +1140,7 @@
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
     register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
     register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+    register_Ns3Ipv4PacketFilter_methods(root_module, root_module['ns3::Ipv4PacketFilter'])
     register_Ns3Ipv4RawSocketFactory_methods(root_module, root_module['ns3::Ipv4RawSocketFactory'])
     register_Ns3Ipv4RawSocketImpl_methods(root_module, root_module['ns3::Ipv4RawSocketImpl'])
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
@@ -1095,6 +1166,7 @@
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6MulticastRoute_methods(root_module, root_module['ns3::Ipv6MulticastRoute'])
+    register_Ns3Ipv6PacketFilter_methods(root_module, root_module['ns3::Ipv6PacketFilter'])
     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'])
@@ -1108,6 +1180,8 @@
     register_Ns3NdiscCache_methods(root_module, root_module['ns3::NdiscCache'])
     register_Ns3NdiscCacheEntry_methods(root_module, root_module['ns3::NdiscCache::Entry'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -1116,14 +1190,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3PfifoFastIpv4PacketFilter_methods(root_module, root_module['ns3::PfifoFastIpv4PacketFilter'])
+    register_Ns3PfifoFastIpv6PacketFilter_methods(root_module, root_module['ns3::PfifoFastIpv6PacketFilter'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3Rip_methods(root_module, root_module['ns3::Rip'])
     register_Ns3RipNg_methods(root_module, root_module['ns3::RipNg'])
-    register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
-    register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
+    register_Ns3TcpHighSpeed_methods(root_module, root_module['ns3::TcpHighSpeed'])
+    register_Ns3TcpHybla_methods(root_module, root_module['ns3::TcpHybla'])
     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'])
-    register_Ns3TcpRfc793_methods(root_module, root_module['ns3::TcpRfc793'])
     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'])
@@ -1142,6 +1217,9 @@
     register_Ns3Ipv6ListRouting_methods(root_module, root_module['ns3::Ipv6ListRouting'])
     register_Ns3Ipv6PacketProbe_methods(root_module, root_module['ns3::Ipv6PacketProbe'])
     register_Ns3LoopbackNetDevice_methods(root_module, root_module['ns3::LoopbackNetDevice'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
+    register_Ns3Ipv4QueueDiscItem_methods(root_module, root_module['ns3::Ipv4QueueDiscItem'])
+    register_Ns3Ipv6QueueDiscItem_methods(root_module, root_module['ns3::Ipv6QueueDiscItem'])
     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'])
@@ -2406,6 +2484,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -2421,6 +2504,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2599,10 +2687,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -3023,7 +3111,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -3302,10 +3390,10 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
-    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer const & c) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+                   [param('ns3::Ipv6InterfaceContainer const &', 'c')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -4229,10 +4317,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -4386,6 +4478,43 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3RipHelper_methods(root_module, cls):
+    ## rip-helper.h (module 'internet'): ns3::RipHelper::RipHelper() [constructor]
+    cls.add_constructor([])
+    ## rip-helper.h (module 'internet'): ns3::RipHelper::RipHelper(ns3::RipHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipHelper const &', 'arg0')])
+    ## rip-helper.h (module 'internet'): ns3::RipHelper * ns3::RipHelper::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::RipHelper *', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-helper.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::RipHelper::Create(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## rip-helper.h (module 'internet'): int64_t ns3::RipHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::SetDefaultRouter(ns3::Ptr<ns3::Node> node, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
+    cls.add_method('SetDefaultRouter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::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')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::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_Ns3RipNgHelper_methods(root_module, cls):
     ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper() [constructor]
     cls.add_constructor([])
@@ -4471,6 +4600,54 @@
                    [param('uint16_t', 'routeTag')])
     return
 
+def register_Ns3RipRoutingTableEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::RipRoutingTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipRoutingTableEntry const &', 'arg0')])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry() [constructor]
+    cls.add_constructor([])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::Ipv4Address network, ns3::Ipv4Mask networkPrefix, ns3::Ipv4Address nextHop, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkPrefix'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::Ipv4Address network, ns3::Ipv4Mask networkPrefix, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkPrefix'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): uint8_t ns3::RipRoutingTableEntry::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::Status_e ns3::RipRoutingTableEntry::GetRouteStatus() const [member function]
+    cls.add_method('GetRouteStatus', 
+                   'ns3::RipRoutingTableEntry::Status_e', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): uint16_t ns3::RipRoutingTableEntry::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): bool ns3::RipRoutingTableEntry::IsRouteChanged() const [member function]
+    cls.add_method('IsRouteChanged', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteChanged(bool changed) [member function]
+    cls.add_method('SetRouteChanged', 
+                   'void', 
+                   [param('bool', 'changed')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteStatus(ns3::RipRoutingTableEntry::Status_e status) [member function]
+    cls.add_method('SetRouteStatus', 
+                   'void', 
+                   [param('ns3::RipRoutingTableEntry::Status_e', 'status')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttHistory_methods(root_module, cls):
     ## tcp-socket-base.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')])
@@ -4904,40 +5081,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TracedValue__Bool_methods(root_module, cls):
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
-    cls.add_constructor([])
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(ns3::TracedValue<bool> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TracedValue< bool > const &', 'o')])
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(bool const & v) [constructor]
-    cls.add_constructor([param('bool const &', 'v')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
-    cls.add_method('Connect', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
-    cls.add_method('ConnectWithoutContext', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
-    cls.add_method('Disconnect', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
-    cls.add_method('DisconnectWithoutContext', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): bool ns3::TracedValue<bool>::Get() const [member function]
-    cls.add_method('Get', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Set(bool const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('bool const &', 'v')])
-    return
-
 def register_Ns3TracedValue__Double_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -5040,7 +5183,42 @@
                    [param('ns3::TcpSocket::TcpStates_t const &', 'v')])
     return
 
+def register_Ns3TracedValue__Ns3TcpSocketStateTcpCongState_t_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue(ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue(ns3::TcpSocketState::TcpCongState_t const & v) [constructor]
+    cls.add_constructor([param('ns3::TcpSocketState::TcpCongState_t const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::TcpSocketState::TcpCongState_t ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::TcpSocketState::TcpCongState_t', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Set(ns3::TcpSocketState::TcpCongState_t const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::TcpSocketState::TcpCongState_t const &', 'v')])
+    return
+
 def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    cls.add_binary_numeric_operator('/', root_module['ns3::TracedValue< unsigned int >'], root_module['ns3::TracedValue< unsigned int >'], param('uint32_t const &', u'right'))
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
     cls.add_constructor([])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
@@ -7075,11 +7253,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -7139,6 +7327,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -7572,6 +7764,35 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    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', 
@@ -7618,6 +7839,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -7653,18 +7878,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -7705,129 +7945,410 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3RandomVariableStream_methods(root_module, cls):
-    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
-    cls.add_constructor([])
-    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
-    cls.add_method('SetStream', 
-                   'void', 
-                   [param('int64_t', 'stream')])
-    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
-    cls.add_method('GetStream', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
-    cls.add_method('SetAntithetic', 
-                   'void', 
-                   [param('bool', 'isAntithetic')])
-    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
-    cls.add_method('IsAntithetic', 
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
                    'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
-    cls.add_method('GetValue', 
-                   'double', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
-    cls.add_method('GetInteger', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
-    cls.add_method('Peek', 
-                   'ns3::RngStream *', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
                    [], 
-                   is_const=True, visibility='protected')
-    return
-
-def register_Ns3RipNgHeader_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## 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', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
                    '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', 
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
                    [], 
                    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 >', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgHeader::GetRteNumber() const [member function]
-    cls.add_method('GetRteNumber', 
-                   'uint16_t', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
                    '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_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3RipHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip-header.h (module 'internet'): ns3::RipHeader::RipHeader(ns3::RipHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipHeader const &', 'arg0')])
+    ## rip-header.h (module 'internet'): ns3::RipHeader::RipHeader() [constructor]
+    cls.add_constructor([])
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::AddRte(ns3::RipRte rte) [member function]
+    cls.add_method('AddRte', 
+                   'void', 
+                   [param('ns3::RipRte', 'rte')])
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::ClearRtes() [member function]
+    cls.add_method('ClearRtes', 
+                   'void', 
+                   [])
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::RipHeader::Command_e ns3::RipHeader::GetCommand() const [member function]
+    cls.add_method('GetCommand', 
+                   'ns3::RipHeader::Command_e', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): ns3::TypeId ns3::RipHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): std::list<ns3::RipRte, std::allocator<ns3::RipRte> > ns3::RipHeader::GetRteList() const [member function]
+    cls.add_method('GetRteList', 
+                   'std::list< ns3::RipRte >', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint16_t ns3::RipHeader::GetRteNumber() const [member function]
+    cls.add_method('GetRteNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): static ns3::TypeId ns3::RipHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::SetCommand(ns3::RipHeader::Command_e command) [member function]
+    cls.add_method('SetCommand', 
+                   'void', 
+                   [param('ns3::RipHeader::Command_e', 'command')])
+    return
+
+def register_Ns3RipNgHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## 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', 
@@ -7918,6 +8439,89 @@
                    [param('uint16_t', 'routeTag')])
     return
 
+def register_Ns3RipRte_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip-header.h (module 'internet'): ns3::RipRte::RipRte(ns3::RipRte const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipRte const &', 'arg0')])
+    ## rip-header.h (module 'internet'): ns3::RipRte::RipRte() [constructor]
+    cls.add_constructor([])
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::TypeId ns3::RipRte::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Address ns3::RipRte::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Address ns3::RipRte::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint16_t ns3::RipRte::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Mask ns3::RipRte::GetSubnetMask() const [member function]
+    cls.add_method('GetSubnetMask', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): static ns3::TypeId ns3::RipRte::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetNextHop(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetPrefix(ns3::Ipv4Address prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'prefix')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetRouteMetric(uint32_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint32_t', 'routeMetric')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetSubnetMask(ns3::Ipv4Mask subnetMask) [member function]
+    cls.add_method('SetSubnetMask', 
+                   'void', 
+                   [param('ns3::Ipv4Mask', 'subnetMask')])
+    return
+
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
@@ -8157,6 +8761,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -8193,6 +8809,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -8284,6 +8912,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -8309,6 +8942,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -8833,6 +9481,43 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3TcpCongestionOps_methods(root_module, cls):
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps::TcpCongestionOps() [constructor]
+    cls.add_constructor([])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps::TcpCongestionOps(ns3::TcpCongestionOps const & other) [copy constructor]
+    cls.add_constructor([param('ns3::TcpCongestionOps const &', 'other')])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpCongestionOps::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): std::string ns3::TcpCongestionOps::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpCongestionOps::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): static ns3::TypeId ns3::TcpCongestionOps::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpCongestionOps::IncreaseWindow(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('IncreaseWindow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpCongestionOps::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
+    return
+
 def register_Ns3TcpHeader_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
@@ -8883,11 +9568,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## tcp-header.h (module 'internet'): uint8_t ns3::TcpHeader::GetMaxOptionLength() const [member function]
+    cls.add_method('GetMaxOptionLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## tcp-header.h (module 'internet'): ns3::Ptr<ns3::TcpOption> ns3::TcpHeader::GetOption(uint8_t kind) const [member function]
     cls.add_method('GetOption', 
                    'ns3::Ptr< ns3::TcpOption >', 
                    [param('uint8_t', 'kind')], 
                    is_const=True)
+    ## tcp-header.h (module 'internet'): uint8_t ns3::TcpHeader::GetOptionLength() const [member function]
+    cls.add_method('GetOptionLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## tcp-header.h (module 'internet'): ns3::SequenceNumber32 ns3::TcpHeader::GetSequenceNumber() const [member function]
     cls.add_method('GetSequenceNumber', 
                    'ns3::SequenceNumber32', 
@@ -8980,6 +9675,48 @@
                    [param('uint16_t', 'windowSize')])
     return
 
+def register_Ns3TcpNewReno_methods(root_module, cls):
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno::TcpNewReno() [constructor]
+    cls.add_constructor([])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpNewReno::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): std::string ns3::TcpNewReno::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpNewReno::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpNewReno::IncreaseWindow(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('IncreaseWindow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpNewReno::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpNewReno::SlowStart(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('SlowStart', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpOption_methods(root_module, cls):
     ## tcp-option.h (module 'internet'): ns3::TcpOption::TcpOption(ns3::TcpOption const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpOption const &', 'arg0')])
@@ -9137,20 +9874,6 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_availBytes [variable]
-    cls.add_instance_attribute('m_availBytes', 'uint32_t', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_data [variable]
-    cls.add_instance_attribute('m_data', 'std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_finSeq [variable]
-    cls.add_instance_attribute('m_finSeq', 'ns3::SequenceNumber32', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_gotFin [variable]
-    cls.add_instance_attribute('m_gotFin', 'bool', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_maxBuffer [variable]
-    cls.add_instance_attribute('m_maxBuffer', 'uint32_t', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_nextRxSeq [variable]
-    cls.add_instance_attribute('m_nextRxSeq', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_size [variable]
-    cls.add_instance_attribute('m_size', 'uint32_t', is_const=False)
     return
 
 def register_Ns3TcpSocket_methods(root_module, cls):
@@ -9165,16 +9888,16 @@
                    is_static=True)
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStateName [variable]
     cls.add_static_attribute('TcpStateName', 'char const * [ 11 ] const', is_const=True)
-    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetConnCount() const [member function]
-    cls.add_method('GetConnCount', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): ns3::Time ns3::TcpSocket::GetConnTimeout() const [member function]
     cls.add_method('GetConnTimeout', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetDataRetries() const [member function]
+    cls.add_method('GetDataRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetDelAckMaxCount() const [member function]
     cls.add_method('GetDelAckMaxCount', 
                    'uint32_t', 
@@ -9215,21 +9938,26 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetSynRetries() const [member function]
+    cls.add_method('GetSynRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): bool ns3::TcpSocket::GetTcpNoDelay() const [member function]
     cls.add_method('GetTcpNoDelay', 
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetConnCount(uint32_t count) [member function]
-    cls.add_method('SetConnCount', 
-                   'void', 
-                   [param('uint32_t', 'count')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetConnTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetConnTimeout', 
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetDataRetries(uint32_t retries) [member function]
+    cls.add_method('SetDataRetries', 
+                   'void', 
+                   [param('uint32_t', 'retries')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetDelAckMaxCount(uint32_t count) [member function]
     cls.add_method('SetDelAckMaxCount', 
                    'void', 
@@ -9270,6 +9998,11 @@
                    'void', 
                    [param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetSynRetries(uint32_t count) [member function]
+    cls.add_method('SetSynRetries', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetTcpNoDelay(bool noDelay) [member function]
     cls.add_method('SetTcpNoDelay', 
                    'void', 
@@ -9322,6 +10055,11 @@
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TypeId ns3::TcpSocketBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetMinRto() const [member function]
     cls.add_method('GetMinRto', 
                    'ns3::Time', 
@@ -9332,6 +10070,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): int ns3::TcpSocketBase::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -9396,6 +10139,10 @@
     cls.add_method('SetClockGranularity', 
                    'void', 
                    [param('ns3::Time', 'clockGranularity')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetCongestionControlAlgorithm(ns3::Ptr<ns3::TcpCongestionOps> algo) [member function]
+    cls.add_method('SetCongestionControlAlgorithm', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpCongestionOps >', 'algo')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetMinRto(ns3::Time minRto) [member function]
     cls.add_method('SetMinRto', 
                    'void', 
@@ -9425,6 +10172,24 @@
                    'int', 
                    [], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateCongState(ns3::TcpSocketState::TcpCongState_t oldValue, ns3::TcpSocketState::TcpCongState_t newValue) [member function]
+    cls.add_method('UpdateCongState', 
+                   'void', 
+                   [param('ns3::TcpSocketState::TcpCongState_t', 'oldValue'), param('ns3::TcpSocketState::TcpCongState_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateCwnd(uint32_t oldValue, uint32_t newValue) [member function]
+    cls.add_method('UpdateCwnd', 
+                   'void', 
+                   [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateSsThresh(uint32_t oldValue, uint32_t newValue) [member function]
+    cls.add_method('UpdateSsThresh', 
+                   'void', 
+                   [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_cWndTrace [variable]
+    cls.add_instance_attribute('m_cWndTrace', 'ns3::TracedCallback< unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_congStateTrace [variable]
+    cls.add_instance_attribute('m_congStateTrace', 'ns3::TracedCallback< ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_ssThTrace [variable]
+    cls.add_instance_attribute('m_ssThTrace', 'ns3::TracedCallback< unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptionTimestamp(ns3::TcpHeader & header) [member function]
     cls.add_method('AddOptionTimestamp', 
                    'void', 
@@ -9440,16 +10205,16 @@
                    'void', 
                    [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() const [member function]
     cls.add_method('AdvertisedWindowSize', 
                    'uint16_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::AvailableWindow() [member function]
+                   is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::AvailableWindow() const [member function]
     cls.add_method('AvailableWindow', 
                    'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::BytesInFlight() [member function]
     cls.add_method('BytesInFlight', 
                    'uint32_t', 
@@ -9474,7 +10239,7 @@
     cls.add_method('CompleteFork', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
-                   visibility='protected')
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ConnectionSucceeded() [member function]
     cls.add_method('ConnectionSucceeded', 
                    'void', 
@@ -9525,11 +10290,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & tcpHeader, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'tcpHeader'), param('uint32_t', 'count')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
@@ -9539,7 +10299,7 @@
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
     cls.add_method('ForwardIcmp', 
                    'void', 
@@ -9565,16 +10325,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetConnCount() const [member function]
-    cls.add_method('GetConnCount', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetConnTimeout() const [member function]
     cls.add_method('GetConnTimeout', 
                    'ns3::Time', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetDataRetries() const [member function]
+    cls.add_method('GetDataRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetDelAckMaxCount() const [member function]
     cls.add_method('GetDelAckMaxCount', 
                    'uint32_t', 
@@ -9615,25 +10375,25 @@
                    'uint32_t', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetSynRetries() const [member function]
+    cls.add_method('GetSynRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::GetTcpNoDelay() const [member function]
     cls.add_method('GetTcpNoDelay', 
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::InitializeCwnd() [member function]
-    cls.add_method('InitializeCwnd', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LastAckTimeout() [member function]
     cls.add_method('LastAckTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq, bool resetRTO) [member function]
     cls.add_method('NewAck', 
                    'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
+                   [param('ns3::SequenceNumber32 const &', 'seq'), param('bool', 'resetRTO')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::OutOfRange(ns3::SequenceNumber32 head, ns3::SequenceNumber32 tail) const [member function]
     cls.add_method('OutOfRange', 
@@ -9670,10 +10430,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionTimestamp(ns3::Ptr<const ns3::TcpOption> const option) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionTimestamp(ns3::Ptr<const ns3::TcpOption> const option, ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('ProcessOptionTimestamp', 
                    'void', 
-                   [param('ns3::Ptr< ns3::TcpOption const > const', 'option')], 
+                   [param('ns3::Ptr< ns3::TcpOption const > const', 'option'), param('ns3::SequenceNumber32 const &', 'seq')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionWScale(ns3::Ptr<const ns3::TcpOption> const option) [member function]
     cls.add_method('ProcessOptionWScale', 
@@ -9700,11 +10460,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & tcpHeader) [member function]
-    cls.add_method('ReadOptions', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedAck', 
                    'void', 
@@ -9720,11 +10475,11 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): static uint32_t ns3::TcpSocketBase::SafeSubtraction(uint32_t a, uint32_t b) [member function]
+    cls.add_method('SafeSubtraction', 
+                   'uint32_t', 
+                   [param('uint32_t', 'a'), param('uint32_t', 'b')], 
+                   is_static=True, visibility='protected')
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::SendDataPacket(ns3::SequenceNumber32 seq, uint32_t maxSize, bool withAck) [member function]
     cls.add_method('SendDataPacket', 
                    'uint32_t', 
@@ -9734,7 +10489,7 @@
     cls.add_method('SendEmptyPacket', 
                    'void', 
                    [param('uint8_t', 'flags')], 
-                   visibility='protected')
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::SendPendingData(bool withAck=false) [member function]
     cls.add_method('SendPendingData', 
                    'bool', 
@@ -9750,16 +10505,16 @@
                    'bool', 
                    [param('bool', 'allowBroadcast')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetConnCount(uint32_t count) [member function]
-    cls.add_method('SetConnCount', 
-                   'void', 
-                   [param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetConnTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetConnTimeout', 
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetDataRetries(uint32_t retries) [member function]
+    cls.add_method('SetDataRetries', 
+                   'void', 
+                   [param('uint32_t', 'retries')], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetDelAckMaxCount(uint32_t count) [member function]
     cls.add_method('SetDelAckMaxCount', 
                    'void', 
@@ -9800,6 +10555,11 @@
                    'void', 
                    [param('uint32_t', 'size')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetSynRetries(uint32_t count) [member function]
+    cls.add_method('SetSynRetries', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetTcpNoDelay(bool noDelay) [member function]
     cls.add_method('SetTcpNoDelay', 
                    'void', 
@@ -9825,21 +10585,26 @@
                    'void', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::UnAckDataCount() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::UnAckDataCount() const [member function]
     cls.add_method('UnAckDataCount', 
                    'uint32_t', 
                    [], 
+                   is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateRttHistory(ns3::SequenceNumber32 const & seq, uint32_t sz, bool isRetransmission) [member function]
+    cls.add_method('UpdateRttHistory', 
+                   'void', 
+                   [param('ns3::SequenceNumber32 const &', 'seq'), param('uint32_t', 'sz'), param('bool', 'isRetransmission')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateWindowSize(ns3::TcpHeader const & header) [member function]
     cls.add_method('UpdateWindowSize', 
                    'void', 
                    [param('ns3::TcpHeader const &', 'header')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::Window() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::Window() const [member function]
     cls.add_method('Window', 
                    'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpSocketFactory_methods(root_module, cls):
@@ -9854,36 +10619,35 @@
                    is_static=True)
     return
 
-def register_Ns3TcpTahoe_methods(root_module, cls):
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe() [constructor]
+def register_Ns3TcpSocketState_methods(root_module, cls):
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpSocketState() [constructor]
     cls.add_constructor([])
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe(ns3::TcpTahoe const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpTahoe const &', 'sock')])
-    ## tcp-tahoe.h (module 'internet'): static ns3::TypeId ns3::TcpTahoe::GetTypeId() [member function]
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpSocketState(ns3::TcpSocketState const & other) [copy constructor]
+    cls.add_constructor([param('ns3::TcpSocketState const &', 'other')])
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketState::GetCwndInSegments() const [member function]
+    cls.add_method('GetCwndInSegments', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## tcp-socket-base.h (module 'internet'): static ns3::TypeId ns3::TcpSocketState::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpTahoe::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpCongStateName [variable]
+    cls.add_static_attribute('TcpCongStateName', 'char const * [ 5 ] const', is_const=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_cWnd [variable]
+    cls.add_instance_attribute('m_cWnd', 'ns3::TracedValue< unsigned int >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_congState [variable]
+    cls.add_instance_attribute('m_congState', 'ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_initialCWnd [variable]
+    cls.add_instance_attribute('m_initialCWnd', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_initialSsThresh [variable]
+    cls.add_instance_attribute('m_initialSsThresh', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_segmentSize [variable]
+    cls.add_instance_attribute('m_segmentSize', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_ssThresh [variable]
+    cls.add_instance_attribute('m_ssThresh', 'ns3::TracedValue< unsigned int >', is_const=False)
     return
 
 def register_Ns3TcpTxBuffer_methods(root_module, cls):
@@ -9953,41 +10717,26 @@
     cls.add_constructor([])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood(ns3::TcpWestwood const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpWestwood const &', 'sock')])
+    ## tcp-westwood.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpWestwood::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): static ns3::TypeId ns3::TcpWestwood::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
+    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t packetsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::EstimateRtt(ns3::TcpHeader const & header) [member function]
-    cls.add_method('EstimateRtt', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'header')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpWestwood::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
-    cls.add_method('ReceivedAck', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'packetsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
     return
 
 def register_Ns3Time_methods(root_module, cls):
@@ -10249,6 +10998,74 @@
                    [param('ns3::Time const &', 'v')])
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -10746,9 +11563,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -10802,10 +11619,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -10814,10 +11631,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3ArpHeader_methods(root_module, cls):
@@ -10923,10 +11740,10 @@
     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')])
-    ## arp-l3-protocol.h (module 'internet'): bool ns3::ArpL3Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address destination, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::ArpCache> cache, ns3::Address * hardwareDestination) [member function]
+    ## arp-l3-protocol.h (module 'internet'): bool ns3::ArpL3Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & ipHeader, ns3::Ipv4Address destination, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::ArpCache> cache, ns3::Address * hardwareDestination) [member function]
     cls.add_method('Lookup', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'ipHeader'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
     ## arp-l3-protocol.h (module 'internet'): int64_t ns3::ArpL3Protocol::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -11159,65 +11976,6 @@
                    is_static=True)
     return
 
-def register_Ns3CoDelQueue_methods(root_module, cls):
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue::CoDelQueue(ns3::CoDelQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CoDelQueue const &', 'arg0')])
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue::CoDelQueue() [constructor]
-    cls.add_constructor([])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropCount() [member function]
-    cls.add_method('GetDropCount', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropNext() [member function]
-    cls.add_method('GetDropNext', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropOverLimit() [member function]
-    cls.add_method('GetDropOverLimit', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Time ns3::CoDelQueue::GetInterval() [member function]
-    cls.add_method('GetInterval', 
-                   'ns3::Time', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Queue::QueueMode ns3::CoDelQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetQueueSize() [member function]
-    cls.add_method('GetQueueSize', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Time ns3::CoDelQueue::GetTarget() [member function]
-    cls.add_method('GetTarget', 
-                   'ns3::Time', 
-                   [])
-    ## codel-queue.h (module 'internet'): static ns3::TypeId ns3::CoDelQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## codel-queue.h (module 'internet'): void ns3::CoDelQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## codel-queue.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::CoDelQueue::DoDequeue() [member function]
-    cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## codel-queue.h (module 'internet'): bool ns3::CoDelQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
-    cls.add_method('DoEnqueue', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
-                   visibility='private', is_virtual=True)
-    ## codel-queue.h (module 'internet'): ns3::Ptr<ns3::Packet const> ns3::CoDelQueue::DoPeek() const [member function]
-    cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
 def register_Ns3ConstantRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -11944,6 +12702,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -11959,6 +12722,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -11974,6 +12742,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -12024,6 +12802,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -12150,10 +12933,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -12178,6 +12961,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -12267,6 +13054,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -12282,6 +13074,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -12309,7 +13106,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -12368,6 +13171,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -12489,6 +13297,28 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter::Ipv4PacketFilter(ns3::Ipv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter::Ipv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::Ipv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): bool ns3::Ipv4PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::Ipv4PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Ipv4RawSocketFactory_methods(root_module, cls):
     ## ipv4-raw-socket-factory.h (module 'internet'): ns3::Ipv4RawSocketFactory::Ipv4RawSocketFactory() [constructor]
     cls.add_constructor([])
@@ -12550,6 +13380,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ipv4-raw-socket-impl.h (module 'internet'): int ns3::Ipv4RawSocketImpl::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-raw-socket-impl.h (module 'internet'): uint32_t ns3::Ipv4RawSocketImpl::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -12917,6 +13752,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -12927,6 +13767,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -12947,6 +13797,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -12957,6 +13817,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -13322,10 +14187,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): void ns3::Ipv6ExtensionFragment::GetFragments(ns3::Ptr<ns3::Packet> packet, uint32_t fragmentSize, std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > & listFragments) [member function]
+    ## ipv6-extension.h (module 'internet'): void ns3::Ipv6ExtensionFragment::GetFragments(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header ipv6Header, uint32_t fragmentSize, std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > & listFragments) [member function]
     cls.add_method('GetFragments', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('uint32_t', 'fragmentSize'), param('std::list< ns3::Ptr< ns3::Packet > > &', 'listFragments')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'ipv6Header'), param('uint32_t', 'fragmentSize'), param('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > > &', 'listFragments')])
     ## ipv6-extension.h (module 'internet'): static ns3::TypeId ns3::Ipv6ExtensionFragment::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -13632,6 +14497,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsSolicitedMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsSolicitedMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -13645,10 +14515,10 @@
     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]
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'hdr'), param('ns3::Ipv6Address', 'dest')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
     cls.add_method('SetBaseReachableTime', 
                    'void', 
@@ -13693,6 +14563,10 @@
     cls.add_method('SetState', 
                    'void', 
                    [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -13721,16 +14595,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -13754,7 +14645,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -13903,6 +14795,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -13993,6 +14911,28 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter::Ipv6PacketFilter(ns3::Ipv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter::Ipv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::Ipv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): bool ns3::Ipv6PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::Ipv6PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, 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')])
@@ -14475,10 +15415,10 @@
     cls.add_constructor([param('ns3::NdiscCache::Entry const &', 'arg0')])
     ## ndisc-cache.h (module 'internet'): ns3::NdiscCache::Entry::Entry(ns3::NdiscCache * nd) [constructor]
     cls.add_constructor([param('ns3::NdiscCache *', 'nd')])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::AddWaitingPacket(ns3::Ptr<ns3::Packet> p) [member function]
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::AddWaitingPacket(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> p) [member function]
     cls.add_method('AddWaitingPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 'p')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::ClearWaitingPacket() [member function]
     cls.add_method('ClearWaitingPacket', 
                    'void', 
@@ -14519,6 +15459,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ndisc-cache.h (module 'internet'): bool ns3::NdiscCache::Entry::IsPermanent() const [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ndisc-cache.h (module 'internet'): bool ns3::NdiscCache::Entry::IsProbe() const [member function]
     cls.add_method('IsProbe', 
                    'bool', 
@@ -14543,25 +15488,29 @@
     cls.add_method('MarkDelay', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkIncomplete(ns3::Ptr<ns3::Packet> p) [member function]
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkIncomplete(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> p) [member function]
     cls.add_method('MarkIncomplete', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 'p')])
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkProbe() [member function]
     cls.add_method('MarkProbe', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > ns3::NdiscCache::Entry::MarkReachable(ns3::Address mac) [member function]
+    ## ndisc-cache.h (module 'internet'): std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > ns3::NdiscCache::Entry::MarkReachable(ns3::Address mac) [member function]
     cls.add_method('MarkReachable', 
-                   'std::list< ns3::Ptr< ns3::Packet > >', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 
                    [param('ns3::Address', 'mac')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkReachable() [member function]
     cls.add_method('MarkReachable', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > ns3::NdiscCache::Entry::MarkStale(ns3::Address mac) [member function]
+    ## ndisc-cache.h (module 'internet'): std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > ns3::NdiscCache::Entry::MarkStale(ns3::Address mac) [member function]
     cls.add_method('MarkStale', 
-                   'std::list< ns3::Ptr< ns3::Packet > >', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 
                    [param('ns3::Address', 'mac')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkStale() [member function]
     cls.add_method('MarkStale', 
@@ -14610,7 +15559,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -14737,6 +15686,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -14816,6 +15851,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -15190,31 +16230,174 @@
                    is_virtual=True)
     return
 
-def register_Ns3Probe_methods(root_module, cls):
-    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
-    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+def register_Ns3PfifoFastIpv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter(ns3::PfifoFastIpv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastIpv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::PfifoFastIpv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::PfifoFastIpv4PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3PfifoFastIpv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter(ns3::PfifoFastIpv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastIpv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::PfifoFastIpv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::PfifoFastIpv6PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Rip_methods(root_module, cls):
+    ## rip.h (module 'internet'): ns3::Rip::Rip(ns3::Rip const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Rip const &', 'arg0')])
+    ## rip.h (module 'internet'): ns3::Rip::Rip() [constructor]
     cls.add_constructor([])
-    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
-    cls.add_method('ConnectByObject', 
-                   'bool', 
-                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
-    cls.add_method('ConnectByPath', 
+    ## rip.h (module 'internet'): void ns3::Rip::AddDefaultRouteTo(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
+    cls.add_method('AddDefaultRouteTo', 
                    'void', 
-                   [param('std::string', 'path')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+                   [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): int64_t ns3::Rip::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## rip.h (module 'internet'): std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > ns3::Rip::GetInterfaceExclusions() const [member function]
+    cls.add_method('GetInterfaceExclusions', 
+                   'std::set< unsigned int >', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): uint8_t ns3::Rip::GetInterfaceMetric(uint32_t interface) const [member function]
+    cls.add_method('GetInterfaceMetric', 
+                   'uint8_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True)
+    ## rip.h (module 'internet'): static ns3::TypeId ns3::Rip::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
-    cls.add_method('IsEnabled', 
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::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)
+    ## rip.h (module 'internet'): bool ns3::Rip::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,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::Ipv4Header&,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::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header 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::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Rip::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::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')])
+    ## rip.h (module 'internet'): void ns3::Rip::SetInterfaceMetric(uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    ## rip.h (module 'internet'): void ns3::Rip::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_const=True, is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3RipNg_methods(root_module, cls):
@@ -15315,44 +16498,83 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3StringChecker_methods(root_module, cls):
-    ## string.h (module 'core'): ns3::StringChecker::StringChecker() [constructor]
+def register_Ns3TcpHighSpeed_methods(root_module, cls):
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed() [constructor]
     cls.add_constructor([])
-    ## string.h (module 'core'): ns3::StringChecker::StringChecker(ns3::StringChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StringChecker const &', 'arg0')])
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed(ns3::TcpHighSpeed const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHighSpeed const &', 'sock')])
+    ## tcp-highspeed.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHighSpeed::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): std::string ns3::TcpHighSpeed::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): uint32_t ns3::TcpHighSpeed::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): static ns3::TypeId ns3::TcpHighSpeed::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): static uint32_t ns3::TcpHighSpeed::TableLookupA(uint32_t w) [member function]
+    cls.add_method('TableLookupA', 
+                   'uint32_t', 
+                   [param('uint32_t', 'w')], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): static double ns3::TcpHighSpeed::TableLookupB(uint32_t w) [member function]
+    cls.add_method('TableLookupB', 
+                   'double', 
+                   [param('uint32_t', 'w')], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): void ns3::TcpHighSpeed::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3StringValue_methods(root_module, cls):
-    ## string.h (module 'core'): ns3::StringValue::StringValue() [constructor]
+def register_Ns3TcpHybla_methods(root_module, cls):
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla() [constructor]
     cls.add_constructor([])
-    ## string.h (module 'core'): ns3::StringValue::StringValue(ns3::StringValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StringValue const &', 'arg0')])
-    ## string.h (module 'core'): ns3::StringValue::StringValue(std::string const & value) [constructor]
-    cls.add_constructor([param('std::string const &', 'value')])
-    ## string.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::StringValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla(ns3::TcpHybla const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHybla const &', 'sock')])
+    ## tcp-hybla.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHybla::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## string.h (module 'core'): bool ns3::StringValue::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)
-    ## string.h (module 'core'): std::string ns3::StringValue::Get() const [member function]
-    cls.add_method('Get', 
+    ## tcp-hybla.h (module 'internet'): std::string ns3::TcpHybla::GetName() const [member function]
+    cls.add_method('GetName', 
                    'std::string', 
                    [], 
-                   is_const=True)
-    ## string.h (module 'core'): std::string ns3::StringValue::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)
-    ## string.h (module 'core'): void ns3::StringValue::Set(std::string const & value) [member function]
-    cls.add_method('Set', 
+    ## tcp-hybla.h (module 'internet'): static ns3::TypeId ns3::TcpHybla::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-hybla.h (module 'internet'): void ns3::TcpHybla::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
+    ## tcp-hybla.h (module 'internet'): void ns3::TcpHybla::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
                    'void', 
-                   [param('std::string const &', 'value')])
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    ## tcp-hybla.h (module 'internet'): uint32_t ns3::TcpHybla::SlowStart(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('SlowStart', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
@@ -15373,10 +16595,10 @@
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
                    [])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId socketTypeId) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId congestionTypeId) [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
-                   [param('ns3::TypeId', 'socketTypeId')])
+                   [param('ns3::TypeId', 'congestionTypeId')])
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ipv4EndPoint * ns3::TcpL4Protocol::Allocate() [member function]
     cls.add_method('Allocate', 
                    'ns3::Ipv4EndPoint *', 
@@ -15505,122 +16727,6 @@
                    visibility='protected')
     return
 
-def register_Ns3TcpNewReno_methods(root_module, cls):
-    ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno() [constructor]
-    cls.add_constructor([])
-    ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
-    ## tcp-newreno.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpNewReno::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3TcpReno_methods(root_module, cls):
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno() [constructor]
-    cls.add_constructor([])
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno(ns3::TcpReno const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpReno const &', 'sock')])
-    ## tcp-reno.h (module 'internet'): static ns3::TypeId ns3::TcpReno::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpReno::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3TcpRfc793_methods(root_module, cls):
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793::TcpRfc793() [constructor]
-    cls.add_constructor([])
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793::TcpRfc793(ns3::TcpRfc793 const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpRfc793 const &', 'sock')])
-    ## tcp-rfc793.h (module 'internet'): static ns3::TypeId ns3::TcpRfc793::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpRfc793::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -15937,7 +17043,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16205,21 +17311,21 @@
     cls.add_method('DoDAD', 
                    'void', 
                    [param('ns3::Ipv6Address', 'target'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeEchoRequest(ns3::Ipv6Address src, ns3::Ipv6Address dst, uint16_t id, uint16_t seq, ns3::Ptr<ns3::Packet> data) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeEchoRequest(ns3::Ipv6Address src, ns3::Ipv6Address dst, uint16_t id, uint16_t seq, ns3::Ptr<ns3::Packet> data) [member function]
     cls.add_method('ForgeEchoRequest', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('uint16_t', 'id'), param('uint16_t', 'seq'), param('ns3::Ptr< ns3::Packet >', 'data')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeNA(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address * hardwareAddress, uint8_t flags) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeNA(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address * hardwareAddress, uint8_t flags) [member function]
     cls.add_method('ForgeNA', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address *', 'hardwareAddress'), param('uint8_t', 'flags')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeNS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address target, ns3::Address hardwareAddress) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeNS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address target, ns3::Address hardwareAddress) [member function]
     cls.add_method('ForgeNS', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'target'), param('ns3::Address', 'hardwareAddress')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeRS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address hardwareAddress) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeRS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address hardwareAddress) [member function]
     cls.add_method('ForgeRS', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address', 'hardwareAddress')])
     ## icmpv6-l4-protocol.h (module 'internet'): static void ns3::Icmpv6L4Protocol::FunctionDadTimeout(ns3::Ptr<ns3::Icmpv6L4Protocol> icmpv6, ns3::Ipv6Interface * interface, ns3::Ipv6Address addr) [member function]
     cls.add_method('FunctionDadTimeout', 
@@ -16255,10 +17361,10 @@
     cls.add_method('Lookup', 
                    'bool', 
                    [param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
-    ## icmpv6-l4-protocol.h (module 'internet'): bool ns3::Icmpv6L4Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dst, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::NdiscCache> cache, ns3::Address * hardwareDestination) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): bool ns3::Icmpv6L4Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & ipHeader, ns3::Ipv6Address dst, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::NdiscCache> cache, ns3::Address * hardwareDestination) [member function]
     cls.add_method('Lookup', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'ipHeader'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::NotifyNewAggregate() [member function]
     cls.add_method('NotifyNewAggregate', 
                    'void', 
@@ -16730,7 +17836,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16862,6 +17968,90 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv4QueueDiscItem_methods(root_module, cls):
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4QueueDiscItem::Ipv4QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol, ns3::Ipv4Header const & header) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol'), param('ns3::Ipv4Header const &', 'header')])
+    ## ipv4-queue-disc-item.h (module 'internet'): uint32_t ns3::Ipv4QueueDiscItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4Header const & ns3::Ipv4QueueDiscItem::GetHeader() const [member function]
+    cls.add_method('GetHeader', 
+                   'ns3::Ipv4Header const &', 
+                   [], 
+                   is_const=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): void ns3::Ipv4QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): void ns3::Ipv4QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6QueueDiscItem_methods(root_module, cls):
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6QueueDiscItem::Ipv6QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol, ns3::Ipv6Header const & header) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol'), param('ns3::Ipv6Header const &', 'header')])
+    ## ipv6-queue-disc-item.h (module 'internet'): uint32_t ns3::Ipv6QueueDiscItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6Header const & ns3::Ipv6QueueDiscItem::GetHeader() const [member function]
+    cls.add_method('GetHeader', 
+                   'ns3::Ipv6Header const &', 
+                   [], 
+                   is_const=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): void ns3::Ipv6QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): void ns3::Ipv6QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
diff -Naur ns-3.24.1/src/internet/bindings/modulegen__gcc_LP64.py ns-3.25/src/internet/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/internet/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -199,19 +199,25 @@
     ## 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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv4 [class]
     module.add_class('PcapHelperForIpv4', allow_subclassing=True)
     ## internet-trace-helper.h (module 'internet'): ns3::PcapHelperForIpv6 [class]
     module.add_class('PcapHelperForIpv6', allow_subclassing=True)
+    ## rip-helper.h (module 'internet'): ns3::RipHelper [class]
+    module.add_class('RipHelper', parent=root_module['ns3::Ipv4RoutingHelper'])
     ## 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'])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry [class]
+    module.add_class('RipRoutingTableEntry', parent=root_module['ns3::Ipv4RoutingTableEntry'])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::Status_e [enumeration]
+    module.add_enum('Status_e', ['RIP_VALID', 'RIP_INVALID'], outer_class=root_module['ns3::RipRoutingTableEntry'])
     ## tcp-socket-base.h (module 'internet'): ns3::RttHistory [class]
     module.add_class('RttHistory')
     ## global-route-manager-impl.h (module 'internet'): ns3::SPFVertex [class]
@@ -238,8 +244,6 @@
     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')
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool> [class]
-    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['bool'])
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::SequenceNumber<unsigned int, int> > [class]
@@ -248,6 +252,8 @@
     root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'].implicitly_converts_to(root_module['ns3::SequenceNumber32'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocket::TcpStates_t> [class]
     module.add_class('TracedValue', template_parameters=['ns3::TcpSocket::TcpStates_t'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t> [class]
+    module.add_class('TracedValue', template_parameters=['ns3::TcpSocketState::TcpCongState_t'])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
     ## type-id.h (module 'core'): ns3::TypeId [class]
@@ -342,6 +348,8 @@
     module.add_class('Ipv6ExtensionRoutingHeader', parent=root_module['ns3::Ipv6ExtensionHeader'])
     ## ipv6-header.h (module 'internet'): ns3::Ipv6Header [class]
     module.add_class('Ipv6Header', parent=root_module['ns3::Header'])
+    ## ipv6-header.h (module 'internet'): ns3::Ipv6Header::DscpType [enumeration]
+    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::Ipv6Header'])
     ## 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'])
     ## ipv6-list-routing-helper.h (module 'internet'): ns3::Ipv6ListRoutingHelper [class]
@@ -364,20 +372,34 @@
     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'])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter [class]
+    module.add_class('PacketFilter', import_from_module='ns.traffic_control', parent=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'])
     ## queue.h (module 'network'): ns3::Queue [class]
     module.add_class('Queue', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## queue.h (module 'network'): ns3::Queue::QueueMode [enumeration]
     module.add_enum('QueueMode', ['QUEUE_MODE_PACKETS', 'QUEUE_MODE_BYTES'], outer_class=root_module['ns3::Queue'], import_from_module='ns.network')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc [class]
+    module.add_class('QueueDisc', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode [enumeration]
+    module.add_enum('WakeMode', ['WAKE_ROOT', 'WAKE_CHILD'], outer_class=root_module['ns3::QueueDisc'], import_from_module='ns.traffic-control')
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', import_from_module='ns.traffic_control', 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'])
+    ## rip-header.h (module 'internet'): ns3::RipHeader [class]
+    module.add_class('RipHeader', parent=root_module['ns3::Header'])
+    ## rip-header.h (module 'internet'): ns3::RipHeader::Command_e [enumeration]
+    module.add_enum('Command_e', ['REQUEST', 'RESPONSE'], outer_class=root_module['ns3::RipHeader'])
     ## 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'])
+    ## rip-header.h (module 'internet'): ns3::RipRte [class]
+    module.add_class('RipRte', 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]
@@ -404,12 +426,16 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv6MulticastRoute', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv6MulticastRoute>'], 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::Ipv6Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6Route> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::Ipv6Route', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Ipv6Route>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## socket.h (module 'network'): ns3::Socket [class]
@@ -418,6 +444,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -432,10 +460,14 @@
     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'])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps [class]
+    module.add_class('TcpCongestionOps', parent=root_module['ns3::Object'])
     ## tcp-header.h (module 'internet'): ns3::TcpHeader [class]
     module.add_class('TcpHeader', parent=root_module['ns3::Header'])
     ## tcp-header.h (module 'internet'): ns3::TcpHeader::Flags_t [enumeration]
     module.add_enum('Flags_t', ['NONE', 'FIN', 'SYN', 'RST', 'PSH', 'ACK', 'URG', 'ECE', 'CWR'], outer_class=root_module['ns3::TcpHeader'])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno [class]
+    module.add_class('TcpNewReno', parent=root_module['ns3::TcpCongestionOps'])
     ## tcp-option.h (module 'internet'): ns3::TcpOption [class]
     module.add_class('TcpOption', parent=root_module['ns3::Object'])
     ## tcp-option.h (module 'internet'): ns3::TcpOption::Kind [enumeration]
@@ -452,12 +484,14 @@
     module.add_class('TcpSocketBase', parent=root_module['ns3::TcpSocket'])
     ## tcp-socket-factory.h (module 'internet'): ns3::TcpSocketFactory [class]
     module.add_class('TcpSocketFactory', parent=root_module['ns3::SocketFactory'])
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe [class]
-    module.add_class('TcpTahoe', parent=root_module['ns3::TcpSocketBase'])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState [class]
+    module.add_class('TcpSocketState', parent=root_module['ns3::Object'])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpCongState_t [enumeration]
+    module.add_enum('TcpCongState_t', ['CA_OPEN', 'CA_DISORDER', 'CA_CWR', 'CA_RECOVERY', 'CA_LOSS', 'CA_LAST_STATE'], outer_class=root_module['ns3::TcpSocketState'])
     ## tcp-tx-buffer.h (module 'internet'): ns3::TcpTxBuffer [class]
     module.add_class('TcpTxBuffer', parent=root_module['ns3::Object'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood [class]
-    module.add_class('TcpWestwood', parent=root_module['ns3::TcpSocketBase'])
+    module.add_class('TcpWestwood', parent=root_module['ns3::TcpNewReno'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::ProtocolType [enumeration]
     module.add_enum('ProtocolType', ['WESTWOOD', 'WESTWOODPLUS'], outer_class=root_module['ns3::TcpWestwood'])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::FilterType [enumeration]
@@ -474,6 +508,8 @@
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['ns3::Time'])
     ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
     root_module['ns3::TracedValue< ns3::Time >'].implicitly_converts_to(root_module['ns3::Time'])
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer [class]
+    module.add_class('TrafficControlLayer', import_from_module='ns.traffic_control', parent=root_module['ns3::Object'])
     ## trailer.h (module 'network'): ns3::Trailer [class]
     module.add_class('Trailer', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
@@ -520,8 +556,6 @@
     module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## channel.h (module 'network'): ns3::Channel [class]
     module.add_class('Channel', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue [class]
-    module.add_class('CoDelQueue', parent=root_module['ns3::Queue'])
     ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
     module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## data-collection-object.h (module 'stats'): ns3::DataCollectionObject [class]
@@ -576,6 +610,8 @@
     module.add_class('Ipv4MaskValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-route.h (module 'internet'): ns3::Ipv4MulticastRoute [class]
     module.add_class('Ipv4MulticastRoute', parent=root_module['ns3::SimpleRefCount< ns3::Ipv4MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4MulticastRoute> >'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter [class]
+    module.add_class('Ipv4PacketFilter', parent=root_module['ns3::PacketFilter'])
     ## ipv4-raw-socket-factory.h (module 'internet'): ns3::Ipv4RawSocketFactory [class]
     module.add_class('Ipv4RawSocketFactory', parent=root_module['ns3::SocketFactory'])
     ## ipv4-raw-socket-impl.h (module 'internet'): ns3::Ipv4RawSocketImpl [class]
@@ -628,6 +664,8 @@
     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-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter [class]
+    module.add_class('Ipv6PacketFilter', parent=root_module['ns3::PacketFilter'])
     ## ipv6-pmtu-cache.h (module 'internet'): ns3::Ipv6PmtuCache [class]
     module.add_class('Ipv6PmtuCache', parent=root_module['ns3::Object'])
     ## ipv6-address.h (module 'network'): ns3::Ipv6PrefixChecker [class]
@@ -656,6 +694,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -672,24 +714,30 @@
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter [class]
+    module.add_class('PfifoFastIpv4PacketFilter', parent=root_module['ns3::Ipv4PacketFilter'])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::Ipv4TrafficClassMode [enumeration]
+    module.add_enum('Ipv4TrafficClassMode', ['PF_MODE_TOS', 'PF_MODE_DSCP'], outer_class=root_module['ns3::PfifoFastIpv4PacketFilter'])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter [class]
+    module.add_class('PfifoFastIpv6PacketFilter', parent=root_module['ns3::Ipv6PacketFilter'])
     ## probe.h (module 'stats'): ns3::Probe [class]
     module.add_class('Probe', import_from_module='ns.stats', parent=root_module['ns3::DataCollectionObject'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    ## rip.h (module 'internet'): ns3::Rip [class]
+    module.add_class('Rip', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    ## rip.h (module 'internet'): ns3::Rip::SplitHorizonType_e [enumeration]
+    module.add_enum('SplitHorizonType_e', ['NO_SPLIT_HORIZON', 'SPLIT_HORIZON', 'POISON_REVERSE'], outer_class=root_module['ns3::Rip'])
     ## 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'])
-    ## string.h (module 'core'): ns3::StringChecker [class]
-    module.add_class('StringChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
-    ## string.h (module 'core'): ns3::StringValue [class]
-    module.add_class('StringValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed [class]
+    module.add_class('TcpHighSpeed', parent=root_module['ns3::TcpNewReno'])
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla [class]
+    module.add_class('TcpHybla', parent=root_module['ns3::TcpNewReno'])
     ## 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]
-    module.add_class('TcpNewReno', parent=root_module['ns3::TcpSocketBase'])
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno [class]
-    module.add_class('TcpReno', parent=root_module['ns3::TcpSocketBase'])
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793 [class]
-    module.add_class('TcpRfc793', parent=root_module['ns3::TcpSocketBase'])
     ## 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]
@@ -726,13 +774,21 @@
     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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', import_from_module='ns.traffic_control', parent=root_module['ns3::QueueItem'])
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4QueueDiscItem [class]
+    module.add_class('Ipv4QueueDiscItem', parent=root_module['ns3::QueueDiscItem'])
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6QueueDiscItem [class]
+    module.add_class('Ipv6QueueDiscItem', parent=root_module['ns3::QueueDiscItem'])
     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::RipRte >', 'ns3::RipRte', container_type=u'list')
     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::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 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::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', container_type=u'list')
     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*')
@@ -749,6 +805,9 @@
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >', u'ns3::SequenceNumber8')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >*', u'ns3::SequenceNumber8*')
     typehandlers.add_type_alias(u'ns3::SequenceNumber< unsigned char, signed char >&', u'ns3::SequenceNumber8&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) *', u'ns3::TcpCongStatesTracedValueCallback')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) **', u'ns3::TcpCongStatesTracedValueCallback*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t ) *&', u'ns3::TcpCongStatesTracedValueCallback&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -918,8 +977,10 @@
     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_Ns3RipHelper_methods(root_module, root_module['ns3::RipHelper'])
     register_Ns3RipNgHelper_methods(root_module, root_module['ns3::RipNgHelper'])
     register_Ns3RipNgRoutingTableEntry_methods(root_module, root_module['ns3::RipNgRoutingTableEntry'])
+    register_Ns3RipRoutingTableEntry_methods(root_module, root_module['ns3::RipRoutingTableEntry'])
     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'])
@@ -930,10 +991,10 @@
     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__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
     register_Ns3TracedValue__Ns3SequenceNumber__lt__unsigned_int__int__gt___methods(root_module, root_module['ns3::TracedValue< ns3::SequenceNumber<unsigned int, int> >'])
     register_Ns3TracedValue__Ns3TcpSocketTcpStates_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocket::TcpStates_t >'])
+    register_Ns3TracedValue__Ns3TcpSocketStateTcpCongState_t_methods(root_module, root_module['ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t >'])
     register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
     register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
@@ -979,11 +1040,16 @@
     register_Ns3Ipv6PacketInfoTag_methods(root_module, root_module['ns3::Ipv6PacketInfoTag'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
+    register_Ns3PacketFilter_methods(root_module, root_module['ns3::PacketFilter'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
     register_Ns3Queue_methods(root_module, root_module['ns3::Queue'])
+    register_Ns3QueueDisc_methods(root_module, root_module['ns3::QueueDisc'])
+    register_Ns3QueueDiscClass_methods(root_module, root_module['ns3::QueueDiscClass'])
     register_Ns3RandomVariableStream_methods(root_module, root_module['ns3::RandomVariableStream'])
+    register_Ns3RipHeader_methods(root_module, root_module['ns3::RipHeader'])
     register_Ns3RipNgHeader_methods(root_module, root_module['ns3::RipNgHeader'])
     register_Ns3RipNgRte_methods(root_module, root_module['ns3::RipNgRte'])
+    register_Ns3RipRte_methods(root_module, root_module['ns3::RipRte'])
     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'])
@@ -997,9 +1063,11 @@
     register_Ns3SimpleRefCount__Ns3Ipv4Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv4Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv4Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv4Route> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6MulticastRoute_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6MulticastRoute__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6MulticastRoute, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6MulticastRoute> >'])
     register_Ns3SimpleRefCount__Ns3Ipv6Route_Ns3Empty_Ns3DefaultDeleter__lt__ns3Ipv6Route__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Ipv6Route, ns3::empty, ns3::DefaultDeleter<ns3::Ipv6Route> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
     register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
@@ -1009,19 +1077,22 @@
     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_Ns3TcpCongestionOps_methods(root_module, root_module['ns3::TcpCongestionOps'])
     register_Ns3TcpHeader_methods(root_module, root_module['ns3::TcpHeader'])
+    register_Ns3TcpNewReno_methods(root_module, root_module['ns3::TcpNewReno'])
     register_Ns3TcpOption_methods(root_module, root_module['ns3::TcpOption'])
     register_Ns3TcpOptionUnknown_methods(root_module, root_module['ns3::TcpOptionUnknown'])
     register_Ns3TcpRxBuffer_methods(root_module, root_module['ns3::TcpRxBuffer'])
     register_Ns3TcpSocket_methods(root_module, root_module['ns3::TcpSocket'])
     register_Ns3TcpSocketBase_methods(root_module, root_module['ns3::TcpSocketBase'])
     register_Ns3TcpSocketFactory_methods(root_module, root_module['ns3::TcpSocketFactory'])
-    register_Ns3TcpTahoe_methods(root_module, root_module['ns3::TcpTahoe'])
+    register_Ns3TcpSocketState_methods(root_module, root_module['ns3::TcpSocketState'])
     register_Ns3TcpTxBuffer_methods(root_module, root_module['ns3::TcpTxBuffer'])
     register_Ns3TcpWestwood_methods(root_module, root_module['ns3::TcpWestwood'])
     register_Ns3Time_methods(root_module, root_module['ns3::Time'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
+    register_Ns3TrafficControlLayer_methods(root_module, root_module['ns3::TrafficControlLayer'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
     register_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
     register_Ns3UdpHeader_methods(root_module, root_module['ns3::UdpHeader'])
@@ -1044,7 +1115,6 @@
     register_Ns3CallbackImplBase_methods(root_module, root_module['ns3::CallbackImplBase'])
     register_Ns3CallbackValue_methods(root_module, root_module['ns3::CallbackValue'])
     register_Ns3Channel_methods(root_module, root_module['ns3::Channel'])
-    register_Ns3CoDelQueue_methods(root_module, root_module['ns3::CoDelQueue'])
     register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
     register_Ns3DataCollectionObject_methods(root_module, root_module['ns3::DataCollectionObject'])
     register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
@@ -1070,6 +1140,7 @@
     register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
     register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
     register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
+    register_Ns3Ipv4PacketFilter_methods(root_module, root_module['ns3::Ipv4PacketFilter'])
     register_Ns3Ipv4RawSocketFactory_methods(root_module, root_module['ns3::Ipv4RawSocketFactory'])
     register_Ns3Ipv4RawSocketImpl_methods(root_module, root_module['ns3::Ipv4RawSocketImpl'])
     register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
@@ -1095,6 +1166,7 @@
     register_Ns3Ipv6Interface_methods(root_module, root_module['ns3::Ipv6Interface'])
     register_Ns3Ipv6L3Protocol_methods(root_module, root_module['ns3::Ipv6L3Protocol'])
     register_Ns3Ipv6MulticastRoute_methods(root_module, root_module['ns3::Ipv6MulticastRoute'])
+    register_Ns3Ipv6PacketFilter_methods(root_module, root_module['ns3::Ipv6PacketFilter'])
     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'])
@@ -1108,6 +1180,8 @@
     register_Ns3NdiscCache_methods(root_module, root_module['ns3::NdiscCache'])
     register_Ns3NdiscCacheEntry_methods(root_module, root_module['ns3::NdiscCache::Entry'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
@@ -1116,14 +1190,15 @@
     register_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3PfifoFastIpv4PacketFilter_methods(root_module, root_module['ns3::PfifoFastIpv4PacketFilter'])
+    register_Ns3PfifoFastIpv6PacketFilter_methods(root_module, root_module['ns3::PfifoFastIpv6PacketFilter'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3Rip_methods(root_module, root_module['ns3::Rip'])
     register_Ns3RipNg_methods(root_module, root_module['ns3::RipNg'])
-    register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
-    register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
+    register_Ns3TcpHighSpeed_methods(root_module, root_module['ns3::TcpHighSpeed'])
+    register_Ns3TcpHybla_methods(root_module, root_module['ns3::TcpHybla'])
     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'])
-    register_Ns3TcpRfc793_methods(root_module, root_module['ns3::TcpRfc793'])
     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'])
@@ -1142,6 +1217,9 @@
     register_Ns3Ipv6ListRouting_methods(root_module, root_module['ns3::Ipv6ListRouting'])
     register_Ns3Ipv6PacketProbe_methods(root_module, root_module['ns3::Ipv6PacketProbe'])
     register_Ns3LoopbackNetDevice_methods(root_module, root_module['ns3::LoopbackNetDevice'])
+    register_Ns3QueueDiscItem_methods(root_module, root_module['ns3::QueueDiscItem'])
+    register_Ns3Ipv4QueueDiscItem_methods(root_module, root_module['ns3::Ipv4QueueDiscItem'])
+    register_Ns3Ipv6QueueDiscItem_methods(root_module, root_module['ns3::Ipv6QueueDiscItem'])
     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'])
@@ -2406,6 +2484,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -2421,6 +2504,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2599,10 +2687,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -3023,7 +3111,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -3302,10 +3390,10 @@
     cls.add_method('Add', 
                    'void', 
                    [param('ns3::Ptr< ns3::Ipv6 >', 'ipv6'), param('uint32_t', 'interface')])
-    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer & c) [member function]
+    ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(ns3::Ipv6InterfaceContainer const & c) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv6InterfaceContainer &', 'c')])
+                   [param('ns3::Ipv6InterfaceContainer const &', 'c')])
     ## ipv6-interface-container.h (module 'internet'): void ns3::Ipv6InterfaceContainer::Add(std::string ipv6Name, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -4229,10 +4317,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -4386,6 +4478,43 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
+def register_Ns3RipHelper_methods(root_module, cls):
+    ## rip-helper.h (module 'internet'): ns3::RipHelper::RipHelper() [constructor]
+    cls.add_constructor([])
+    ## rip-helper.h (module 'internet'): ns3::RipHelper::RipHelper(ns3::RipHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipHelper const &', 'arg0')])
+    ## rip-helper.h (module 'internet'): ns3::RipHelper * ns3::RipHelper::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::RipHelper *', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-helper.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::RipHelper::Create(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Create', 
+                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True, is_virtual=True)
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::Set(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## rip-helper.h (module 'internet'): int64_t ns3::RipHelper::AssignStreams(ns3::NodeContainer c, int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('ns3::NodeContainer', 'c'), param('int64_t', 'stream')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::SetDefaultRouter(ns3::Ptr<ns3::Node> node, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
+    cls.add_method('SetDefaultRouter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::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')])
+    ## rip-helper.h (module 'internet'): void ns3::RipHelper::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_Ns3RipNgHelper_methods(root_module, cls):
     ## ripng-helper.h (module 'internet'): ns3::RipNgHelper::RipNgHelper() [constructor]
     cls.add_constructor([])
@@ -4471,6 +4600,54 @@
                    [param('uint16_t', 'routeTag')])
     return
 
+def register_Ns3RipRoutingTableEntry_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::RipRoutingTableEntry const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipRoutingTableEntry const &', 'arg0')])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry() [constructor]
+    cls.add_constructor([])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::Ipv4Address network, ns3::Ipv4Mask networkPrefix, ns3::Ipv4Address nextHop, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkPrefix'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::RipRoutingTableEntry(ns3::Ipv4Address network, ns3::Ipv4Mask networkPrefix, uint32_t interface) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkPrefix'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): uint8_t ns3::RipRoutingTableEntry::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): ns3::RipRoutingTableEntry::Status_e ns3::RipRoutingTableEntry::GetRouteStatus() const [member function]
+    cls.add_method('GetRouteStatus', 
+                   'ns3::RipRoutingTableEntry::Status_e', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): uint16_t ns3::RipRoutingTableEntry::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): bool ns3::RipRoutingTableEntry::IsRouteChanged() const [member function]
+    cls.add_method('IsRouteChanged', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteChanged(bool changed) [member function]
+    cls.add_method('SetRouteChanged', 
+                   'void', 
+                   [param('bool', 'changed')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteMetric(uint8_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint8_t', 'routeMetric')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteStatus(ns3::RipRoutingTableEntry::Status_e status) [member function]
+    cls.add_method('SetRouteStatus', 
+                   'void', 
+                   [param('ns3::RipRoutingTableEntry::Status_e', 'status')])
+    ## rip.h (module 'internet'): void ns3::RipRoutingTableEntry::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    return
+
 def register_Ns3RttHistory_methods(root_module, cls):
     ## tcp-socket-base.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')])
@@ -4904,40 +5081,6 @@
                    is_pure_virtual=True, is_virtual=True)
     return
 
-def register_Ns3TracedValue__Bool_methods(root_module, cls):
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue() [constructor]
-    cls.add_constructor([])
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(ns3::TracedValue<bool> const & o) [copy constructor]
-    cls.add_constructor([param('ns3::TracedValue< bool > const &', 'o')])
-    ## traced-value.h (module 'core'): ns3::TracedValue<bool>::TracedValue(bool const & v) [constructor]
-    cls.add_constructor([param('bool const &', 'v')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
-    cls.add_method('Connect', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
-    cls.add_method('ConnectWithoutContext', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
-    cls.add_method('Disconnect', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
-    cls.add_method('DisconnectWithoutContext', 
-                   'void', 
-                   [param('ns3::CallbackBase const &', 'cb')])
-    ## traced-value.h (module 'core'): bool ns3::TracedValue<bool>::Get() const [member function]
-    cls.add_method('Get', 
-                   'bool', 
-                   [], 
-                   is_const=True)
-    ## traced-value.h (module 'core'): void ns3::TracedValue<bool>::Set(bool const & v) [member function]
-    cls.add_method('Set', 
-                   'void', 
-                   [param('bool const &', 'v')])
-    return
-
 def register_Ns3TracedValue__Double_methods(root_module, cls):
     ## traced-value.h (module 'core'): ns3::TracedValue<double>::TracedValue() [constructor]
     cls.add_constructor([])
@@ -5040,7 +5183,42 @@
                    [param('ns3::TcpSocket::TcpStates_t const &', 'v')])
     return
 
+def register_Ns3TracedValue__Ns3TcpSocketStateTcpCongState_t_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue(ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::TracedValue(ns3::TcpSocketState::TcpCongState_t const & v) [constructor]
+    cls.add_constructor([param('ns3::TcpSocketState::TcpCongState_t const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Connect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Connect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::ConnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('ConnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Disconnect(ns3::CallbackBase const & cb, std::basic_string<char,std::char_traits<char>,std::allocator<char> > path) [member function]
+    cls.add_method('Disconnect', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb'), param('std::string', 'path')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::TcpSocketState::TcpCongState_t ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::TcpSocketState::TcpCongState_t', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::TcpSocketState::TcpCongState_t>::Set(ns3::TcpSocketState::TcpCongState_t const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::TcpSocketState::TcpCongState_t const &', 'v')])
+    return
+
 def register_Ns3TracedValue__Unsigned_int_methods(root_module, cls):
+    cls.add_binary_numeric_operator('/', root_module['ns3::TracedValue< unsigned int >'], root_module['ns3::TracedValue< unsigned int >'], param('uint32_t const &', u'right'))
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue() [constructor]
     cls.add_constructor([])
     ## traced-value.h (module 'core'): ns3::TracedValue<unsigned int>::TracedValue(ns3::TracedValue<unsigned int> const & o) [copy constructor]
@@ -7075,11 +7253,21 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## ipv6-header.h (module 'internet'): std::string ns3::Ipv6Header::DscpTypeToString(ns3::Ipv6Header::DscpType dscp) const [member function]
+    cls.add_method('DscpTypeToString', 
+                   'std::string', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')], 
+                   is_const=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'): ns3::Ipv6Header::DscpType ns3::Ipv6Header::GetDscp() const [member function]
+    cls.add_method('GetDscp', 
+                   'ns3::Ipv6Header::DscpType', 
+                   [], 
+                   is_const=True)
     ## ipv6-header.h (module 'internet'): uint32_t ns3::Ipv6Header::GetFlowLabel() const [member function]
     cls.add_method('GetFlowLabel', 
                    'uint32_t', 
@@ -7139,6 +7327,10 @@
     cls.add_method('SetDestinationAddress', 
                    'void', 
                    [param('ns3::Ipv6Address', 'dst')])
+    ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetDscp(ns3::Ipv6Header::DscpType dscp) [member function]
+    cls.add_method('SetDscp', 
+                   'void', 
+                   [param('ns3::Ipv6Header::DscpType', 'dscp')])
     ## ipv6-header.h (module 'internet'): void ns3::Ipv6Header::SetFlowLabel(uint32_t flow) [member function]
     cls.add_method('SetFlowLabel', 
                    'void', 
@@ -7572,6 +7764,35 @@
                    [])
     return
 
+def register_Ns3PacketFilter_methods(root_module, cls):
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter(ns3::PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketFilter const &', 'arg0')])
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::Classify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True)
+    ## packet-filter.h (module 'traffic-control'): static ns3::TypeId ns3::PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## packet-filter.h (module 'traffic-control'): ns3::PacketFilter::PF_NO_MATCH [variable]
+    cls.add_static_attribute('PF_NO_MATCH', 'int const', is_const=True)
+    ## packet-filter.h (module 'traffic-control'): bool ns3::PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## packet-filter.h (module 'traffic-control'): int32_t ns3::PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    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', 
@@ -7618,6 +7839,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -7653,18 +7878,33 @@
     cls.add_constructor([param('ns3::Queue const &', 'arg0')])
     ## queue.h (module 'network'): ns3::Queue::Queue() [constructor]
     cls.add_constructor([])
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::Dequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::Dequeue() [member function]
     cls.add_method('Dequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [])
     ## queue.h (module 'network'): void ns3::Queue::DequeueAll() [member function]
     cls.add_method('DequeueAll', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::Enqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('Enqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')])
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxBytes() const [member function]
+    cls.add_method('GetMaxBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): uint32_t ns3::Queue::GetMaxPackets() const [member function]
+    cls.add_method('GetMaxPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue.h (module 'network'): ns3::Queue::QueueMode ns3::Queue::GetMode() const [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [], 
+                   is_const=True)
     ## queue.h (module 'network'): uint32_t ns3::Queue::GetNBytes() const [member function]
     cls.add_method('GetNBytes', 
                    'uint32_t', 
@@ -7705,129 +7945,410 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::Peek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::Peek() const [member function]
     cls.add_method('Peek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_const=True)
     ## queue.h (module 'network'): void ns3::Queue::ResetStatistics() [member function]
     cls.add_method('ResetStatistics', 
                    'void', 
                    [])
-    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> packet) [member function]
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxBytes(uint32_t maxBytes) [member function]
+    cls.add_method('SetMaxBytes', 
+                   'void', 
+                   [param('uint32_t', 'maxBytes')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMaxPackets(uint32_t maxPackets) [member function]
+    cls.add_method('SetMaxPackets', 
+                   'void', 
+                   [param('uint32_t', 'maxPackets')])
+    ## queue.h (module 'network'): void ns3::Queue::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## queue.h (module 'network'): void ns3::Queue::Drop(ns3::Ptr<ns3::Packet> p) [member function]
     cls.add_method('Drop', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet')], 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Queue::DoDequeue() [member function]
+    ## queue.h (module 'network'): ns3::Ptr<ns3::QueueItem> ns3::Queue::DoDequeue() [member function]
     cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'ns3::Ptr< ns3::QueueItem >', 
                    [], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
+    ## queue.h (module 'network'): bool ns3::Queue::DoEnqueue(ns3::Ptr<ns3::QueueItem> item) [member function]
     cls.add_method('DoEnqueue', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
-    ## queue.h (module 'network'): ns3::Ptr<ns3::Packet const> ns3::Queue::DoPeek() const [member function]
+    ## queue.h (module 'network'): ns3::Ptr<const ns3::QueueItem> ns3::Queue::DoPeek() const [member function]
     cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
+                   'ns3::Ptr< ns3::QueueItem const >', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     return
 
-def register_Ns3RandomVariableStream_methods(root_module, cls):
-    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
-    cls.add_constructor([])
-    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
-    cls.add_method('SetStream', 
-                   'void', 
-                   [param('int64_t', 'stream')])
-    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
-    cls.add_method('GetStream', 
-                   'int64_t', 
-                   [], 
-                   is_const=True)
-    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
-    cls.add_method('SetAntithetic', 
-                   'void', 
-                   [param('bool', 'isAntithetic')])
-    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
-    cls.add_method('IsAntithetic', 
+def register_Ns3QueueDisc_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc(ns3::QueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDisc const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::QueueDisc() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddInternalQueue(ns3::Ptr<ns3::Queue> queue) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Queue >', 'queue')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddPacketFilter(ns3::Ptr<ns3::PacketFilter> filter) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::PacketFilter >', 'filter')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::AddQueueDiscClass(ns3::Ptr<ns3::QueueDiscClass> qdClass) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscClass >', 'qdClass')])
+    ## queue-disc.h (module 'traffic-control'): int32_t ns3::QueueDisc::Classify(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Classify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::Dequeue() [member function]
+    cls.add_method('Dequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::Enqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Enqueue', 
                    'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::Queue> ns3::QueueDisc::GetInternalQueue(uint32_t i) const [member function]
+    cls.add_method('GetInternalQueue', 
+                   'ns3::Ptr< ns3::Queue >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNBytes() const [member function]
+    cls.add_method('GetNBytes', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
-    cls.add_method('GetValue', 
-                   'double', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNInternalQueues() const [member function]
+    cls.add_method('GetNInternalQueues', 
+                   'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
-    cls.add_method('GetInteger', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPacketFilters() const [member function]
+    cls.add_method('GetNPacketFilters', 
                    'uint32_t', 
                    [], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
-    cls.add_method('Peek', 
-                   'ns3::RngStream *', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNPackets() const [member function]
+    cls.add_method('GetNPackets', 
+                   'uint32_t', 
                    [], 
-                   is_const=True, visibility='protected')
-    return
-
-def register_Ns3RipNgHeader_methods(root_module, cls):
-    cls.add_output_stream_operator()
-    ## 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', 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetNQueueDiscClasses() const [member function]
+    cls.add_method('GetNQueueDiscClasses', 
                    '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', 
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::NetDevice> ns3::QueueDisc::GetNetDevice() const [member function]
+    cls.add_method('GetNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::PacketFilter> ns3::QueueDisc::GetPacketFilter(uint32_t i) const [member function]
+    cls.add_method('GetPacketFilter', 
+                   'ns3::Ptr< ns3::PacketFilter >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscClass> ns3::QueueDisc::GetQueueDiscClass(uint32_t i) const [member function]
+    cls.add_method('GetQueueDiscClass', 
+                   'ns3::Ptr< ns3::QueueDiscClass >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetQuota() const [member function]
+    cls.add_method('GetQuota', 
+                   'uint32_t', 
                    [], 
                    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 >', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedBytes() const [member function]
+    cls.add_method('GetTotalDroppedBytes', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## ripng-header.h (module 'internet'): uint16_t ns3::RipNgHeader::GetRteNumber() const [member function]
-    cls.add_method('GetRteNumber', 
-                   'uint16_t', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalDroppedPackets() const [member function]
+    cls.add_method('GetTotalDroppedPackets', 
+                   'uint32_t', 
                    [], 
                    is_const=True)
-    ## ripng-header.h (module 'internet'): uint32_t ns3::RipNgHeader::GetSerializedSize() const [member function]
-    cls.add_method('GetSerializedSize', 
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedBytes() const [member function]
+    cls.add_method('GetTotalReceivedBytes', 
                    '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_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalReceivedPackets() const [member function]
+    cls.add_method('GetTotalReceivedPackets', 
+                   'uint32_t', 
                    [], 
-                   is_static=True)
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedBytes() const [member function]
+    cls.add_method('GetTotalRequeuedBytes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint32_t ns3::QueueDisc::GetTotalRequeuedPackets() const [member function]
+    cls.add_method('GetTotalRequeuedPackets', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDisc::WakeMode ns3::QueueDisc::GetWakeMode() [member function]
+    cls.add_method('GetWakeMode', 
+                   'ns3::QueueDisc::WakeMode', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Run() [member function]
+    cls.add_method('Run', 
+                   'void', 
+                   [])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetNetDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::SetQuota(uint32_t const quota) [member function]
+    cls.add_method('SetQuota', 
+                   'void', 
+                   [param('uint32_t const', 'quota')], 
+                   is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::Drop(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Drop', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='protected')
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::QueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): bool ns3::QueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::QueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueDiscClass_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass(ns3::QueueDiscClass const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscClass const &', 'arg0')])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass::QueueDiscClass() [constructor]
+    cls.add_constructor([])
+    ## queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscClass::GetQueueDisc() const [member function]
+    cls.add_method('GetQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::QueueDiscClass::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::SetQueueDisc(ns3::Ptr<ns3::QueueDisc> qd) [member function]
+    cls.add_method('SetQueueDisc', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qd')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscClass::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3RipHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip-header.h (module 'internet'): ns3::RipHeader::RipHeader(ns3::RipHeader const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipHeader const &', 'arg0')])
+    ## rip-header.h (module 'internet'): ns3::RipHeader::RipHeader() [constructor]
+    cls.add_constructor([])
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::AddRte(ns3::RipRte rte) [member function]
+    cls.add_method('AddRte', 
+                   'void', 
+                   [param('ns3::RipRte', 'rte')])
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::ClearRtes() [member function]
+    cls.add_method('ClearRtes', 
+                   'void', 
+                   [])
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipHeader::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::RipHeader::Command_e ns3::RipHeader::GetCommand() const [member function]
+    cls.add_method('GetCommand', 
+                   'ns3::RipHeader::Command_e', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): ns3::TypeId ns3::RipHeader::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): std::list<ns3::RipRte, std::allocator<ns3::RipRte> > ns3::RipHeader::GetRteList() const [member function]
+    cls.add_method('GetRteList', 
+                   'std::list< ns3::RipRte >', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint16_t ns3::RipHeader::GetRteNumber() const [member function]
+    cls.add_method('GetRteNumber', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipHeader::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): static ns3::TypeId ns3::RipHeader::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipHeader::SetCommand(ns3::RipHeader::Command_e command) [member function]
+    cls.add_method('SetCommand', 
+                   'void', 
+                   [param('ns3::RipHeader::Command_e', 'command')])
+    return
+
+def register_Ns3RipNgHeader_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## 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', 
@@ -7918,6 +8439,89 @@
                    [param('uint16_t', 'routeTag')])
     return
 
+def register_Ns3RipRte_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## rip-header.h (module 'internet'): ns3::RipRte::RipRte(ns3::RipRte const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RipRte const &', 'arg0')])
+    ## rip-header.h (module 'internet'): ns3::RipRte::RipRte() [constructor]
+    cls.add_constructor([])
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::TypeId ns3::RipRte::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Address ns3::RipRte::GetNextHop() const [member function]
+    cls.add_method('GetNextHop', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Address ns3::RipRte::GetPrefix() const [member function]
+    cls.add_method('GetPrefix', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::GetRouteMetric() const [member function]
+    cls.add_method('GetRouteMetric', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint16_t ns3::RipRte::GetRouteTag() const [member function]
+    cls.add_method('GetRouteTag', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): uint32_t ns3::RipRte::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): ns3::Ipv4Mask ns3::RipRte::GetSubnetMask() const [member function]
+    cls.add_method('GetSubnetMask', 
+                   'ns3::Ipv4Mask', 
+                   [], 
+                   is_const=True)
+    ## rip-header.h (module 'internet'): static ns3::TypeId ns3::RipRte::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetNextHop(ns3::Ipv4Address nextHop) [member function]
+    cls.add_method('SetNextHop', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'nextHop')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetPrefix(ns3::Ipv4Address prefix) [member function]
+    cls.add_method('SetPrefix', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'prefix')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetRouteMetric(uint32_t routeMetric) [member function]
+    cls.add_method('SetRouteMetric', 
+                   'void', 
+                   [param('uint32_t', 'routeMetric')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetRouteTag(uint16_t routeTag) [member function]
+    cls.add_method('SetRouteTag', 
+                   'void', 
+                   [param('uint16_t', 'routeTag')])
+    ## rip-header.h (module 'internet'): void ns3::RipRte::SetSubnetMask(ns3::Ipv4Mask subnetMask) [member function]
+    cls.add_method('SetSubnetMask', 
+                   'void', 
+                   [param('ns3::Ipv4Mask', 'subnetMask')])
+    return
+
 def register_Ns3RttEstimator_methods(root_module, cls):
     ## rtt-estimator.h (module 'internet'): ns3::RttEstimator::RttEstimator() [constructor]
     cls.add_constructor([])
@@ -8157,6 +8761,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -8193,6 +8809,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -8284,6 +8912,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -8309,6 +8942,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -8833,6 +9481,43 @@
                    is_const=True, is_virtual=True)
     return
 
+def register_Ns3TcpCongestionOps_methods(root_module, cls):
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps::TcpCongestionOps() [constructor]
+    cls.add_constructor([])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpCongestionOps::TcpCongestionOps(ns3::TcpCongestionOps const & other) [copy constructor]
+    cls.add_constructor([param('ns3::TcpCongestionOps const &', 'other')])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpCongestionOps::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): std::string ns3::TcpCongestionOps::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpCongestionOps::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): static ns3::TypeId ns3::TcpCongestionOps::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpCongestionOps::IncreaseWindow(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('IncreaseWindow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpCongestionOps::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
+    return
+
 def register_Ns3TcpHeader_methods(root_module, cls):
     cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
@@ -8883,11 +9568,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## tcp-header.h (module 'internet'): uint8_t ns3::TcpHeader::GetMaxOptionLength() const [member function]
+    cls.add_method('GetMaxOptionLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## tcp-header.h (module 'internet'): ns3::Ptr<ns3::TcpOption> ns3::TcpHeader::GetOption(uint8_t kind) const [member function]
     cls.add_method('GetOption', 
                    'ns3::Ptr< ns3::TcpOption >', 
                    [param('uint8_t', 'kind')], 
                    is_const=True)
+    ## tcp-header.h (module 'internet'): uint8_t ns3::TcpHeader::GetOptionLength() const [member function]
+    cls.add_method('GetOptionLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## tcp-header.h (module 'internet'): ns3::SequenceNumber32 ns3::TcpHeader::GetSequenceNumber() const [member function]
     cls.add_method('GetSequenceNumber', 
                    'ns3::SequenceNumber32', 
@@ -8980,6 +9675,48 @@
                    [param('uint16_t', 'windowSize')])
     return
 
+def register_Ns3TcpNewReno_methods(root_module, cls):
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno::TcpNewReno() [constructor]
+    cls.add_constructor([])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
+    ## tcp-congestion-ops.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpNewReno::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): std::string ns3::TcpNewReno::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpNewReno::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpNewReno::IncreaseWindow(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('IncreaseWindow', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): void ns3::TcpNewReno::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    ## tcp-congestion-ops.h (module 'internet'): uint32_t ns3::TcpNewReno::SlowStart(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('SlowStart', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3TcpOption_methods(root_module, cls):
     ## tcp-option.h (module 'internet'): ns3::TcpOption::TcpOption(ns3::TcpOption const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TcpOption const &', 'arg0')])
@@ -9137,20 +9874,6 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_availBytes [variable]
-    cls.add_instance_attribute('m_availBytes', 'uint32_t', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_data [variable]
-    cls.add_instance_attribute('m_data', 'std::map< ns3::SequenceNumber< unsigned int, int >, ns3::Ptr< ns3::Packet > >', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_finSeq [variable]
-    cls.add_instance_attribute('m_finSeq', 'ns3::SequenceNumber32', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_gotFin [variable]
-    cls.add_instance_attribute('m_gotFin', 'bool', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_maxBuffer [variable]
-    cls.add_instance_attribute('m_maxBuffer', 'uint32_t', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_nextRxSeq [variable]
-    cls.add_instance_attribute('m_nextRxSeq', 'ns3::TracedValue< ns3::SequenceNumber< unsigned int, int > >', is_const=False)
-    ## tcp-rx-buffer.h (module 'internet'): ns3::TcpRxBuffer::m_size [variable]
-    cls.add_instance_attribute('m_size', 'uint32_t', is_const=False)
     return
 
 def register_Ns3TcpSocket_methods(root_module, cls):
@@ -9165,16 +9888,16 @@
                    is_static=True)
     ## tcp-socket.h (module 'internet'): ns3::TcpSocket::TcpStateName [variable]
     cls.add_static_attribute('TcpStateName', 'char const * [ 11 ] const', is_const=True)
-    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetConnCount() const [member function]
-    cls.add_method('GetConnCount', 
-                   'uint32_t', 
-                   [], 
-                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): ns3::Time ns3::TcpSocket::GetConnTimeout() const [member function]
     cls.add_method('GetConnTimeout', 
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetDataRetries() const [member function]
+    cls.add_method('GetDataRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetDelAckMaxCount() const [member function]
     cls.add_method('GetDelAckMaxCount', 
                    'uint32_t', 
@@ -9215,21 +9938,26 @@
                    'uint32_t', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): uint32_t ns3::TcpSocket::GetSynRetries() const [member function]
+    cls.add_method('GetSynRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): bool ns3::TcpSocket::GetTcpNoDelay() const [member function]
     cls.add_method('GetTcpNoDelay', 
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
-    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetConnCount(uint32_t count) [member function]
-    cls.add_method('SetConnCount', 
-                   'void', 
-                   [param('uint32_t', 'count')], 
-                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetConnTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetConnTimeout', 
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetDataRetries(uint32_t retries) [member function]
+    cls.add_method('SetDataRetries', 
+                   'void', 
+                   [param('uint32_t', 'retries')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetDelAckMaxCount(uint32_t count) [member function]
     cls.add_method('SetDelAckMaxCount', 
                    'void', 
@@ -9270,6 +9998,11 @@
                    'void', 
                    [param('uint32_t', 'size')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetSynRetries(uint32_t count) [member function]
+    cls.add_method('SetSynRetries', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     ## tcp-socket.h (module 'internet'): void ns3::TcpSocket::SetTcpNoDelay(bool noDelay) [member function]
     cls.add_method('SetTcpNoDelay', 
                    'void', 
@@ -9322,6 +10055,11 @@
                    'ns3::Socket::SocketErrno', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TypeId ns3::TcpSocketBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetMinRto() const [member function]
     cls.add_method('GetMinRto', 
                    'ns3::Time', 
@@ -9332,6 +10070,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): int ns3::TcpSocketBase::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -9396,6 +10139,10 @@
     cls.add_method('SetClockGranularity', 
                    'void', 
                    [param('ns3::Time', 'clockGranularity')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetCongestionControlAlgorithm(ns3::Ptr<ns3::TcpCongestionOps> algo) [member function]
+    cls.add_method('SetCongestionControlAlgorithm', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpCongestionOps >', 'algo')])
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetMinRto(ns3::Time minRto) [member function]
     cls.add_method('SetMinRto', 
                    'void', 
@@ -9425,6 +10172,24 @@
                    'int', 
                    [], 
                    is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateCongState(ns3::TcpSocketState::TcpCongState_t oldValue, ns3::TcpSocketState::TcpCongState_t newValue) [member function]
+    cls.add_method('UpdateCongState', 
+                   'void', 
+                   [param('ns3::TcpSocketState::TcpCongState_t', 'oldValue'), param('ns3::TcpSocketState::TcpCongState_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateCwnd(uint32_t oldValue, uint32_t newValue) [member function]
+    cls.add_method('UpdateCwnd', 
+                   'void', 
+                   [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateSsThresh(uint32_t oldValue, uint32_t newValue) [member function]
+    cls.add_method('UpdateSsThresh', 
+                   'void', 
+                   [param('uint32_t', 'oldValue'), param('uint32_t', 'newValue')])
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_cWndTrace [variable]
+    cls.add_instance_attribute('m_cWndTrace', 'ns3::TracedCallback< unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_congStateTrace [variable]
+    cls.add_instance_attribute('m_congStateTrace', 'ns3::TracedCallback< ns3::TcpSocketState::TcpCongState_t, ns3::TcpSocketState::TcpCongState_t, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketBase::m_ssThTrace [variable]
+    cls.add_instance_attribute('m_ssThTrace', 'ns3::TracedCallback< unsigned int, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', is_const=False)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::AddOptionTimestamp(ns3::TcpHeader & header) [member function]
     cls.add_method('AddOptionTimestamp', 
                    'void', 
@@ -9440,16 +10205,16 @@
                    'void', 
                    [param('ns3::TcpHeader &', 'tcpHeader')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint16_t ns3::TcpSocketBase::AdvertisedWindowSize() const [member function]
     cls.add_method('AdvertisedWindowSize', 
                    'uint16_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::AvailableWindow() [member function]
+                   is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::AvailableWindow() const [member function]
     cls.add_method('AvailableWindow', 
                    'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::BytesInFlight() [member function]
     cls.add_method('BytesInFlight', 
                    'uint32_t', 
@@ -9474,7 +10239,7 @@
     cls.add_method('CompleteFork', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
-                   visibility='protected')
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ConnectionSucceeded() [member function]
     cls.add_method('ConnectionSucceeded', 
                    'void', 
@@ -9525,11 +10290,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::DupAck(ns3::TcpHeader const & tcpHeader, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'tcpHeader'), param('uint32_t', 'count')], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::EstimateRtt(ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('EstimateRtt', 
                    'void', 
@@ -9539,7 +10299,7 @@
     cls.add_method('Fork', 
                    'ns3::Ptr< ns3::TcpSocketBase >', 
                    [], 
-                   is_pure_virtual=True, visibility='protected', is_virtual=True)
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ForwardIcmp(ns3::Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo) [member function]
     cls.add_method('ForwardIcmp', 
                    'void', 
@@ -9565,16 +10325,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetConnCount() const [member function]
-    cls.add_method('GetConnCount', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): ns3::Time ns3::TcpSocketBase::GetConnTimeout() const [member function]
     cls.add_method('GetConnTimeout', 
                    'ns3::Time', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetDataRetries() const [member function]
+    cls.add_method('GetDataRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetDelAckMaxCount() const [member function]
     cls.add_method('GetDelAckMaxCount', 
                    'uint32_t', 
@@ -9615,25 +10375,25 @@
                    'uint32_t', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::GetSynRetries() const [member function]
+    cls.add_method('GetSynRetries', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::GetTcpNoDelay() const [member function]
     cls.add_method('GetTcpNoDelay', 
                    'bool', 
                    [], 
                    is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::InitializeCwnd() [member function]
-    cls.add_method('InitializeCwnd', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::LastAckTimeout() [member function]
     cls.add_method('LastAckTimeout', 
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::NewAck(ns3::SequenceNumber32 const & seq, bool resetRTO) [member function]
     cls.add_method('NewAck', 
                    'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
+                   [param('ns3::SequenceNumber32 const &', 'seq'), param('bool', 'resetRTO')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::OutOfRange(ns3::SequenceNumber32 head, ns3::SequenceNumber32 tail) const [member function]
     cls.add_method('OutOfRange', 
@@ -9670,10 +10430,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader'), param('ns3::Address const &', 'fromAddress'), param('ns3::Address const &', 'toAddress')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionTimestamp(ns3::Ptr<const ns3::TcpOption> const option) [member function]
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionTimestamp(ns3::Ptr<const ns3::TcpOption> const option, ns3::SequenceNumber32 const & seq) [member function]
     cls.add_method('ProcessOptionTimestamp', 
                    'void', 
-                   [param('ns3::Ptr< ns3::TcpOption const > const', 'option')], 
+                   [param('ns3::Ptr< ns3::TcpOption const > const', 'option'), param('ns3::SequenceNumber32 const &', 'seq')], 
                    visibility='protected')
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ProcessOptionWScale(ns3::Ptr<const ns3::TcpOption> const option) [member function]
     cls.add_method('ProcessOptionWScale', 
@@ -9700,11 +10460,6 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReadOptions(ns3::TcpHeader const & tcpHeader) [member function]
-    cls.add_method('ReadOptions', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'tcpHeader')], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
     cls.add_method('ReceivedAck', 
                    'void', 
@@ -9720,11 +10475,11 @@
                    'void', 
                    [], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): static uint32_t ns3::TcpSocketBase::SafeSubtraction(uint32_t a, uint32_t b) [member function]
+    cls.add_method('SafeSubtraction', 
+                   'uint32_t', 
+                   [param('uint32_t', 'a'), param('uint32_t', 'b')], 
+                   is_static=True, visibility='protected')
     ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::SendDataPacket(ns3::SequenceNumber32 seq, uint32_t maxSize, bool withAck) [member function]
     cls.add_method('SendDataPacket', 
                    'uint32_t', 
@@ -9734,7 +10489,7 @@
     cls.add_method('SendEmptyPacket', 
                    'void', 
                    [param('uint8_t', 'flags')], 
-                   visibility='protected')
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): bool ns3::TcpSocketBase::SendPendingData(bool withAck=false) [member function]
     cls.add_method('SendPendingData', 
                    'bool', 
@@ -9750,16 +10505,16 @@
                    'bool', 
                    [param('bool', 'allowBroadcast')], 
                    visibility='protected', is_virtual=True)
-    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetConnCount(uint32_t count) [member function]
-    cls.add_method('SetConnCount', 
-                   'void', 
-                   [param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetConnTimeout(ns3::Time timeout) [member function]
     cls.add_method('SetConnTimeout', 
                    'void', 
                    [param('ns3::Time', 'timeout')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetDataRetries(uint32_t retries) [member function]
+    cls.add_method('SetDataRetries', 
+                   'void', 
+                   [param('uint32_t', 'retries')], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetDelAckMaxCount(uint32_t count) [member function]
     cls.add_method('SetDelAckMaxCount', 
                    'void', 
@@ -9800,6 +10555,11 @@
                    'void', 
                    [param('uint32_t', 'size')], 
                    visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetSynRetries(uint32_t count) [member function]
+    cls.add_method('SetSynRetries', 
+                   'void', 
+                   [param('uint32_t', 'count')], 
+                   visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::SetTcpNoDelay(bool noDelay) [member function]
     cls.add_method('SetTcpNoDelay', 
                    'void', 
@@ -9825,21 +10585,26 @@
                    'void', 
                    [], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::UnAckDataCount() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::UnAckDataCount() const [member function]
     cls.add_method('UnAckDataCount', 
                    'uint32_t', 
                    [], 
+                   is_const=True, visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateRttHistory(ns3::SequenceNumber32 const & seq, uint32_t sz, bool isRetransmission) [member function]
+    cls.add_method('UpdateRttHistory', 
+                   'void', 
+                   [param('ns3::SequenceNumber32 const &', 'seq'), param('uint32_t', 'sz'), param('bool', 'isRetransmission')], 
                    visibility='protected', is_virtual=True)
     ## tcp-socket-base.h (module 'internet'): void ns3::TcpSocketBase::UpdateWindowSize(ns3::TcpHeader const & header) [member function]
     cls.add_method('UpdateWindowSize', 
                    'void', 
                    [param('ns3::TcpHeader const &', 'header')], 
                    visibility='protected')
-    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::Window() [member function]
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketBase::Window() const [member function]
     cls.add_method('Window', 
                    'uint32_t', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   is_const=True, visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpSocketFactory_methods(root_module, cls):
@@ -9854,36 +10619,35 @@
                    is_static=True)
     return
 
-def register_Ns3TcpTahoe_methods(root_module, cls):
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe() [constructor]
+def register_Ns3TcpSocketState_methods(root_module, cls):
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpSocketState() [constructor]
     cls.add_constructor([])
-    ## tcp-tahoe.h (module 'internet'): ns3::TcpTahoe::TcpTahoe(ns3::TcpTahoe const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpTahoe const &', 'sock')])
-    ## tcp-tahoe.h (module 'internet'): static ns3::TypeId ns3::TcpTahoe::GetTypeId() [member function]
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpSocketState(ns3::TcpSocketState const & other) [copy constructor]
+    cls.add_constructor([param('ns3::TcpSocketState const &', 'other')])
+    ## tcp-socket-base.h (module 'internet'): uint32_t ns3::TcpSocketState::GetCwndInSegments() const [member function]
+    cls.add_method('GetCwndInSegments', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## tcp-socket-base.h (module 'internet'): static ns3::TypeId ns3::TcpSocketState::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpTahoe::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-tahoe.h (module 'internet'): void ns3::TcpTahoe::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::TcpCongStateName [variable]
+    cls.add_static_attribute('TcpCongStateName', 'char const * [ 5 ] const', is_const=True)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_cWnd [variable]
+    cls.add_instance_attribute('m_cWnd', 'ns3::TracedValue< unsigned int >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_congState [variable]
+    cls.add_instance_attribute('m_congState', 'ns3::TracedValue< ns3::TcpSocketState::TcpCongState_t >', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_initialCWnd [variable]
+    cls.add_instance_attribute('m_initialCWnd', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_initialSsThresh [variable]
+    cls.add_instance_attribute('m_initialSsThresh', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_segmentSize [variable]
+    cls.add_instance_attribute('m_segmentSize', 'uint32_t', is_const=False)
+    ## tcp-socket-base.h (module 'internet'): ns3::TcpSocketState::m_ssThresh [variable]
+    cls.add_instance_attribute('m_ssThresh', 'ns3::TracedValue< unsigned int >', is_const=False)
     return
 
 def register_Ns3TcpTxBuffer_methods(root_module, cls):
@@ -9953,41 +10717,26 @@
     cls.add_constructor([])
     ## tcp-westwood.h (module 'internet'): ns3::TcpWestwood::TcpWestwood(ns3::TcpWestwood const & sock) [copy constructor]
     cls.add_constructor([param('ns3::TcpWestwood const &', 'sock')])
+    ## tcp-westwood.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpWestwood::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-westwood.h (module 'internet'): uint32_t ns3::TcpWestwood::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
     ## tcp-westwood.h (module 'internet'): static ns3::TypeId ns3::TcpWestwood::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
+    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t packetsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
                    'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::EstimateRtt(ns3::TcpHeader const & header) [member function]
-    cls.add_method('EstimateRtt', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 'header')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpWestwood::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::ReceivedAck(ns3::Ptr<ns3::Packet> packet, ns3::TcpHeader const & tcpHeader) [member function]
-    cls.add_method('ReceivedAck', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::TcpHeader const &', 'tcpHeader')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-westwood.h (module 'internet'): void ns3::TcpWestwood::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'packetsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
     return
 
 def register_Ns3Time_methods(root_module, cls):
@@ -10249,6 +10998,74 @@
                    [param('ns3::Time const &', 'v')])
     return
 
+def register_Ns3TrafficControlLayer_methods(root_module, cls):
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TrafficControlLayer::TrafficControlLayer() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DeleteRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('DeleteRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::TypeId ns3::TrafficControlLayer::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::TrafficControlLayer::GetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('GetRootQueueDiscOnDevice', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): static ns3::TypeId ns3::TrafficControlLayer::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Receive(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::Packet const> 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')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::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) [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')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::Send(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('Send', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetRootQueueDiscOnDevice(ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('SetRootQueueDiscOnDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::SetupDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('SetupDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')], 
+                   is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## traffic-control-layer.h (module 'traffic-control'): void ns3::TrafficControlLayer::NotifyNewAggregate() [member function]
+    cls.add_method('NotifyNewAggregate', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
 def register_Ns3Trailer_methods(root_module, cls):
     cls.add_output_stream_operator()
     ## trailer.h (module 'network'): ns3::Trailer::Trailer() [constructor]
@@ -10746,9 +11563,9 @@
     cls.add_method('ClearRetries', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::ArpCache::Entry::DequeuePending() [member function]
+    ## arp-cache.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> ns3::ArpCache::Entry::DequeuePending() [member function]
     cls.add_method('DequeuePending', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 
                    [])
     ## arp-cache.h (module 'internet'): ns3::Ipv4Address ns3::ArpCache::Entry::GetIpv4Address() const [member function]
     cls.add_method('GetIpv4Address', 
@@ -10802,10 +11619,10 @@
     cls.add_method('MarkPermanent', 
                    'void', 
                    [])
-    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::MarkWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('MarkWaitReply', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     ## arp-cache.h (module 'internet'): void ns3::ArpCache::Entry::SetIpv4Address(ns3::Ipv4Address destination) [member function]
     cls.add_method('SetIpv4Address', 
                    'void', 
@@ -10814,10 +11631,10 @@
     cls.add_method('SetMacAddresss', 
                    'void', 
                    [param('ns3::Address', 'macAddress')])
-    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(ns3::Ptr<ns3::Packet> waiting) [member function]
+    ## arp-cache.h (module 'internet'): bool ns3::ArpCache::Entry::UpdateWaitReply(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv4Header> waiting) [member function]
     cls.add_method('UpdateWaitReply', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'waiting')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv4Header >', 'waiting')])
     return
 
 def register_Ns3ArpHeader_methods(root_module, cls):
@@ -10923,10 +11740,10 @@
     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')])
-    ## arp-l3-protocol.h (module 'internet'): bool ns3::ArpL3Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address destination, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::ArpCache> cache, ns3::Address * hardwareDestination) [member function]
+    ## arp-l3-protocol.h (module 'internet'): bool ns3::ArpL3Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & ipHeader, ns3::Ipv4Address destination, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::ArpCache> cache, ns3::Address * hardwareDestination) [member function]
     cls.add_method('Lookup', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'ipHeader'), param('ns3::Ipv4Address', 'destination'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::ArpCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
     ## arp-l3-protocol.h (module 'internet'): int64_t ns3::ArpL3Protocol::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -11159,65 +11976,6 @@
                    is_static=True)
     return
 
-def register_Ns3CoDelQueue_methods(root_module, cls):
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue::CoDelQueue(ns3::CoDelQueue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::CoDelQueue const &', 'arg0')])
-    ## codel-queue.h (module 'internet'): ns3::CoDelQueue::CoDelQueue() [constructor]
-    cls.add_constructor([])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropCount() [member function]
-    cls.add_method('GetDropCount', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropNext() [member function]
-    cls.add_method('GetDropNext', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetDropOverLimit() [member function]
-    cls.add_method('GetDropOverLimit', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Time ns3::CoDelQueue::GetInterval() [member function]
-    cls.add_method('GetInterval', 
-                   'ns3::Time', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Queue::QueueMode ns3::CoDelQueue::GetMode() [member function]
-    cls.add_method('GetMode', 
-                   'ns3::Queue::QueueMode', 
-                   [])
-    ## codel-queue.h (module 'internet'): uint32_t ns3::CoDelQueue::GetQueueSize() [member function]
-    cls.add_method('GetQueueSize', 
-                   'uint32_t', 
-                   [])
-    ## codel-queue.h (module 'internet'): ns3::Time ns3::CoDelQueue::GetTarget() [member function]
-    cls.add_method('GetTarget', 
-                   'ns3::Time', 
-                   [])
-    ## codel-queue.h (module 'internet'): static ns3::TypeId ns3::CoDelQueue::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## codel-queue.h (module 'internet'): void ns3::CoDelQueue::SetMode(ns3::Queue::QueueMode mode) [member function]
-    cls.add_method('SetMode', 
-                   'void', 
-                   [param('ns3::Queue::QueueMode', 'mode')])
-    ## codel-queue.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::CoDelQueue::DoDequeue() [member function]
-    cls.add_method('DoDequeue', 
-                   'ns3::Ptr< ns3::Packet >', 
-                   [], 
-                   visibility='private', is_virtual=True)
-    ## codel-queue.h (module 'internet'): bool ns3::CoDelQueue::DoEnqueue(ns3::Ptr<ns3::Packet> p) [member function]
-    cls.add_method('DoEnqueue', 
-                   'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')], 
-                   visibility='private', is_virtual=True)
-    ## codel-queue.h (module 'internet'): ns3::Ptr<ns3::Packet const> ns3::CoDelQueue::DoPeek() const [member function]
-    cls.add_method('DoPeek', 
-                   'ns3::Ptr< ns3::Packet const >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
-    return
-
 def register_Ns3ConstantRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -11944,6 +12702,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -11959,6 +12722,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -11974,6 +12742,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -12024,6 +12802,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -12150,10 +12933,10 @@
     cls.add_method('RemoveAddress', 
                    'ns3::Ipv4InterfaceAddress', 
                    [param('ns3::Ipv4Address', 'address')])
-    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Address dest) [member function]
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & hdr, ns3::Ipv4Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'hdr'), param('ns3::Ipv4Address', 'dest')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetArpCache(ns3::Ptr<ns3::ArpCache> arpCache) [member function]
     cls.add_method('SetArpCache', 
                    'void', 
@@ -12178,6 +12961,10 @@
     cls.add_method('SetNode', 
                    'void', 
                    [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv4-interface.h (module 'internet'): void ns3::Ipv4Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -12267,6 +13054,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -12282,6 +13074,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -12309,7 +13106,13 @@
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
     cls.add_method('Remove', 
                    'void', 
-                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): bool ns3::Ipv4L3Protocol::RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -12368,6 +13171,11 @@
                    'void', 
                    [param('uint32_t', 'i')], 
                    is_virtual=True)
+    ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_virtual=True)
     ## ipv4-l3-protocol.h (module 'internet'): ns3::Ipv4L3Protocol::PROT_NUMBER [variable]
     cls.add_static_attribute('PROT_NUMBER', 'uint16_t const', is_const=True)
     ## ipv4-l3-protocol.h (module 'internet'): void ns3::Ipv4L3Protocol::DoDispose() [member function]
@@ -12489,6 +13297,28 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter::Ipv4PacketFilter(ns3::Ipv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::Ipv4PacketFilter::Ipv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::Ipv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): bool ns3::Ipv4PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::Ipv4PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3Ipv4RawSocketFactory_methods(root_module, cls):
     ## ipv4-raw-socket-factory.h (module 'internet'): ns3::Ipv4RawSocketFactory::Ipv4RawSocketFactory() [constructor]
     cls.add_constructor([])
@@ -12550,6 +13380,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## ipv4-raw-socket-impl.h (module 'internet'): int ns3::Ipv4RawSocketImpl::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-raw-socket-impl.h (module 'internet'): uint32_t ns3::Ipv4RawSocketImpl::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -12917,6 +13752,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -12927,6 +13767,16 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv6.h (module 'internet'): bool ns3::Ipv6::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -12947,6 +13797,16 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   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', 
@@ -12957,6 +13817,11 @@
                    'bool', 
                    [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'address')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv6.h (module 'internet'): void ns3::Ipv6::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')], 
+                   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', 
@@ -13322,10 +14187,10 @@
                    'uint8_t', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## ipv6-extension.h (module 'internet'): void ns3::Ipv6ExtensionFragment::GetFragments(ns3::Ptr<ns3::Packet> packet, uint32_t fragmentSize, std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > & listFragments) [member function]
+    ## ipv6-extension.h (module 'internet'): void ns3::Ipv6ExtensionFragment::GetFragments(ns3::Ptr<ns3::Packet> packet, ns3::Ipv6Header ipv6Header, uint32_t fragmentSize, std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > & listFragments) [member function]
     cls.add_method('GetFragments', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('uint32_t', 'fragmentSize'), param('std::list< ns3::Ptr< ns3::Packet > > &', 'listFragments')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Header', 'ipv6Header'), param('uint32_t', 'fragmentSize'), param('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > > &', 'listFragments')])
     ## ipv6-extension.h (module 'internet'): static ns3::TypeId ns3::Ipv6ExtensionFragment::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -13632,6 +14497,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsSolicitedMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsSolicitedMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
     ## ipv6-interface.h (module 'internet'): bool ns3::Ipv6Interface::IsUp() const [member function]
     cls.add_method('IsUp', 
                    'bool', 
@@ -13645,10 +14515,10 @@
     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]
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::Send(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & hdr, ns3::Ipv6Address dest) [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dest')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'hdr'), param('ns3::Ipv6Address', 'dest')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetBaseReachableTime(uint16_t baseReachableTime) [member function]
     cls.add_method('SetBaseReachableTime', 
                    'void', 
@@ -13693,6 +14563,10 @@
     cls.add_method('SetState', 
                    'void', 
                    [param('ns3::Ipv6Address', 'address'), param('ns3::Ipv6InterfaceAddress::State_e', 'state')])
+    ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetTrafficControl(ns3::Ptr<ns3::TrafficControlLayer> tc) [member function]
+    cls.add_method('SetTrafficControl', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TrafficControlLayer >', 'tc')])
     ## ipv6-interface.h (module 'internet'): void ns3::Ipv6Interface::SetUp() [member function]
     cls.add_method('SetUp', 
                    'void', 
@@ -13721,16 +14595,33 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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')])
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_virtual=True)
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_virtual=True)
     ## 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-l3-protocol.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv6L3Protocol::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   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 >', 
@@ -13754,7 +14645,8 @@
     ## 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')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Ipv6Address', 'source'), param('ns3::Ipv6Address', 'destination'), param('uint8_t', 'protocol'), param('ns3::Ptr< ns3::Ipv6Route >', 'route')], 
+                   is_virtual=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::SetRoutingProtocol(ns3::Ptr<ns3::Ipv6RoutingProtocol> routingProtocol) [member function]
     cls.add_method('SetRoutingProtocol', 
                    'void', 
@@ -13903,6 +14795,32 @@
                    '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::AddMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::AddMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('AddMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')])
+    ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::RemoveMulticastAddress(ns3::Ipv6Address address, uint32_t interface) [member function]
+    cls.add_method('RemoveMulticastAddress', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')])
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_const=True)
+    ## ipv6-l3-protocol.h (module 'internet'): bool ns3::Ipv6L3Protocol::IsRegisteredMulticastAddress(ns3::Ipv6Address address, uint32_t interface) const [member function]
+    cls.add_method('IsRegisteredMulticastAddress', 
+                   'bool', 
+                   [param('ns3::Ipv6Address', 'address'), param('uint32_t', 'interface')], 
+                   is_const=True)
     ## ipv6-l3-protocol.h (module 'internet'): void ns3::Ipv6L3Protocol::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -13993,6 +14911,28 @@
     cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
     return
 
+def register_Ns3Ipv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter::Ipv6PacketFilter(ns3::Ipv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ipv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::Ipv6PacketFilter::Ipv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::Ipv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): bool ns3::Ipv6PacketFilter::CheckProtocol(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('CheckProtocol', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::Ipv6PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_pure_virtual=True, 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')])
@@ -14475,10 +15415,10 @@
     cls.add_constructor([param('ns3::NdiscCache::Entry const &', 'arg0')])
     ## ndisc-cache.h (module 'internet'): ns3::NdiscCache::Entry::Entry(ns3::NdiscCache * nd) [constructor]
     cls.add_constructor([param('ns3::NdiscCache *', 'nd')])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::AddWaitingPacket(ns3::Ptr<ns3::Packet> p) [member function]
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::AddWaitingPacket(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> p) [member function]
     cls.add_method('AddWaitingPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 'p')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::ClearWaitingPacket() [member function]
     cls.add_method('ClearWaitingPacket', 
                    'void', 
@@ -14519,6 +15459,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ndisc-cache.h (module 'internet'): bool ns3::NdiscCache::Entry::IsPermanent() const [member function]
+    cls.add_method('IsPermanent', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ndisc-cache.h (module 'internet'): bool ns3::NdiscCache::Entry::IsProbe() const [member function]
     cls.add_method('IsProbe', 
                    'bool', 
@@ -14543,25 +15488,29 @@
     cls.add_method('MarkDelay', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkIncomplete(ns3::Ptr<ns3::Packet> p) [member function]
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkIncomplete(std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> p) [member function]
     cls.add_method('MarkIncomplete', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+                   [param('std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 'p')])
+    ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkPermanent() [member function]
+    cls.add_method('MarkPermanent', 
+                   'void', 
+                   [])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkProbe() [member function]
     cls.add_method('MarkProbe', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > ns3::NdiscCache::Entry::MarkReachable(ns3::Address mac) [member function]
+    ## ndisc-cache.h (module 'internet'): std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > ns3::NdiscCache::Entry::MarkReachable(ns3::Address mac) [member function]
     cls.add_method('MarkReachable', 
-                   'std::list< ns3::Ptr< ns3::Packet > >', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 
                    [param('ns3::Address', 'mac')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkReachable() [member function]
     cls.add_method('MarkReachable', 
                    'void', 
                    [])
-    ## ndisc-cache.h (module 'internet'): std::list<ns3::Ptr<ns3::Packet>, std::allocator<ns3::Ptr<ns3::Packet> > > ns3::NdiscCache::Entry::MarkStale(ns3::Address mac) [member function]
+    ## ndisc-cache.h (module 'internet'): std::list<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header>, std::allocator<std::pair<ns3::Ptr<ns3::Packet>, ns3::Ipv6Header> > > ns3::NdiscCache::Entry::MarkStale(ns3::Address mac) [member function]
     cls.add_method('MarkStale', 
-                   'std::list< ns3::Ptr< ns3::Packet > >', 
+                   'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header > >', 
                    [param('ns3::Address', 'mac')])
     ## ndisc-cache.h (module 'internet'): void ns3::NdiscCache::Entry::MarkStale() [member function]
     cls.add_method('MarkStale', 
@@ -14610,7 +15559,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -14737,6 +15686,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -14816,6 +15851,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -15190,31 +16230,174 @@
                    is_virtual=True)
     return
 
-def register_Ns3Probe_methods(root_module, cls):
-    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
-    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+def register_Ns3PfifoFastIpv4PacketFilter_methods(root_module, cls):
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter(ns3::PfifoFastIpv4PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastIpv4PacketFilter const &', 'arg0')])
+    ## ipv4-packet-filter.h (module 'internet'): ns3::PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv4-packet-filter.h (module 'internet'): static ns3::TypeId ns3::PfifoFastIpv4PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv4-packet-filter.h (module 'internet'): int32_t ns3::PfifoFastIpv4PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3PfifoFastIpv6PacketFilter_methods(root_module, cls):
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter(ns3::PfifoFastIpv6PacketFilter const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastIpv6PacketFilter const &', 'arg0')])
+    ## ipv6-packet-filter.h (module 'internet'): ns3::PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter() [constructor]
+    cls.add_constructor([])
+    ## ipv6-packet-filter.h (module 'internet'): static ns3::TypeId ns3::PfifoFastIpv6PacketFilter::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ipv6-packet-filter.h (module 'internet'): int32_t ns3::PfifoFastIpv6PacketFilter::DoClassify(ns3::Ptr<ns3::QueueDiscItem> item) const [member function]
+    cls.add_method('DoClassify', 
+                   'int32_t', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
+def register_Ns3Probe_methods(root_module, cls):
+    ## probe.h (module 'stats'): ns3::Probe::Probe(ns3::Probe const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Probe const &', 'arg0')])
+    ## probe.h (module 'stats'): ns3::Probe::Probe() [constructor]
+    cls.add_constructor([])
+    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
+    cls.add_method('ConnectByObject', 
+                   'bool', 
+                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
+    cls.add_method('ConnectByPath', 
+                   'void', 
+                   [param('std::string', 'path')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Rip_methods(root_module, cls):
+    ## rip.h (module 'internet'): ns3::Rip::Rip(ns3::Rip const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Rip const &', 'arg0')])
+    ## rip.h (module 'internet'): ns3::Rip::Rip() [constructor]
     cls.add_constructor([])
-    ## probe.h (module 'stats'): bool ns3::Probe::ConnectByObject(std::string traceSource, ns3::Ptr<ns3::Object> obj) [member function]
-    cls.add_method('ConnectByObject', 
-                   'bool', 
-                   [param('std::string', 'traceSource'), param('ns3::Ptr< ns3::Object >', 'obj')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## probe.h (module 'stats'): void ns3::Probe::ConnectByPath(std::string path) [member function]
-    cls.add_method('ConnectByPath', 
+    ## rip.h (module 'internet'): void ns3::Rip::AddDefaultRouteTo(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
+    cls.add_method('AddDefaultRouteTo', 
                    'void', 
-                   [param('std::string', 'path')], 
-                   is_pure_virtual=True, is_virtual=True)
-    ## probe.h (module 'stats'): static ns3::TypeId ns3::Probe::GetTypeId() [member function]
+                   [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')])
+    ## rip.h (module 'internet'): int64_t ns3::Rip::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## rip.h (module 'internet'): std::set<unsigned int, std::less<unsigned int>, std::allocator<unsigned int> > ns3::Rip::GetInterfaceExclusions() const [member function]
+    cls.add_method('GetInterfaceExclusions', 
+                   'std::set< unsigned int >', 
+                   [], 
+                   is_const=True)
+    ## rip.h (module 'internet'): uint8_t ns3::Rip::GetInterfaceMetric(uint32_t interface) const [member function]
+    cls.add_method('GetInterfaceMetric', 
+                   'uint8_t', 
+                   [param('uint32_t', 'interface')], 
+                   is_const=True)
+    ## rip.h (module 'internet'): static ns3::TypeId ns3::Rip::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## probe.h (module 'stats'): bool ns3::Probe::IsEnabled() const [member function]
-    cls.add_method('IsEnabled', 
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyAddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyAddAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyInterfaceDown(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceDown', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyInterfaceUp(uint32_t interface) [member function]
+    cls.add_method('NotifyInterfaceUp', 
+                   'void', 
+                   [param('uint32_t', 'interface')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::NotifyRemoveAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
+    cls.add_method('NotifyRemoveAddress', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4InterfaceAddress', 'address')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::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)
+    ## rip.h (module 'internet'): bool ns3::Rip::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,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::Ipv4Header&,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::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header 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::Ipv4Header const &, ns3::Socket::SocketErrno, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): ns3::Ptr<ns3::Ipv4Route> ns3::Rip::RouteOutput(ns3::Ptr<ns3::Packet> p, ns3::Ipv4Header const & header, ns3::Ptr<ns3::NetDevice> oif, ns3::Socket::SocketErrno & sockerr) [member function]
+    cls.add_method('RouteOutput', 
+                   'ns3::Ptr< ns3::Ipv4Route >', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice >', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::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')])
+    ## rip.h (module 'internet'): void ns3::Rip::SetInterfaceMetric(uint32_t interface, uint8_t metric) [member function]
+    cls.add_method('SetInterfaceMetric', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('uint8_t', 'metric')])
+    ## rip.h (module 'internet'): void ns3::Rip::SetIpv4(ns3::Ptr<ns3::Ipv4> ipv4) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
+                   is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
                    [], 
-                   is_const=True, is_virtual=True)
+                   visibility='protected', is_virtual=True)
+    ## rip.h (module 'internet'): void ns3::Rip::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3RipNg_methods(root_module, cls):
@@ -15315,44 +16498,83 @@
                    visibility='protected', is_virtual=True)
     return
 
-def register_Ns3StringChecker_methods(root_module, cls):
-    ## string.h (module 'core'): ns3::StringChecker::StringChecker() [constructor]
+def register_Ns3TcpHighSpeed_methods(root_module, cls):
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed() [constructor]
     cls.add_constructor([])
-    ## string.h (module 'core'): ns3::StringChecker::StringChecker(ns3::StringChecker const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StringChecker const &', 'arg0')])
+    ## tcp-highspeed.h (module 'internet'): ns3::TcpHighSpeed::TcpHighSpeed(ns3::TcpHighSpeed const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHighSpeed const &', 'sock')])
+    ## tcp-highspeed.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHighSpeed::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
+                   [], 
+                   is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): std::string ns3::TcpHighSpeed::GetName() const [member function]
+    cls.add_method('GetName', 
+                   'std::string', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): uint32_t ns3::TcpHighSpeed::GetSsThresh(ns3::Ptr<const ns3::TcpSocketState> tcb, uint32_t bytesInFlight) [member function]
+    cls.add_method('GetSsThresh', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState const >', 'tcb'), param('uint32_t', 'bytesInFlight')], 
+                   is_virtual=True)
+    ## tcp-highspeed.h (module 'internet'): static ns3::TypeId ns3::TcpHighSpeed::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): static uint32_t ns3::TcpHighSpeed::TableLookupA(uint32_t w) [member function]
+    cls.add_method('TableLookupA', 
+                   'uint32_t', 
+                   [param('uint32_t', 'w')], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): static double ns3::TcpHighSpeed::TableLookupB(uint32_t w) [member function]
+    cls.add_method('TableLookupB', 
+                   'double', 
+                   [param('uint32_t', 'w')], 
+                   is_static=True)
+    ## tcp-highspeed.h (module 'internet'): void ns3::TcpHighSpeed::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
     return
 
-def register_Ns3StringValue_methods(root_module, cls):
-    ## string.h (module 'core'): ns3::StringValue::StringValue() [constructor]
+def register_Ns3TcpHybla_methods(root_module, cls):
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla() [constructor]
     cls.add_constructor([])
-    ## string.h (module 'core'): ns3::StringValue::StringValue(ns3::StringValue const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::StringValue const &', 'arg0')])
-    ## string.h (module 'core'): ns3::StringValue::StringValue(std::string const & value) [constructor]
-    cls.add_constructor([param('std::string const &', 'value')])
-    ## string.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::StringValue::Copy() const [member function]
-    cls.add_method('Copy', 
-                   'ns3::Ptr< ns3::AttributeValue >', 
+    ## tcp-hybla.h (module 'internet'): ns3::TcpHybla::TcpHybla(ns3::TcpHybla const & sock) [copy constructor]
+    cls.add_constructor([param('ns3::TcpHybla const &', 'sock')])
+    ## tcp-hybla.h (module 'internet'): ns3::Ptr<ns3::TcpCongestionOps> ns3::TcpHybla::Fork() [member function]
+    cls.add_method('Fork', 
+                   'ns3::Ptr< ns3::TcpCongestionOps >', 
                    [], 
-                   is_const=True, is_virtual=True)
-    ## string.h (module 'core'): bool ns3::StringValue::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)
-    ## string.h (module 'core'): std::string ns3::StringValue::Get() const [member function]
-    cls.add_method('Get', 
+    ## tcp-hybla.h (module 'internet'): std::string ns3::TcpHybla::GetName() const [member function]
+    cls.add_method('GetName', 
                    'std::string', 
                    [], 
-                   is_const=True)
-    ## string.h (module 'core'): std::string ns3::StringValue::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)
-    ## string.h (module 'core'): void ns3::StringValue::Set(std::string const & value) [member function]
-    cls.add_method('Set', 
+    ## tcp-hybla.h (module 'internet'): static ns3::TypeId ns3::TcpHybla::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## tcp-hybla.h (module 'internet'): void ns3::TcpHybla::PktsAcked(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked, ns3::Time const & rtt) [member function]
+    cls.add_method('PktsAcked', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked'), param('ns3::Time const &', 'rtt')], 
+                   is_virtual=True)
+    ## tcp-hybla.h (module 'internet'): void ns3::TcpHybla::CongestionAvoidance(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('CongestionAvoidance', 
                    'void', 
-                   [param('std::string const &', 'value')])
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
+    ## tcp-hybla.h (module 'internet'): uint32_t ns3::TcpHybla::SlowStart(ns3::Ptr<ns3::TcpSocketState> tcb, uint32_t segmentsAcked) [member function]
+    cls.add_method('SlowStart', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::TcpSocketState >', 'tcb'), param('uint32_t', 'segmentsAcked')], 
+                   visibility='protected', is_virtual=True)
     return
 
 def register_Ns3TcpL4Protocol_methods(root_module, cls):
@@ -15373,10 +16595,10 @@
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
                    [])
-    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId socketTypeId) [member function]
+    ## tcp-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Socket> ns3::TcpL4Protocol::CreateSocket(ns3::TypeId congestionTypeId) [member function]
     cls.add_method('CreateSocket', 
                    'ns3::Ptr< ns3::Socket >', 
-                   [param('ns3::TypeId', 'socketTypeId')])
+                   [param('ns3::TypeId', 'congestionTypeId')])
     ## tcp-l4-protocol.h (module 'internet'): ns3::Ipv4EndPoint * ns3::TcpL4Protocol::Allocate() [member function]
     cls.add_method('Allocate', 
                    'ns3::Ipv4EndPoint *', 
@@ -15505,122 +16727,6 @@
                    visibility='protected')
     return
 
-def register_Ns3TcpNewReno_methods(root_module, cls):
-    ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno() [constructor]
-    cls.add_constructor([])
-    ## tcp-newreno.h (module 'internet'): ns3::TcpNewReno::TcpNewReno(ns3::TcpNewReno const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpNewReno const &', 'sock')])
-    ## tcp-newreno.h (module 'internet'): static ns3::TypeId ns3::TcpNewReno::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpNewReno::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-newreno.h (module 'internet'): void ns3::TcpNewReno::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3TcpReno_methods(root_module, cls):
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno() [constructor]
-    cls.add_constructor([])
-    ## tcp-reno.h (module 'internet'): ns3::TcpReno::TcpReno(ns3::TcpReno const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpReno const &', 'sock')])
-    ## tcp-reno.h (module 'internet'): static ns3::TypeId ns3::TcpReno::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpReno::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::NewAck(ns3::SequenceNumber32 const & seq) [member function]
-    cls.add_method('NewAck', 
-                   'void', 
-                   [param('ns3::SequenceNumber32 const &', 'seq')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-reno.h (module 'internet'): void ns3::TcpReno::Retransmit() [member function]
-    cls.add_method('Retransmit', 
-                   'void', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
-def register_Ns3TcpRfc793_methods(root_module, cls):
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793::TcpRfc793() [constructor]
-    cls.add_constructor([])
-    ## tcp-rfc793.h (module 'internet'): ns3::TcpRfc793::TcpRfc793(ns3::TcpRfc793 const & sock) [copy constructor]
-    cls.add_constructor([param('ns3::TcpRfc793 const &', 'sock')])
-    ## tcp-rfc793.h (module 'internet'): static ns3::TypeId ns3::TcpRfc793::GetTypeId() [member function]
-    cls.add_method('GetTypeId', 
-                   'ns3::TypeId', 
-                   [], 
-                   is_static=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::DupAck(ns3::TcpHeader const & t, uint32_t count) [member function]
-    cls.add_method('DupAck', 
-                   'void', 
-                   [param('ns3::TcpHeader const &', 't'), param('uint32_t', 'count')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): ns3::Ptr<ns3::TcpSocketBase> ns3::TcpRfc793::Fork() [member function]
-    cls.add_method('Fork', 
-                   'ns3::Ptr< ns3::TcpSocketBase >', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::GetInitialCwnd() const [member function]
-    cls.add_method('GetInitialCwnd', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::GetInitialSSThresh() const [member function]
-    cls.add_method('GetInitialSSThresh', 
-                   'uint32_t', 
-                   [], 
-                   is_const=True, visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::ScaleSsThresh(uint8_t scaleFactor) [member function]
-    cls.add_method('ScaleSsThresh', 
-                   'void', 
-                   [param('uint8_t', 'scaleFactor')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::SetInitialCwnd(uint32_t cwnd) [member function]
-    cls.add_method('SetInitialCwnd', 
-                   'void', 
-                   [param('uint32_t', 'cwnd')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): void ns3::TcpRfc793::SetInitialSSThresh(uint32_t threshold) [member function]
-    cls.add_method('SetInitialSSThresh', 
-                   'void', 
-                   [param('uint32_t', 'threshold')], 
-                   visibility='protected', is_virtual=True)
-    ## tcp-rfc793.h (module 'internet'): uint32_t ns3::TcpRfc793::Window() [member function]
-    cls.add_method('Window', 
-                   'uint32_t', 
-                   [], 
-                   visibility='protected', is_virtual=True)
-    return
-
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -15937,7 +17043,7 @@
     cls.add_method('AddBridgePort', 
                    'void', 
                    [param('ns3::Ptr< ns3::NetDevice >', 'bridgePort')])
-    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## bridge-net-device.h (module 'bridge'): void ns3::BridgeNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16205,21 +17311,21 @@
     cls.add_method('DoDAD', 
                    'void', 
                    [param('ns3::Ipv6Address', 'target'), param('ns3::Ptr< ns3::Ipv6Interface >', 'interface')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeEchoRequest(ns3::Ipv6Address src, ns3::Ipv6Address dst, uint16_t id, uint16_t seq, ns3::Ptr<ns3::Packet> data) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeEchoRequest(ns3::Ipv6Address src, ns3::Ipv6Address dst, uint16_t id, uint16_t seq, ns3::Ptr<ns3::Packet> data) [member function]
     cls.add_method('ForgeEchoRequest', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('uint16_t', 'id'), param('uint16_t', 'seq'), param('ns3::Ptr< ns3::Packet >', 'data')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeNA(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address * hardwareAddress, uint8_t flags) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeNA(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address * hardwareAddress, uint8_t flags) [member function]
     cls.add_method('ForgeNA', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address *', 'hardwareAddress'), param('uint8_t', 'flags')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeNS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address target, ns3::Address hardwareAddress) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeNS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Ipv6Address target, ns3::Address hardwareAddress) [member function]
     cls.add_method('ForgeNS', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ipv6Address', 'target'), param('ns3::Address', 'hardwareAddress')])
-    ## icmpv6-l4-protocol.h (module 'internet'): ns3::Ptr<ns3::Packet> ns3::Icmpv6L4Protocol::ForgeRS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address hardwareAddress) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): std::pair<ns3::Ptr<ns3::Packet>,ns3::Ipv6Header> ns3::Icmpv6L4Protocol::ForgeRS(ns3::Ipv6Address src, ns3::Ipv6Address dst, ns3::Address hardwareAddress) [member function]
     cls.add_method('ForgeRS', 
-                   'ns3::Ptr< ns3::Packet >', 
+                   'std::pair< ns3::Ptr< ns3::Packet >, ns3::Ipv6Header >', 
                    [param('ns3::Ipv6Address', 'src'), param('ns3::Ipv6Address', 'dst'), param('ns3::Address', 'hardwareAddress')])
     ## icmpv6-l4-protocol.h (module 'internet'): static void ns3::Icmpv6L4Protocol::FunctionDadTimeout(ns3::Ptr<ns3::Icmpv6L4Protocol> icmpv6, ns3::Ipv6Interface * interface, ns3::Ipv6Address addr) [member function]
     cls.add_method('FunctionDadTimeout', 
@@ -16255,10 +17361,10 @@
     cls.add_method('Lookup', 
                    'bool', 
                    [param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
-    ## icmpv6-l4-protocol.h (module 'internet'): bool ns3::Icmpv6L4Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Address dst, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::NdiscCache> cache, ns3::Address * hardwareDestination) [member function]
+    ## icmpv6-l4-protocol.h (module 'internet'): bool ns3::Icmpv6L4Protocol::Lookup(ns3::Ptr<ns3::Packet> p, ns3::Ipv6Header const & ipHeader, ns3::Ipv6Address dst, ns3::Ptr<ns3::NetDevice> device, ns3::Ptr<ns3::NdiscCache> cache, ns3::Address * hardwareDestination) [member function]
     cls.add_method('Lookup', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Ipv6Header const &', 'ipHeader'), param('ns3::Ipv6Address', 'dst'), param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::NdiscCache >', 'cache'), param('ns3::Address *', 'hardwareDestination')])
     ## icmpv6-l4-protocol.h (module 'internet'): void ns3::Icmpv6L4Protocol::NotifyNewAggregate() [member function]
     cls.add_method('NotifyNewAggregate', 
                    'void', 
@@ -16730,7 +17836,7 @@
     cls.add_constructor([param('ns3::LoopbackNetDevice const &', 'arg0')])
     ## loopback-net-device.h (module 'internet'): ns3::LoopbackNetDevice::LoopbackNetDevice() [constructor]
     cls.add_constructor([])
-    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## loopback-net-device.h (module 'internet'): void ns3::LoopbackNetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -16862,6 +17968,90 @@
                    visibility='protected', is_virtual=True)
     return
 
+def register_Ns3QueueDiscItem_methods(root_module, cls):
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem::QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol')])
+    ## queue-disc.h (module 'traffic-control'): ns3::Address ns3::QueueDiscItem::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint16_t ns3::QueueDiscItem::GetProtocol() const [member function]
+    cls.add_method('GetProtocol', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): uint8_t ns3::QueueDiscItem::GetTxQueueIndex() const [member function]
+    cls.add_method('GetTxQueueIndex', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::SetTxQueueIndex(uint8_t txq) [member function]
+    cls.add_method('SetTxQueueIndex', 
+                   'void', 
+                   [param('uint8_t', 'txq')])
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## queue-disc.h (module 'traffic-control'): void ns3::QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv4QueueDiscItem_methods(root_module, cls):
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4QueueDiscItem::Ipv4QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol, ns3::Ipv4Header const & header) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol'), param('ns3::Ipv4Header const &', 'header')])
+    ## ipv4-queue-disc-item.h (module 'internet'): uint32_t ns3::Ipv4QueueDiscItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): ns3::Ipv4Header const & ns3::Ipv4QueueDiscItem::GetHeader() const [member function]
+    cls.add_method('GetHeader', 
+                   'ns3::Ipv4Header const &', 
+                   [], 
+                   is_const=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): void ns3::Ipv4QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv4-queue-disc-item.h (module 'internet'): void ns3::Ipv4QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Ipv6QueueDiscItem_methods(root_module, cls):
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6QueueDiscItem::Ipv6QueueDiscItem(ns3::Ptr<ns3::Packet> p, ns3::Address const & addr, uint16_t protocol, ns3::Ipv6Header const & header) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p'), param('ns3::Address const &', 'addr'), param('uint16_t', 'protocol'), param('ns3::Ipv6Header const &', 'header')])
+    ## ipv6-queue-disc-item.h (module 'internet'): uint32_t ns3::Ipv6QueueDiscItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): ns3::Ipv6Header const & ns3::Ipv6QueueDiscItem::GetHeader() const [member function]
+    cls.add_method('GetHeader', 
+                   'ns3::Ipv6Header const &', 
+                   [], 
+                   is_const=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): void ns3::Ipv6QueueDiscItem::AddHeader() [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## ipv6-queue-disc-item.h (module 'internet'): void ns3::Ipv6QueueDiscItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, 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')])
diff -Naur ns-3.24.1/src/internet/doc/codel.rst ns-3.25/src/internet/doc/codel.rst
--- ns-3.24.1/src/internet/doc/codel.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/doc/codel.rst	1969-12-31 16:00:00.000000000 -0800
@@ -1,134 +0,0 @@
-.. include:: replace.txt
-.. highlight:: cpp
-
-CoDel queue implementation in |ns3|
------------------------------------
-
-This chapter describes the CoDel ([Nic12]_, [Nic14]_) queue implementation 
-in |ns3|. 
-
-Developed by Kathleen Nichols and Van Jacobson as a solution to the 
-bufferbloat [Buf14]_ problem, CoDel (Controlled Delay Management) is a queuing 
-discipline that uses a packet's sojourn time (time in queue) to make 
-decisions on packet drops.
-
-Model Description
-*****************
-
-The source code for the CoDel model is located in the directory ``src/internet/model``
-and consists of 2 files `codel-queue.h` and `codel-queue.cc` defining a CoDelQueue
-class and a helper CoDelTimestampTag class. The code was ported to |ns3| by
-Andrew McGregor based on Linux kernel code implemented by Dave TÃ¤ht and Eric Dumazet. 
-
-* class :cpp:class:`CoDelQueue`: This class implements the main CoDel algorithm:
-
-  * ``CoDelQueue::DoEnqueue ()``: This routine tags a packet with the current time before pushing it into the queue.  The timestamp tag is used by ``CoDelQueue::DoDequeue()`` to compute the packet's sojourn time.  If the queue is full upon the packet arrival, this routine will drop the packet and record the number of drops due to queue overflow, which is stored in `m_dropOverLimit`.
-
-  * ``CoDelQueue::ShouldDrop ()``: This routine is ``CoDelQueue::DoDequeue()``'s helper routine that determines whether a packet should be dropped or not based on its sojourn time.  If the sojourn time goes above `m_target` and remains above continuously for at least `m_interval`, the routine returns ``true`` indicating that it is OK to drop the packet. Otherwise, it returns ``false``. 
-
-  * ``CoDelQueue::DoDequeue ()``: This routine performs the actual packet drop based on ``CoDelQueue::ShouldDrop ()``'s return value and schedules the next drop. 
-* class :cpp:class:`CoDelTimestampTag`: This class implements the timestamp tagging for a packet.  This tag is used to compute the packet's sojourn time (the difference between the time the packet is dequeued and the time it is pushed into the queue). 
-
-There are 2 branches to ``CoDelQueue::DoDequeue ()``: 
-
-1. If the queue is currently in the dropping state, which means the sojourn time has remained above `m_target` for more than `m_interval`, the routine determines if it's OK to leave the dropping state or it's time for the next drop. When ``CoDelQueue::ShouldDrop ()`` returns ``false``, the queue can move out of the dropping state (set `m_dropping` to ``false``).  Otherwise, the queue continuously drops packets and updates the time for next drop (`m_dropNext`) until one of the following conditions is met: 
-
-    1. The queue is empty, upon which the queue leaves the dropping state and exits ``CoDelQueue::ShouldDrop ()`` routine; 
-    2. ``CoDelQueue::ShouldDrop ()`` returns ``false`` (meaning the sojourn time goes below `m_target`) upon which the queue leaves the dropping state; 
-    3. It is not yet time for next drop (`m_dropNext` is less than current time) upon which the queue waits for the next packet dequeue to check the condition again. 
-
-2. If the queue is not in the dropping state, the routine enters the dropping state and drop the first packet if ``CoDelQueue::ShouldDrop ()`` returns ``true`` (meaning the sojourn time has gone above `m_target` for at least `m_interval` for the first time or it has gone above again after the queue leaves the dropping state). 
-
-References
-==========
-
-.. [Nic12] K. Nichols and V. Jacobson, Controlling Queue Delay, ACM Queue, Vol. 10 No. 5, May 2012.  Available online at `<http://queue.acm.org/detail.cfm?id=2209336>`_.
-
-.. [Nic14] K. Nichols and V. Jacobson, Internet-Draft:  Controlled Delay Active Queue Management, March 2014.  Available online at `<http://tools.ietf.org/html/draft-nichols-tsvwg-codel-02>`_.
-
-.. [Buf14] Bufferbloat.net.  Available online at `<http://www.bufferbloat.net/>`_.
-
-Attributes
-==========
-
-The key attributes that the CoDelQueue class holds include the following: 
-
-* ``Mode:`` CoDel operating mode (BYTES, PACKETS, or ILLEGAL). The default mode is BYTES. 
-* ``MaxPackets:`` The maximum number of packets the queue can hold. The default value is DEFAULT_CODEL_LIMIT, which is 1000 packets.
-* ``MaxBytes:`` The maximum number of bytes the queue can hold. The default value is 1500 * DEFAULT_CODEL_LIMIT, which is 1500 * 1000 bytes. 
-* ``MinBytes:`` The CoDel algorithm minbytes parameter. The default value is 1500 bytes. 
-* ``Interval:`` The sliding-minimum window. The default value is 100 ms. 
-* ``Target:`` The CoDel algorithm target queue delay. The default value is 5 ms. 
-
-Examples
-========
-
-The first example is `codel-vs-droptail-basic-test.cc` located in ``src/internet/examples``.  To run the file (the first invocation below shows the available
-command-line options):
-
-:: 
-
-   $ ./waf --run "codel-vs-droptail-basic-test --PrintHelp"
-   $ ./waf --run "codel-vs-droptail-basic-test --queueType=CoDel --pcapFileName=codel.pcap --cwndTrFileName=cwndCodel.tr" 
-
-The expected output from the previous commands are two files: `codel.pcap` file and `cwndCoDel.tr` (ASCII trace) file The .pcap file can be analyzed using 
-wireshark or tcptrace:
-
-:: 
-
-   $ tcptrace -l -r -n -W codel.pcap
-
-The second example is `codel-vs-droptail-asymmetric.cc` located in ``src/internet/examples``.  This example is intended to model a typical cable modem
-deployment scenario.  To run the file:
-
-::
-
-   $ ./waf --run "codel-vs-droptail-asymmetric --PrintHelp"
-   $ ./waf --run codel-vs-droptail-asymmetric
-
-The expected output from the previous commands is six pcap files:
-
-* codel-vs-droptail-asymmetric-CoDel-server-lan.pcap
-* codel-vs-droptail-asymmetric-CoDel-router-wan.pcap
-* codel-vs-droptail-asymmetric-CoDel-router-lan.pcap
-* codel-vs-droptail-asymmetric-CoDel-cmts-wan.pcap
-* codel-vs-droptail-asymmetric-CoDel-cmts-lan.pcap
-* codel-vs-droptail-asymmetric-CoDel-host-lan.pcap
-
-One attribute file:
-
-* codel-vs-droptail-asymmetric-CoDel.attr 
-
-Five ASCII trace files:
-
-* codel-vs-droptail-asymmetric-CoDel-drop.tr
-* codel-vs-droptail-asymmetric-CoDel-drop-state.tr
-* codel-vs-droptail-asymmetric-CoDel-sojourn.tr
-* codel-vs-droptail-asymmetric-CoDel-length.tr
-* codel-vs-droptail-asymmetric-CoDel-cwnd.tr 
-
-Validation
-**********
-
-The CoDel model is tested using :cpp:class:`CoDelQueueTestSuite` class defined in `src/internet/test/codel-queue-test-suite.cc`.  The suite includes 5 test cases:
-
-* Test 1: The first test checks the enqueue/dequeue with no drops and makes sure that CoDel attributes can be set correctly.
-* Test 2: The second test checks the enqueue with drops due to queue overflow.
-* Test 3: The third test checks the NewtonStep() arithmetic against explicit port of Linux implementation
-* Test 4: The fourth test checks the ControlLaw() against explicit port of Linux implementation
-* Test 5: The fifth test checks the enqueue/dequeue with drops according to CoDel algorithm
-
-The test suite can be run using the following commands: 
-
-::
-
-  $ ./waf configure --enable-examples --enable-tests
-  $ ./waf build
-  $ ./test.py -s codel-queue
-
-or  
-
-::
-
-  $ NS_LOG="CoDelQueue" ./waf --run "test-runner --suite=codel-queue"
-
diff -Naur ns-3.24.1/src/internet/doc/ipv6.rst ns-3.25/src/internet/doc/ipv6.rst
--- ns-3.24.1/src/internet/doc/ipv6.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/doc/ipv6.rst	2016-03-23 21:36:53.000000000 -0700
@@ -188,13 +188,24 @@
 ##############################
 
 This is accomplished by relying on the RADVD protocol, implemented by the class
-:cpp:class:`Radvd`. At the time there is no helper for this application, and the
-use is rather difficult (see ``examples/ipv6/radvd.cc``).
+:cpp:class:`Radvd`. A helper class is available, which can be used to ease the most
+common tasks, e.g., setting up a prefix on an interface, if it is announced periodically,
+and if the router is the default router for that interface.
+
+A fine grain configuration is possible though the :cpp:class:`RadvdInterface` class, which
+allows to setup every parameter of the announced router advetisement on a given interface.
+
+It is worth mentioning that the configurations must be set up before installing the 
+application in the node.
 
 Upon using this method, the nodes will acquire dynamically (i.e., during the simulation)
 one (or more) global address(es) according to the RADVD configuration. 
 These addresses will be bases on the RADVD announced prefix and the node's EUI-64.
 
+Examples of RADVD use are shown in ``examples/ipv6/radvd.cc`` 
+and ``examples/ipv6/radvd-two-prefix.cc``.
+
+
 Random-generated IPv6 adddresses
 ################################
 
diff -Naur ns-3.24.1/src/internet/doc/routing-overview.rst ns-3.25/src/internet/doc/routing-overview.rst
--- ns-3.24.1/src/internet/doc/routing-overview.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/doc/routing-overview.rst	2016-03-23 21:36:53.000000000 -0700
@@ -215,7 +215,7 @@
 Unicast routing
 ***************
 
-There are presently seven unicast routing protocols defined for IPv4 and three for
+There are presently eigth unicast routing protocols defined for IPv4 and three for
 IPv6:
 
 * class Ipv4StaticRouting (covering both unicast and multicast)
@@ -230,6 +230,7 @@
   manager, if that is used)
 * class Ipv4NixVectorRouting (a more efficient version of global routing that
   stores source routes in a packet header field)
+* class Rip - the IPv4 RIPv2 protocol (:rfc:`2453`)
 * class Ipv6ListRouting (used to store a prioritized list of routing protocols)
 * class Ipv6StaticRouting 
 * class RipNg - the IPv6 RIPng protocol (:rfc:`2080`)
@@ -334,27 +335,30 @@
 notifications; i.e. the topology changes are due to loss/gain of connectivity
 over a wireless channel.
 
-RIPng
-+++++
+RIP and RIPng
++++++++++++++
+
+The RIPv2 protocol for IPv4 is described in the :rfc:`2453`, and it consolidates
+a number of improvements over the base protocol defined in :rfc:`1058`.
 
 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.
+RIPv1 (see :rfc:`1058` and :rfc:`1723`) routing protocol for IPv4.
 
-The protocol is very simple, and it is normally suitable for flat, simple 
+The protocols are very simple, and are 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 
+RIPv1, RIPv2, and RIPng 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.
+RIP behaviour and limitations.
 
 
 Routing convergence
 ~~~~~~~~~~~~~~~~~~~
 
-RIPng uses a Distance-Vector algorithm, and routes are updated according to
+RIP 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.
@@ -365,7 +369,7 @@
 
 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.
+enough to allow RIP 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.
@@ -375,13 +379,15 @@
 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.
+The examples ``examples/routing/ripng-simple-network.cc`` and 
+``examples/routing/rip-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:
+Split Horizon is a strategy to prevent routing instability.
+Three options are possible:
 
 * No Split Horizon
 * Split Horizon
@@ -394,7 +400,7 @@
 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
+The examples are 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 
@@ -410,18 +416,19 @@
 Default routes
 ~~~~~~~~~~~~~~
 
-RIPng protocol should be installed *only* on routers. As a consequence, 
+RIP 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.
+manually (e.g., by resorting to Ipv4StaticRouting or Ipv6StaticRouting), or 
+by using RADVd (in case of IPv6).
 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 
+The RIP |ns3| implementations allow to change all the timers associated 
 with route updates and routes lifetime.
 
 Moreover, users can change the interface metrics on a per-node basis.
@@ -431,11 +438,14 @@
 "split horizon" and "poison reverse". See :rfc:`2080` for further details,
 and :rfc:`1058` for a complete discussion on the split horizoning strategies.
 
+Moreover, it is possible to use a non-standard value for Link Down Value (i.e.,
+the value after which a link is considered down). The defaul is value is 16. 
+
 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 
+The Next Hop option is useful when RIP is not being run on all of the 
 routers on a network.
 Support for this option may be considered in the future.
 
diff -Naur ns-3.24.1/src/internet/doc/tcp.rst ns-3.25/src/internet/doc/tcp.rst
--- ns-3.24.1/src/internet/doc/tcp.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/doc/tcp.rst	2016-03-23 21:36:53.000000000 -0700
@@ -26,8 +26,8 @@
 There are presently three implementations of TCP available for |ns3|.
 
 * a natively implemented TCP for ns-3
-* support for the `Network Simulation Cradle (NSC) <http://www.wand.net.nz/~stj2/nsc/>`_
-* support for `Direct Code Exectution (DCE) <http://http://www.nsnam.org/~thehajime/ns-3-dce-doc/getting-started.html>`_
+* support for the `Network Simulation Cradle (NSC) <http://www.wand.net.nz/~stj2/nsc/>`__
+* support for `Direct Code Execution (DCE) <https://www.nsnam.org/overview/projects/direct-code-execution/>`__
 
 It should also be mentioned that various ways of combining virtual machines
 with |ns3| makes available also some additional TCP implementations, but
@@ -36,35 +36,36 @@
 ns-3 TCP
 ********
 
-Until ns-3.10 release, |ns3| contained a port of the TCP model from `GTNetS
-<http://www.ece.gatech.edu/research/labs/MANIACS/GTNetS/index.html>`_. 
-This implementation was substantially rewritten by Adriam Tam for ns-3.10.
-The model is a full TCP, in that it is bidirectional and attempts to model the
-connection setup and close logic. 
-
-The implementation of TCP is contained in the following files:
+In brief, the native |ns3| TCP model supports a full bidirectional TCP with
+connection setup and close logic.  Several congestion control algorithms
+are supported, with NewReno the default, and Westwood, Hybla, and HighSpeed
+also supported.  Multipath-TCP and TCP Selective Acknowledgements (SACK)
+are not yet supported in the |ns3| releases.
 
-.. sourcecode:: text
+Model history
++++++++++++++
 
-    src/internet/model/tcp-header.{cc,h}
-    src/internet/model/tcp-l4-protocol.{cc,h}
-    src/internet/model/tcp-socket-factory-impl.{cc,h}
-    src/internet/model/tcp-socket-base.{cc,h}
-    src/internet/model/tcp-tx-buffer.{cc,h}
-    src/internet/model/tcp-rx-buffer.{cc,h}
-    src/internet/model/tcp-rfc793.{cc,h}
-    src/internet/model/tcp-tahoe.{cc,h}
-    src/internet/model/tcp-reno.{cc,h}
-    src/internet/model/tcp-westwood.{cc,h}
-    src/internet/model/tcp-newreno.{cc,h}
-    src/internet/model/rtt-estimator.{cc,h}
-    src/network/model/sequence-number.{cc,h}
-
-Different variants of TCP congestion control are supported by subclassing
-the common base class :cpp:class:`TcpSocketBase`.  Several variants
-are supported, including :rfc:`793` (no congestion control), Tahoe, Reno, Westwood,
-Westwood+, and NewReno.  NewReno is used by default.  See the Usage section of this
-document for on how to change the default TCP variant used in simulation.
+Until the ns-3.10 release, |ns3| contained a port of the TCP model from `GTNetS
+<http://www.ece.gatech.edu/research/labs/MANIACS/GTNetS/index.html>`_. 
+This implementation was substantially rewritten by Adriam Tam for ns-3.10.
+In 2015, the TCP module has been redesigned in order to create a better 
+environment for creating and carrying out automated tests. One of the main 
+changes involves congestion control algorithms, and how they are implemented.
+
+Before ns-3.25 release, a congestion control was considered as a stand-alone TCP
+through an inheritance relation: each congestion control (e.g. TcpNewReno) was
+a subclass of TcpSocketBase, reimplementing some inherited methods. The
+architecture was redone to avoid this inheritance,
+the fundamental principle of the GSoC proposal was avoiding this inheritance,
+by making each congestion control a separate class, and making an interface
+to exchange important data between TcpSocketBase and the congestion modules.
+For instance, similar modularity is used in Linux.
+
+Along with congestion control, Fast Retransmit and Fast Recovery algorithms
+have been modified; in previous releases, these algorithms were demanded to
+TcpSocketBase subclasses. Starting from ns-3.25, they have been merged inside
+TcpSocketBase. In future releases, they can be extracted as separate modules,
+following the congestion control design.
 
 Usage
 +++++
@@ -108,7 +109,7 @@
 created, one may put the following statement at the top of the simulation
 program:: 
 
-  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpTahoe")); 
+  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno")); 
 
 For users who wish to have a pointer to the actual socket (so that
 socket operations like Bind(), setting socket options, etc. can be
@@ -122,18 +123,18 @@
 to get the zeroth element, and a socket is created on this node::
 
   // Create and bind the socket...
-  TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
+  TypeId tid = TypeId::LookupByName ("ns3::TcpNewReno");
   Config::Set ("/NodeList/*/$ns3::TcpL4Protocol/SocketType", TypeIdValue (tid));
   Ptr<Socket> localSocket =
     Socket::CreateSocket (n0n1.Get (0), TcpSocketFactory::GetTypeId ());
 
 Above, the "*" wild card for node number is passed to the attribute
 configuration system, so that all future sockets on all nodes are set to 
-Tahoe, not just on node 'n0n1.Get (0)'.  If one wants to limit it to just 
+NewReno, not just on node 'n0n1.Get (0)'.  If one wants to limit it to just 
 the specified node, one would have to do something like::
 
   // Create and bind the socket...
-  TypeId tid = TypeId::LookupByName ("ns3::TcpTahoe");
+  TypeId tid = TypeId::LookupByName ("ns3::TcpNewReno");
   std::stringstream nodeId;
   nodeId << n0n1.Get (0)->GetId ();
   std::string specificNode = "/NodeList/" + nodeId.str () + "/$ns3::TcpL4Protocol/SocketType";
@@ -149,14 +150,520 @@
 Validation
 ++++++++++
 
-Several TCP validation test results can be found in the
+The following tests are found in the ``src/internet/test`` directory.  In
+general, TCP tests inherit from a class called :cpp:class:`TcpGeneralTest`,
+which provides common operations to set up test scenarios involving TCP
+objects.  For more information on how to write new tests, see the
+section below on :ref:`Writing-tcp-tests`.
+
+* **tcp:** Basic transmission of string of data from client to server
+* **tcp-bytes-in-flight-test:** TCP correctly estimates bytes in flight under loss conditions
+* **tcp-cong-avoid-test:** TCP congestion avoidance for different packet sizes
+* **tcp-datasentcb:** Check TCP's 'data sent' callback
+* **tcp-endpoint-bug2211-test:** A test for an issue that was causing stack overflow
+* **tcp-fast-retr-test:** Fast Retransmit testing
+* **tcp-header:** Unit tests on the TCP header
+* **tcp-highspeed-test:** Unit tests on the Highspeed congestion control
+* **tcp-hybla-test:** Unit tests on the Hybla congestion control
+* **tcp-option:** Unit tests on TCP options
+* **tcp-pkts-acked-test:** Unit test the number of time that PktsAcked is called
+* **tcp-rto-test:** Unit test behavior after a RTO timeout occurs
+* **tcp-rtt-estimation-test:** Check RTT calculations, including retransmission cases
+* **tcp-slow-start-test:** Check behavior of slow start
+* **tcp-timestamp:** Unit test on the timestamp option
+* **tcp-wscaling:** Unit test on the window scaling option
+* **tcp-zero-window-test:** Unit test persist behavior for zero window conditions
+
+Several tests have dependencies outside of the ``internet`` module, so they
+are located in a system test directory called ``src/test/ns3tcp``.  Three
+of these six tests involve use of the Network Simulation Cradle, and are
+disabled if NSC is not enabled in the build.  
+
+* **ns3-tcp-cwnd:** Check to see that ns-3 TCP congestion control works against liblinux2.6.26.so implementation
+* **ns3-tcp-interoperability:** Check to see that ns-3 TCP interoperates with liblinux2.6.26.so implementation
+* **ns3-tcp-loss:** Check behavior of ns-3 TCP upon packet losses
+* **nsc-tcp-loss:** Check behavior of NSC TCP upon packet losses
+* **ns3-tcp-no-delay:** Check that ns-3 TCP Nagle"s algorithm works correctly and that it can be disabled
+* **ns3-tcp-socket:** Check that ns-3 TCP successfully transfers an application data write of various sizes
+* **ns3-tcp-state:** Check the operation of the TCP state machine for several cases
+ 
+Several TCP validation test results can also be found in the
 `wiki page <http://www.nsnam.org/wiki/New_TCP_Socket_Architecture>`_ 
 describing this implementation.
 
+Writing a new congestion control algorithm
+++++++++++++++++++++++++++++++++++++++++++
+
+Writing (or porting) a congestion control algorithms from scratch (or from
+other systems) is a process completely separated from the internals of
+TcpSocketBase.
+
+All operations that are delegated to a congestion control are contained in
+the class TcpCongestionOps. It mimics the structure tcp_congestion_ops of
+Linux, and the following operations are defined:
+
+.. code-block:: c++
+
+  virtual std::string GetName () const;
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb, uint32_t bytesInFlight);
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,const Time& rtt);
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+The most interesting methods to write are GetSsThresh and IncreaseWindow.
+The latter is called when TcpSocketBase decides that it is time to increase
+the congestion window. Much information is available in the Transmission
+Control Block, and the method should increase cWnd and/or ssThresh based
+on the number of segments acked.
+
+GetSsThresh is called whenever the socket needs an updated value of the
+slow start threshold. This happens after a loss; congestion control algorithms
+are then asked to lower such value, and to return it.
+
+PktsAcked is used in case the algorithm needs timing information (such as
+RTT), and it is called each time an ACK is received.
+
 Current limitations
 +++++++++++++++++++
 
 * SACK is not supported
+* TcpCongestionOps interface does not contain every possible Linux operation
+* Fast retransmit / fast recovery are bound with TcpSocketBase, thereby preventing easy simulation of TCP Tahoe
+
+.. _Writing-tcp-tests:
+
+Writing TCP tests
++++++++++++++++++
+
+The TCP subsystem supports automated test
+cases on both socket functions and congestion control algorithms. To show
+how to write tests for TCP, here we explain the process of creating a test
+case that reproduces a bug (#1571 in the project bug tracker).
+
+The bug concerns the zero window situation, which happens when the receiver can
+not handle more data. In this case, it advertises a zero window, which causes
+the sender to pause transmission and wait for the receiver to increase the
+window.
+
+The sender has a timer to periodically check the receiver's window: however, in
+modern TCP implementations, when the receiver has freed a "significant" amount
+of data, the receiver itself sends an "active" window update, meaning that
+the transmission could be resumed. Nevertheless, the sender timer is still
+necessary because window updates can be lost.
+
+.. note::
+   During the text, we will assume some knowledge about the general design
+   of the TCP test infrastructure, which is explained in detail into the
+   Doxygen documentation. As a brief summary, the strategy is to have a class
+   that sets up a TCP connection, and that calls protected members of itself.
+   In this way, subclasses can implement the necessary members, which will
+   be called by the main TcpGeneralTest class when events occour. For example,
+   after processing an ACK, the method ProcessedAck will be invoked. Subclasses
+   interested in checking some particular things which must have happened during
+   an ACK processing, should implement the ProcessedAck method and check
+   the interesting values inside the method. To get a list of available methods,
+   please check the Doxygen documentation.
+
+We describe the writing of two test case, covering both situations: the
+sender's zero-window probing and the receiver "active" window update. Our focus
+will be on dealing with the reported problems, which are:
+
+* an ns-3 receiver does not send "active" window update when its receive buffer
+  is being freed;
+* even if the window update is artificially crafted, the transmission does not
+  resume.
+
+However, other things should be checked in the test:
+
+* Persistent timer setup
+* Persistent timer teardown if rWnd increases
+
+To construct the test case, one first derives from the TcpGeneralTest class:
+
+The code is the following:
+
+.. code-block:: c++
+
+   TcpZeroWindowTest::TcpZeroWindowTest (const std::string &desc)
+      : TcpGeneralTest (desc)
+   {
+   }
+
+Then, one should define the general parameters for the TCP connection, which
+will be one-sided (one node is acting as SENDER, while the other is acting as
+RECEIVER):
+
+* Application packet size set to 500, and 20 packets in total (meaning a stream
+  of 10k bytes)
+* Segment size for both SENDER and RECEIVER set to 500 bytes
+* Initial slow start threshold set to UINT32_MAX
+* Initial congestion window for the SENDER set to 10 segments (5000 bytes)
+* Congestion control: NewReno
+
+We have also to define the link properties, because the above definition does
+not work for every combination of propagation delay and sender application behavior.
+
+* Link one-way propagation delay: 50 ms
+* Application packet generation interval: 10 ms
+* Application starting time: 20 s after the starting point
+
+To define the properties of the environment (e.g. properties which should be
+set before the object creation, such as propagation delay) one next implements
+ehe method ConfigureEnvironment:
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::ConfigureEnvironment ()
+   {
+     TcpGeneralTest::ConfigureEnvironment ();
+     SetAppPktCount (20);
+     SetMTU (500);
+     SetTransmitStart (Seconds (2.0));
+     SetPropagationDelay (MilliSeconds (50));
+   }
+
+For other properties, set after the object creation, one can use 
+ConfigureProperties ().
+The difference is that some values, such as initial congestion window
+or initial slow start threshold, are applicable only to a single instance, not
+to every instance we have. Usually, methods that requires an id and a value
+are meant to be called inside ConfigureProperties (). Please see the doxygen
+documentation for an exhaustive list of the tunable properties.
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::ConfigureProperties ()
+   {
+     TcpGeneralTest::ConfigureProperties ();
+     SetInitialCwnd (SENDER, 10);
+   }
+
+To see the default value for the experiment, please see the implementation of
+both methods inside TcpGeneralTest class.
+
+.. note::
+   If some configuration parameters are missing, add a method called
+   "SetSomeValue" which takes as input the value only (if it is meant to be
+   called inside ConfigureEnvironment) or the socket and the value (if it is
+   meant to be called inside ConfigureProperties).
+
+To define a zero-window situation, we choose (by design) to initiate the connection
+with a 0-byte rx buffer. This implies that the RECEIVER, in its first SYN-ACK,
+advertises a zero window. This can be accomplished by implementing the method
+CreateReceiverSocket, setting an Rx buffer value of 0 bytes (at line 6 of the
+following code):
+
+.. code-block:: c++
+   :linenos:
+   :emphasize-lines: 6,7,8
+
+   Ptr<TcpSocketMsgBase>
+   TcpZeroWindowTest::CreateReceiverSocket (Ptr<Node> node)
+   {
+     Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket (node);
+
+     socket->SetAttribute("RcvBufSize", UintegerValue (0));
+     Simulator::Schedule (Seconds (10.0),
+                          &TcpZeroWindowTest::IncreaseBufSize, this);
+
+     return socket;
+   }
+
+Even so, to check the active window update, we should schedule an increase
+of the buffer size. We do this at line 7 and 8, scheduling the function
+IncreaseBufSize.
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::IncreaseBufSize ()
+   {
+     SetRcvBufSize (RECEIVER, 2500);
+   }
+
+Which utilizes the SetRcvBufSize method to edit the RxBuffer object of the
+RECEIVER. As said before, check the Doxygen documentation for class TcpGeneralTest
+to be aware of the various possibilities that it offers.
+
+.. note::
+   By design, we choose to mantain a close relationship between TcpSocketBase
+   and TcpGeneralTest: they are connected by a friendship relation. Since
+   friendship is not passed through inheritance, if one discovers that one
+   needs to access or to modify a private (or protected) member of TcpSocketBase,
+   one can do so by adding a method in the class TcpGeneralSocket. An example
+   of such method is SetRcvBufSize, which allows TcpGeneralSocket subclasses
+   to forcefully set the RxBuffer size.
+
+   .. code-block:: c++
+
+      void
+      TcpGeneralTest::SetRcvBufSize (SocketWho who, uint32_t size)
+      {
+        if (who == SENDER)
+          {
+            m_senderSocket->SetRcvBufSize (size);
+          }
+        else if (who == RECEIVER)
+          {
+            m_receiverSocket->SetRcvBufSize (size);
+          }
+        else
+          {
+            NS_FATAL_ERROR ("Not defined");
+          }
+      }
+
+Next, we can start to follow the TCP connection:
+
+#. At time 0.0 s the connection is opened sender side, with a SYN packet sent from
+   SENDER to RECEIVER
+#. At time 0.05 s the RECEIVER gets the SYN and replies with a SYN-ACK
+#. At time 0.10 s the SENDER gets the SYN-ACK and replies with a SYN.
+
+While the general structure is defined, and the connection is started,
+we need to define a way to check the rWnd field on the segments. To this aim,
+we can implement the methods Rx and Tx in the TcpGeneralTest subclass,
+checking each time the actions of the RECEIVER and the SENDER. These methods are
+defined in TcpGeneralTest, and they are attached to the Rx and Tx traces in the
+TcpSocketBase. One should write small tests for every detail that one wants to ensure during the
+connection (it will prevent the test from changing over the time, and it ensures
+that the behavior will stay consistent through releases). We start by ensuring that
+the first SYN-ACK has 0 as advertised window size:
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::Tx(const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+   {
+     ...
+     else if (who == RECEIVER)
+       {
+         NS_LOG_INFO ("\tRECEIVER TX " << h << " size " << p->GetSize());
+
+         if (h.GetFlags () & TcpHeader::SYN)
+           {
+             NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize(), 0,
+                                    "RECEIVER window size is not 0 in the SYN-ACK");
+           }
+       }
+       ....
+    }
+
+Pratically, we are checking that every SYN packet sent by the RECEIVER has the
+advertised window set to 0. The same thing is done also by checking, in the Rx
+method, that each SYN received by SENDER has the advertised window set to 0.
+Thanks to the log subsystem, we can print what is happening through messages.
+If we run the experiment, enabling the logging, we can see the following:
+
+.. code-block:: bash
+
+   ./waf shell
+   gdb --args ./build/utils/ns3-dev-test-runner-debug --test-name=tcp-zero-window-test --stop-on-failure --fullness=QUICK --assert-on-failure --verbose
+   (gdb) run
+
+   0.00s TcpZeroWindowTestSuite:Tx(): 0.00	SENDER TX 49153 > 4477 [SYN] Seq=0 Ack=0 Win=32768 ns3::TcpOptionWinScale(2) ns3::TcpOptionTS(0;0) size 36
+   0.05s TcpZeroWindowTestSuite:Rx(): 0.05	RECEIVER RX 49153 > 4477 [SYN] Seq=0 Ack=0 Win=32768 ns3::TcpOptionWinScale(2) ns3::TcpOptionTS(0;0) ns3::TcpOptionEnd(EOL) size 0
+   0.05s TcpZeroWindowTestSuite:Tx(): 0.05	RECEIVER TX 4477 > 49153 [SYN|ACK] Seq=0 Ack=1 Win=0 ns3::TcpOptionWinScale(0) ns3::TcpOptionTS(50;0) size 36
+   0.10s TcpZeroWindowTestSuite:Rx(): 0.10	SENDER RX 4477 > 49153 [SYN|ACK] Seq=0 Ack=1 Win=0 ns3::TcpOptionWinScale(0) ns3::TcpOptionTS(50;0) ns3::TcpOptionEnd(EOL) size 0
+   0.10s TcpZeroWindowTestSuite:Tx(): 0.10	SENDER TX 49153 > 4477 [ACK] Seq=1 Ack=1 Win=32768 ns3::TcpOptionTS(100;50) size 32
+   0.15s TcpZeroWindowTestSuite:Rx(): 0.15	RECEIVER RX 49153 > 4477 [ACK] Seq=1 Ack=1 Win=32768 ns3::TcpOptionTS(100;50) ns3::TcpOptionEnd(EOL) size 0
+   (...)
+
+The output is cut to show the threeway handshake. As we can see from the headers,
+the rWnd of RECEIVER is set to 0, and thankfully our tests are not failing.
+Now we need to test for the persistent timer, which sould be started by
+the SENDER after it receives the SYN-ACK. Since the Rx method is called before
+any computation on the received packet, we should utilize another method, namely
+ProcessedAck, which is the method called after each processed ACK. In the
+following, we show how to check if the persistent event is running after the
+processing of the SYN-ACK:
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                                    const TcpHeader& h, SocketWho who)
+   {
+     if (who == SENDER)
+       {
+         if (h.GetFlags () & TcpHeader::SYN)
+           {
+             EventId persistentEvent = GetPersistentEvent (SENDER);
+             NS_TEST_ASSERT_MSG_EQ (persistentEvent.IsRunning (), true,
+                                    "Persistent event not started");
+           }
+       }
+    }
+
+Since we programmed the increase of the buffer size after 10 simulated seconds,
+we expect the persistent timer to fire before any rWnd changes. When it fires,
+the SENDER should send a window probe, and the receiver should reply reporting
+again a zero window situation. At first, we investigates on what the sender sends:
+
+..  code-block:: c++
+    :linenos:
+    :emphasize-lines: 1,6,7,11
+
+      if (Simulator::Now ().GetSeconds () <= 6.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (p->GetSize () - h.GetSerializedSize(), 0,
+                                 "Data packet sent anyway");
+        }
+      else if (Simulator::Now ().GetSeconds () > 6.0 &&
+               Simulator::Now ().GetSeconds () <= 7.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (m_zeroWindowProbe, false, "Sent another probe");
+
+          if (! m_zeroWindowProbe)
+            {
+              NS_TEST_ASSERT_MSG_EQ (p->GetSize () - h.GetSerializedSize(), 1,
+                                     "Data packet sent instead of window probe");
+              NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber(), SequenceNumber32 (1),
+                                     "Data packet sent instead of window probe");
+              m_zeroWindowProbe = true;
+            }
+        }
+
+We divide the events by simulated time. At line 1, we check everything that
+happens before the 6.0 seconds mark; for instance, that no data packets are sent,
+and that the state remains OPEN for both sender and receiver.
+
+Since the persist timeout is initialized at 6 seconds (excercise left for the
+reader: edit the test, getting this value from the Attribute system), we need
+to check (line 6) between 6.0 and 7.0 simulated seconds that the probe is sent.
+Only one probe is allowed, and this is the reason for the check at line 11.
+
+.. code-block:: c++
+   :linenos:
+   :emphasize-lines: 6,7
+
+   if (Simulator::Now ().GetSeconds () > 6.0 &&
+       Simulator::Now ().GetSeconds () <= 7.0)
+     {
+       NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber(), SequenceNumber32 (1),
+                              "Data packet sent instead of window probe");
+       NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize(), 0,
+                              "No zero window advertised by RECEIVER");
+     }
+
+For the RECEIVER, the interval between 6 and 7 seconds is when the zero-window
+segment is sent.
+
+Other checks are redundant; the safest approach is to deny any other packet
+exchange between the 7 and 10 seconds mark.
+
+.. code-block:: c++
+
+   else if (Simulator::Now ().GetSeconds () > 7.0 &&
+            Simulator::Now ().GetSeconds () < 10.0)
+     {
+       NS_FATAL_ERROR ("No packets should be sent before the window update");
+     }
+
+The state checks are performed at the end of the methods, since they are valid
+in every condition:
+
+.. code-block:: c++
+
+   NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (GetTcb(SENDER)), TcpSocketState::CA_OPEN,
+                          "Sender State is not OPEN");
+   NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (GetTcb(RECEIVER)), TcpSocketState::CA_OPEN,
+                          "Receiver State is not OPEN");
+
+Now, the interesting part in the Tx method is to check that after the 10.0
+seconds mark (when the RECEIVER sends the active window update) the value of
+the window should be greater than zero (and precisely, set to 2500):
+
+.. code-block:: c++
+
+   else if (Simulator::Now().GetSeconds() >= 10.0)
+     {
+       NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize(), 2500,
+                              "Receiver window not updated");
+     }
+
+To be sure that the sender receives the window update, we can use the Rx
+method:
+
+.. code-block:: c++
+   :linenos:
+   :emphasize-lines: 5
+
+   if (Simulator::Now().GetSeconds() >= 10.0)
+     {
+       NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize(), 2500,
+                              "Receiver window not updated");
+       m_windowUpdated = true;
+     }
+
+We check every packet after the 10 seconds mark to see if it has the
+window updated. At line 5, we also set to true a boolean variable, to check
+that we effectively reach this test.
+
+Last but not least, we implement also the NormalClose() method, to check that
+the connection ends with a success:
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::NormalClose (SocketWho who)
+   {
+     if (who == SENDER)
+       {
+         m_senderFinished = true;
+       }
+     else if (who == RECEIVER)
+       {
+         m_receiverFinished = true;
+       }
+   }
+
+The method is called only if all bytes are transmitted successfully. Then, in
+the method FinalChecks(), we check all variables, which should be true (which
+indicates that we have perfectly closed the connection).
+
+.. code-block:: c++
+
+   void
+   TcpZeroWindowTest::FinalChecks ()
+   {
+     NS_TEST_ASSERT_MSG_EQ (m_zeroWindowProbe, true,
+                            "Zero window probe not sent");
+     NS_TEST_ASSERT_MSG_EQ (m_windowUpdated, true,
+                            "Window has not updated during the connection");
+     NS_TEST_ASSERT_MSG_EQ (m_senderFinished, true,
+                            "Connection not closed successfully (SENDER)");
+     NS_TEST_ASSERT_MSG_EQ (m_receiverFinished, true,
+                            "Connection not closed successfully (RECEIVER)");
+   }
+
+To run the test, the usual way is
+
+.. code-block:: bash
+
+   ./test.py -s tcp-zero-window-test
+
+   PASS: TestSuite tcp-zero-window-test
+   1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
+
+To see INFO messages, use a combination of ./waf shell and gdb (really useful):
+
+.. code-block:: bash
+
+
+    ./waf shell && gdb --args ./build/utils/ns3-dev-test-runner-debug --test-name=tcp-zero-window-test --stop-on-failure --fullness=QUICK --assert-on-failure --verbose
+
+and then, hit "Run".
+
+.. note::
+   This code magically runs without any reported errors; however, in real cases,
+   when you discover a bug you should expect the existing test to fail (this
+   could indicate a well-written test and a bad-writted model, or a bad-written
+   test; hopefull the first situation). Correcting bugs is an iterative
+   process. For instance, commits created to make this test case running without
+   errors are 11633:6b74df04cf44, (others to be merged).
 
 Network Simulation Cradle
 *************************
@@ -177,7 +684,7 @@
 describes the |ns3| port of NSC and how to use it.
 
 To some extent, NSC has been superseded by the Linux kernel support within 
-`Direct Code Execution (DCE) <http://www.nsnam.org/docs/dce/manual/singlehtml/index.html>`_.  However, NSC is still available through the bake build
+`Direct Code Execution (DCE) <http://www.nsnam.org/docs/dce/manual/singlehtml/index.html>`__.  However, NSC is still available through the bake build
 system.  NSC supports Linux kernels 2.6.18 and 2.6.26, but newer
 versions of the kernel have not been ported.  
 
diff -Naur ns-3.24.1/src/internet/examples/codel-vs-droptail-asymmetric.cc ns-3.25/src/internet/examples/codel-vs-droptail-asymmetric.cc
--- ns-3.24.1/src/internet/examples/codel-vs-droptail-asymmetric.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/examples/codel-vs-droptail-asymmetric.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,435 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
- *
- * 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: Truc Anh N Nguyen <trucanh524@gmail.com>
- *
- */
-
-/*
- * This is an example that compares CoDel and DropTail queues using a
- * typical cable modem topology and delay
- * (total RTT 37 ms as measured by Measuring Broadband America)
- *
- *          10gigE         22 Mb/s         gigE
- *           15 ms          1 ms           0.1 ms
- *  --------       ------- (1)    --------        -------
- *  |      |------>|      |------>|      |------->|     |
- *  |server|       |CMTS  |       |Router|        |Host |
- *  |      |<------|      |<------|      |<-------|     |
- *  --------       --------    (2)--------        -------
- *          10gigE         5 Mb/s          gigE
- *           15 ms         6 ms            0.1 ms
- *                                                                     -----------------
- * (1) DropTail queue , 256K bytes
- * (2) DropTail, CoDel, FqCoDel, SfqCoDel, etc.
- *
- * The server initiates a bulk send TCP transfer to the host.
- * The host initiates a bulk send TCP transfer to the server.
- * Also, isochronous traffic (VoIP-like) between server and host
- * The default TCP version in ns-3, TcpNewReno, is used as the transport-layer
- * protocol.
- * Packets transmitted during a simulation run are captured into a .pcap file,
- * and congestion window values are also traced.
- */
-
-#include <iostream>
-#include <fstream>
-#include <string>
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/config-store-module.h"
-#include "ns3/error-model.h"
-#include "ns3/tcp-header.h"
-#include "ns3/udp-header.h"
-#include "ns3/enum.h"
-#include "ns3/event-id.h"
-#include "ns3/ipv4-global-routing-helper.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("CoDelDropTailAsymmetricTest");
-
-static void
-CwndTracer (Ptr<OutputStreamWrapper>stream, uint32_t oldval, uint32_t newval)
-{
-  *stream->GetStream () << oldval << " " << newval << std::endl;
-}
-
-static void
-TraceCwnd (std::string cwndTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (cwndTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for cwnd provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (cwndTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/0/$ns3::TcpL4Protocol/SocketList/0/CongestionWindow",MakeBoundCallback (&CwndTracer, stream));
-    }
-}
-
-static void
-SojournTracer (Ptr<OutputStreamWrapper>stream, Time oldval, Time newval)
-{
-  *stream->GetStream () << oldval << " " << newval << std::endl;
-}
-
-static void
-TraceSojourn (std::string sojournTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (sojournTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for sojourn provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (sojournTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/2/DeviceList/1/$ns3::PointToPointNetDevice/TxQueue/$ns3::CoDelQueue/Sojourn", MakeBoundCallback (&SojournTracer, stream));
-    }
-}
-
-static void
-QueueLengthTracer (Ptr<OutputStreamWrapper>stream, uint32_t oldval, uint32_t newval)
-{
-  *stream->GetStream () << oldval << " " << newval << std::endl;
-}
-
-static void
-TraceQueueLength (std::string queueLengthTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (queueLengthTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for queue length provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (queueLengthTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/2/DeviceList/1/$ns3::PointToPointNetDevice/TxQueue/$ns3::CoDelQueue/BytesInQueue", MakeBoundCallback (&QueueLengthTracer, stream));
-    }
-}
-
-static void
-EveryDropTracer (Ptr<OutputStreamWrapper>stream, Ptr<const Packet> p)
-{
-  *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << p << std::endl;
-}
-
-static void
-TraceEveryDrop (std::string everyDropTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (everyDropTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for every drop event provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (everyDropTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/2/DeviceList/1/$ns3::PointToPointNetDevice/TxQueue/Drop", MakeBoundCallback (&EveryDropTracer, stream));
-    }
-}
-
-static void
-DroppingStateTracer (Ptr<OutputStreamWrapper>stream, bool oldVal, bool newVal)
-{
-  if (oldVal == false && newVal == true)
-    {
-      NS_LOG_INFO ("Entering the dropping state");
-      *stream->GetStream () << Simulator::Now ().GetSeconds () << " ";
-    }
-  else if (oldVal == true && newVal == false)
-    {
-      NS_LOG_INFO ("Leaving the dropping state");
-      *stream->GetStream () << Simulator::Now ().GetSeconds ()  << std::endl;
-    }
-}
-
-static void
-TraceDroppingState (std::string dropStateTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (dropStateTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for dropping state provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (dropStateTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/2/DeviceList/1/$ns3::PointToPointNetDevice/TxQueue/$ns3::CoDelQueue/DropState", MakeBoundCallback (&DroppingStateTracer, stream));
-    }
-}
-
-void
-CreateBulkFlow (AddressValue remoteAddress, Ptr<Node> sender, uint32_t pktSize, float stopTime)
-{
-  BulkSendHelper sourceHelper ("ns3::TcpSocketFactory", Address ());
-  sourceHelper.SetAttribute ("Remote", remoteAddress);
-  sourceHelper.SetAttribute ("SendSize", UintegerValue (pktSize));
-  sourceHelper.SetAttribute ("MaxBytes", UintegerValue (0));
-  ApplicationContainer sourceApp = sourceHelper.Install (sender);
-  sourceApp.Start (Seconds (0));
-  sourceApp.Stop (Seconds (stopTime - 3));
-}
-
-void
-CreateOnOffFlow (AddressValue remoteAddress, Ptr<Node> sender, float stopTime)
-{
-  OnOffHelper sourceHelper ("ns3::UdpSocketFactory", Address ());
-  sourceHelper.SetAttribute ("PacketSize", UintegerValue (280));
-  sourceHelper.SetAttribute ("Remote", remoteAddress);
-  ApplicationContainer sourceApp = sourceHelper.Install (sender);
-  sourceApp.Start (Seconds (0));
-  sourceApp.Stop (Seconds (stopTime - 3));
-}
-
-int main (int argc, char *argv[])
-{
-  std::string serverCmtsDelay = "15ms";
-  std::string cmtsRouterDelay = "6ms";
-  std::string routerHostDelay = "0.1ms";
-  std::string serverLanDataRate = "10Gbps";
-  std::string cmtsLanDataRate = "10Gbps";
-  std::string cmtsWanDataRate = "22Mbps";
-  std::string routerWanDataRate = "5Mbps";
-  std::string routerLanDataRate = "10Gbps";
-  std::string hostLanDataRate = "10Gbps";
-
-  std::string routerWanQueueType = "CoDel";           // outbound cable router queue
-  uint32_t pktSize = 1458;                // in bytes. 1458 to prevent fragments
-  uint32_t queueSize = 1000;              // in packets
-  uint32_t numOfUpLoadBulkFlows = 1;      // # of upload bulk transfer flows
-  uint32_t numOfDownLoadBulkFlows = 1;    // # of download bulk transfer flows
-  uint32_t numOfUpLoadOnOffFlows = 1;     // # of upload onoff flows
-  uint32_t numOfDownLoadOnOffFlows = 1;   // # of download onoff flows
-  bool isPcapEnabled = true;
-
-  float startTime = 0.1;
-  float simDuration = 60;        //in seconds
-
-  std::string fileNamePrefix = "codel-vs-droptail-asymmetric";
-  bool logging = true;
-
-  CommandLine cmd;
-  cmd.AddValue ("serverCmtsDelay", "Link delay between server and CMTS", serverCmtsDelay);
-  cmd.AddValue ("cmtsRouterDelay", "Link delay between CMTS and rounter", cmtsRouterDelay);
-  cmd.AddValue ("routerHostDelay", "Link delay between router and host", routerHostDelay);
-  cmd.AddValue ("serverLanDataRate", "Server LAN net device data rate", serverLanDataRate);
-  cmd.AddValue ("cmtsLanDataRate", "CMTS LAN net device data rate", cmtsLanDataRate);
-  cmd.AddValue ("cmtsWanDataRate", "CMTS WAN net device data rate", cmtsWanDataRate);
-  cmd.AddValue ("routerWanDataRate", "Router WAN net device data rate", routerWanDataRate);
-  cmd.AddValue ("routerLanDataRate", "Router LAN net device data rate", routerLanDataRate);
-  cmd.AddValue ("hostLanDataRate", "Host LAN net device data rate", hostLanDataRate);
-  cmd.AddValue ("routerWanQueueType", "Router WAN net device queue type", routerWanQueueType);
-  cmd.AddValue ("queueSize", "Queue size in packets", queueSize);
-  cmd.AddValue ("pktSize", "Packet size in bytes", pktSize);
-  cmd.AddValue ("numOfUpLoadBulkFlows", "Number of upload bulk transfer flows", numOfUpLoadBulkFlows);
-  cmd.AddValue ("numOfDownLoadBulkFlows", "Number of download bulk transfer flows", numOfDownLoadBulkFlows);
-  cmd.AddValue ("numOfUpLoadOnOffFlows", "Number of upload OnOff flows", numOfUpLoadOnOffFlows);
-  cmd.AddValue ("numOfDownLoadOnOffFlows", "Number of download OnOff flows", numOfDownLoadOnOffFlows);
-  cmd.AddValue ("startTime", "Simulation start time", startTime);
-  cmd.AddValue ("simDuration", "Simulation duration in seconds", simDuration);
-  cmd.AddValue ("isPcapEnabled", "Flag to enable/disable pcap", isPcapEnabled);
-  cmd.AddValue ("logging", "Flag to enable/disable logging", logging);
-  cmd.Parse (argc, argv);
-
-  float stopTime = startTime + simDuration;
-
-  std::string pcapFileName = fileNamePrefix + "-" + routerWanQueueType;
-  std::string cwndTrFileName = fileNamePrefix + "-" + routerWanQueueType + "-cwnd" + ".tr";
-  std::string attributeFileName = fileNamePrefix + "-" + routerWanQueueType + ".attr";
-  std::string sojournTrFileName = fileNamePrefix + "-" + routerWanQueueType + "-sojourn" + ".tr";
-  std::string queueLengthTrFileName = fileNamePrefix + "-" + routerWanQueueType + "-length" + ".tr";
-  std::string everyDropTrFileName = fileNamePrefix + "-" + routerWanQueueType + "-drop" + ".tr";
-  std::string dropStateTrFileName = fileNamePrefix + "-" + routerWanQueueType + "-drop-state" + ".tr";
-  if (logging)
-    {
-      //LogComponentEnable ("CoDelDropTailAsymmetricTest", LOG_LEVEL_ALL);
-      //LogComponentEnable ("BulkSendApplication", LOG_LEVEL_INFO);
-      //LogComponentEnable ("DropTailQueue", LOG_LEVEL_ALL);
-      LogComponentEnable ("CoDelQueue", LOG_LEVEL_FUNCTION);
-    }
-
-  // Queue defaults
-  Config::SetDefault ("ns3::DropTailQueue::MaxPackets", UintegerValue (queueSize));
-  Config::SetDefault ("ns3::CoDelQueue::MaxPackets", UintegerValue (queueSize));
-  Config::SetDefault ("ns3::DropTailQueue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
-  Config::SetDefault ("ns3::CoDelQueue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
-
-  // Create the nodes
-  NS_LOG_INFO ("Create nodes");
-  NodeContainer nodes;
-  nodes.Create (4);
-  // Descriptive names
-  Names::Add ("server", nodes.Get (0));
-  Names::Add ("cmts", nodes.Get (1));
-  Names::Add ("router", nodes.Get (2));
-  Names::Add ("host", nodes.Get (3));
-  NodeContainer serverCmts;
-  serverCmts = NodeContainer (nodes.Get (0), nodes.Get (1));
-  NodeContainer cmtsRouter;
-  cmtsRouter = NodeContainer (nodes.Get (1), nodes.Get (2));
-  NodeContainer routerHost;
-  routerHost = NodeContainer (nodes.Get (2), nodes.Get (3));
-
-  // Enable checksum
-  if (isPcapEnabled)
-    {
-      GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
-    }
-
-  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (pktSize));
-
-  NS_LOG_INFO ("Install Internet stack on all nodes");
-  InternetStackHelper stack;
-  stack.InstallAll ();
-
-  NS_LOG_INFO ("Create channels and install net devices on nodes");
-  PointToPointHelper p2p;
-
-  p2p.SetChannelAttribute ("Delay", StringValue (serverCmtsDelay));
-  NetDeviceContainer serverCmtsDev = p2p.Install (serverCmts);
-  Names::Add ("server/lan", serverCmtsDev.Get (0));
-  Names::Add ("cmts/lan", serverCmtsDev.Get (1));
-  Ptr<PointToPointNetDevice> serverLanDev = DynamicCast<PointToPointNetDevice> (serverCmtsDev.Get (0));
-  serverLanDev->SetAttribute ("DataRate", StringValue (serverLanDataRate));
-  Ptr<PointToPointNetDevice> cmtsLanDev = DynamicCast<PointToPointNetDevice> (serverCmtsDev.Get (1));
-  cmtsLanDev->SetAttribute ("DataRate", StringValue (cmtsLanDataRate));
-
-  p2p.SetChannelAttribute ("Delay", StringValue (cmtsRouterDelay));
-  NetDeviceContainer cmtsRouterDev = p2p.Install (cmtsRouter);
-  Names::Add ("cmts/wan", cmtsRouterDev.Get (0));
-  Names::Add ("router/wan", cmtsRouterDev.Get (1));
-  Ptr<PointToPointNetDevice> cmtsWanDev = DynamicCast<PointToPointNetDevice> (cmtsRouterDev.Get (0));
-  cmtsWanDev->SetAttribute ("DataRate", StringValue (cmtsWanDataRate));
-  Ptr<Queue> queue = cmtsWanDev->GetQueue ();
-  DynamicCast<DropTailQueue> (queue)->SetMode (DropTailQueue::QUEUE_MODE_BYTES);
-  DynamicCast<DropTailQueue> (queue)->SetAttribute ("MaxBytes", UintegerValue (256000));
-
-  Ptr<PointToPointNetDevice> routerWanDev = DynamicCast<PointToPointNetDevice> (cmtsRouterDev.Get (1));
-  routerWanDev->SetAttribute ("DataRate", StringValue (routerWanDataRate));
-  if (routerWanQueueType.compare ("DropTail") == 0)
-    {
-      Ptr<Queue> dropTail = CreateObject<DropTailQueue> ();
-      routerWanDev->SetQueue (dropTail);
-    }
-  else if (routerWanQueueType.compare ("CoDel") == 0)
-    {
-      Ptr<Queue> codel = CreateObject<CoDelQueue> ();
-      routerWanDev->SetQueue (codel);
-    }
-
-  p2p.SetChannelAttribute ("Delay", StringValue (routerHostDelay));
-  NetDeviceContainer routerHostDev = p2p.Install (routerHost);
-  Names::Add ("router/lan", routerHostDev.Get (0));
-  Names::Add ("host/lan", routerHostDev.Get (1));
-  Ptr<PointToPointNetDevice> routerLanDev = DynamicCast<PointToPointNetDevice> (routerHostDev.Get (0));
-  routerLanDev->SetAttribute ("DataRate", StringValue (routerLanDataRate));
-  Ptr<PointToPointNetDevice> hostLanDev = DynamicCast<PointToPointNetDevice> (routerHostDev.Get (1));
-  hostLanDev->SetAttribute ("DataRate", StringValue (hostLanDataRate));
-
-  NS_LOG_INFO ("Assign IP Addresses");
-  Ipv4AddressHelper ipv4;
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer serverCmtsInterface = ipv4.Assign (serverCmtsDev);
-  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
-  Ipv4InterfaceContainer cmtsRouterInterface = ipv4.Assign (cmtsRouterDev);
-  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
-  Ipv4InterfaceContainer routerHostInterface = ipv4.Assign (routerHostDev);
-
-  NS_LOG_INFO ("Initialize Global Routing");
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  NS_LOG_INFO ("Configure downstream");
-  uint16_t port1 = 50000;
-  Address sinkLocalAddress1 (InetSocketAddress (Ipv4Address::GetAny (), port1));
-  PacketSinkHelper sinkHelper1 ("ns3::TcpSocketFactory", sinkLocalAddress1);
-  ApplicationContainer sinkApp1 = sinkHelper1.Install (routerHost.Get (1));
-  sinkApp1.Start (Seconds (0));
-  sinkApp1.Stop (Seconds (stopTime));
-  AddressValue remoteAddress1 (InetSocketAddress (routerHostInterface.GetAddress (1), port1));
-  while (numOfDownLoadBulkFlows)
-    {
-      CreateBulkFlow (remoteAddress1, serverCmts.Get (0), pktSize, stopTime);
-      numOfDownLoadBulkFlows--;
-    }
-
-  while (numOfDownLoadOnOffFlows)
-    {
-      CreateOnOffFlow (remoteAddress1, serverCmts.Get (0), stopTime);
-      numOfDownLoadOnOffFlows--;
-    }
-
-  NS_LOG_INFO ("Configure upstream");
-  uint16_t port2 = 50001;
-  Address sinkLocalAddress2 (InetSocketAddress (Ipv4Address::GetAny (), port2));
-  PacketSinkHelper sinkHelper2 ("ns3::TcpSocketFactory", sinkLocalAddress2);
-  ApplicationContainer sinkApp2 = sinkHelper2.Install (serverCmts.Get (0));
-  sinkApp2.Start (Seconds (0));
-  sinkApp2.Stop (Seconds (stopTime));
-  AddressValue remoteAddress2 (InetSocketAddress (serverCmtsInterface.GetAddress (0), port2));
-  while (numOfUpLoadBulkFlows)
-    {
-      CreateBulkFlow (remoteAddress2, routerHost.Get (1), pktSize, stopTime);
-      numOfUpLoadBulkFlows--;
-    }
-
-  while (numOfUpLoadOnOffFlows)
-    {
-      CreateOnOffFlow (remoteAddress2, routerHost.Get (1), stopTime);
-      numOfUpLoadOnOffFlows--;
-    }
-
-  Simulator::Schedule (Seconds (0.00001), &TraceCwnd, cwndTrFileName);
-  TraceEveryDrop (everyDropTrFileName);
-  if (routerWanQueueType.compare ("CoDel") == 0)
-    {
-      TraceSojourn (sojournTrFileName);
-      TraceQueueLength (queueLengthTrFileName);
-      TraceDroppingState (dropStateTrFileName);
-    }
-  if (isPcapEnabled)
-    {
-      p2p.EnablePcapAll (pcapFileName);
-    }
-
-  // Output config store to txt format
-  Config::SetDefault ("ns3::ConfigStore::Filename", StringValue (attributeFileName));
-  Config::SetDefault ("ns3::ConfigStore::FileFormat", StringValue ("RawText"));
-  Config::SetDefault ("ns3::ConfigStore::Mode", StringValue ("Save"));
-  ConfigStore outputConfig;
-  outputConfig.ConfigureDefaults ();
-  outputConfig.ConfigureAttributes ();
-
-  Simulator::Stop (Seconds (stopTime));
-  Simulator::Run ();
-
-  Simulator::Destroy ();
-  return 0;
-}
diff -Naur ns-3.24.1/src/internet/examples/codel-vs-droptail-basic-test.cc ns-3.25/src/internet/examples/codel-vs-droptail-basic-test.cc
--- ns-3.24.1/src/internet/examples/codel-vs-droptail-basic-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/examples/codel-vs-droptail-basic-test.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,219 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
- *
- * 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: Truc Anh N Nguyen <trucanh524@gmail.com>
- *
- */
-
-/*
- * This is a basic example that compares CoDel and DropTail queues using a simple, single-flow topology:
- *
- * source -------------------------- router ------------------------ sink
- *          100 Mb/s, 0.1 ms        droptail       5 Mb/s, 5ms
- *                                 or codel        bottleneck
- *
- * The source generates traffic across the network using BulkSendApplication.
- * The default TCP version in ns-3, TcpNewReno, is used as the transport-layer protocol.
- * Packets transmitted during a simulation run are captured into a .pcap file, and
- * congestion window values are also traced.
- */
-
-#include <iostream>
-#include <fstream>
-#include <string>
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/error-model.h"
-#include "ns3/tcp-header.h"
-#include "ns3/udp-header.h"
-#include "ns3/enum.h"
-#include "ns3/event-id.h"
-#include "ns3/ipv4-global-routing-helper.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("CoDelDropTailBasicTest");
-
-static void
-CwndTracer (Ptr<OutputStreamWrapper>stream, uint32_t oldval, uint32_t newval)
-{
-  *stream->GetStream () << oldval << " " << newval << std::endl;
-}
-
-static void
-TraceCwnd (std::string cwndTrFileName)
-{
-  AsciiTraceHelper ascii;
-  if (cwndTrFileName.compare ("") == 0)
-    {
-      NS_LOG_DEBUG ("No trace file for cwnd provided");
-      return;
-    }
-  else
-    {
-      Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream (cwndTrFileName.c_str ());
-      Config::ConnectWithoutContext ("/NodeList/1/$ns3::TcpL4Protocol/SocketList/0/CongestionWindow",MakeBoundCallback (&CwndTracer, stream));
-    }
-}
-
-int main (int argc, char *argv[])
-{
-  std::string bottleneckBandwidth = "5Mbps";
-  std::string bottleneckDelay = "5ms";
-  std::string accessBandwidth = "100Mbps";
-  std::string accessDelay = "0.1ms";
-
-  std::string queueType = "DropTail";       //DropTail or CoDel
-  uint32_t queueSize = 1000;      //in packets
-  uint32_t pktSize = 1458;        //in bytes. 1458 to prevent fragments
-  float startTime = 0.1;
-  float simDuration = 60;        //in seconds
-
-  bool isPcapEnabled = true;
-  std::string pcapFileName = "pcapFileDropTail.pcap";
-  std::string cwndTrFileName = "cwndDropTail.tr";
-  bool logging = false;
-
-  CommandLine cmd;
-  cmd.AddValue ("bottleneckBandwidth", "Bottleneck bandwidth", bottleneckBandwidth);
-  cmd.AddValue ("bottleneckDelay", "Bottleneck delay", bottleneckDelay);
-  cmd.AddValue ("accessBandwidth", "Access link bandwidth", accessBandwidth);
-  cmd.AddValue ("accessDelay", "Access link delay", accessDelay);
-  cmd.AddValue ("queueType", "Queue type: DropTail, CoDel", queueType);
-  cmd.AddValue ("queueSize", "Queue size in packets", queueSize);
-  cmd.AddValue ("pktSize", "Packet size in bytes", pktSize);
-  cmd.AddValue ("startTime", "Simulation start time", startTime);
-  cmd.AddValue ("simDuration", "Simulation duration in seconds", simDuration);
-  cmd.AddValue ("isPcapEnabled", "Flag to enable/disable pcap", isPcapEnabled);
-  cmd.AddValue ("pcapFileName", "Name of pcap file", pcapFileName);
-  cmd.AddValue ("cwndTrFileName", "Name of cwnd trace file", cwndTrFileName);
-  cmd.AddValue ("logging", "Flag to enable/disable logging", logging);
-  cmd.Parse (argc, argv);
-
-  float stopTime = startTime + simDuration;
-
-  if (logging)
-    {
-      LogComponentEnable ("CoDelDropTailBasicTest", LOG_LEVEL_ALL);
-      LogComponentEnable ("BulkSendApplication", LOG_LEVEL_INFO);
-      LogComponentEnable ("DropTailQueue", LOG_LEVEL_ALL);
-      LogComponentEnable ("CoDelQueue", LOG_LEVEL_ALL);
-    }
-
-  // Enable checksum
-  if (isPcapEnabled)
-    {
-      GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
-    }
-
-  // Create gateway, source, and sink
-  NodeContainer gateway;
-  gateway.Create (1);
-  NodeContainer source;
-  source.Create (1);
-  NodeContainer sink;
-  sink.Create (1);
-
-  // Create and configure access link and bottleneck link
-  PointToPointHelper accessLink;
-  accessLink.SetDeviceAttribute ("DataRate", StringValue (accessBandwidth));
-  accessLink.SetChannelAttribute ("Delay", StringValue (accessDelay));
-
-  PointToPointHelper bottleneckLink;
-  bottleneckLink.SetDeviceAttribute ("DataRate", StringValue (bottleneckBandwidth));
-  bottleneckLink.SetChannelAttribute ("Delay", StringValue (bottleneckDelay));
-
-  // Configure the queue
-  if (queueType.compare ("DropTail") == 0)
-    {
-      bottleneckLink.SetQueue ("ns3::DropTailQueue",
-                               "Mode", StringValue ("QUEUE_MODE_PACKETS"),
-                               "MaxPackets", UintegerValue (queueSize));
-    }
-  else if (queueType.compare ("CoDel") == 0)
-    {
-      bottleneckLink.SetQueue ("ns3::CoDelQueue",
-                               "Mode", StringValue ("QUEUE_MODE_PACKETS"),
-                               "MaxPackets", UintegerValue (queueSize));
-    }
-  else
-    {
-      NS_LOG_DEBUG ("Invalid queue type");
-      exit (1);
-    }
-
-  InternetStackHelper stack;
-  stack.InstallAll ();
-
-  Ipv4AddressHelper address;
-  address.SetBase ("10.0.0.0", "255.255.255.0");
-
-  // Configure the source and sink net devices
-  // and the channels between the source/sink and the gateway
-  Ipv4InterfaceContainer sinkInterface;
-
-  NetDeviceContainer devices;
-  devices = accessLink.Install (source.Get (0), gateway.Get (0));
-  address.NewNetwork ();
-  Ipv4InterfaceContainer interfaces = address.Assign (devices);
-  devices = bottleneckLink.Install (gateway.Get (0), sink.Get (0));
-  address.NewNetwork ();
-  interfaces = address.Assign (devices);
-
-  sinkInterface.Add (interfaces.Get (1));
-
-  NS_LOG_INFO ("Initialize Global Routing.");
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  uint16_t port = 50000;
-  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
-  PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
-
-  // Configure application
-  AddressValue remoteAddress (InetSocketAddress (sinkInterface.GetAddress (0, 0), port));
-  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (pktSize));
-  BulkSendHelper ftp ("ns3::TcpSocketFactory", Address ());
-  ftp.SetAttribute ("Remote", remoteAddress);
-  ftp.SetAttribute ("SendSize", UintegerValue (pktSize));
-  ftp.SetAttribute ("MaxBytes", UintegerValue (0));
-
-  ApplicationContainer sourceApp = ftp.Install (source.Get (0));
-  sourceApp.Start (Seconds (0));
-  sourceApp.Stop (Seconds (stopTime - 3));
-
-  sinkHelper.SetAttribute ("Protocol", TypeIdValue (TcpSocketFactory::GetTypeId ()));
-  ApplicationContainer sinkApp = sinkHelper.Install (sink);
-  sinkApp.Start (Seconds (0));
-  sinkApp.Stop (Seconds (stopTime));
-
-  Simulator::Schedule (Seconds (0.00001), &TraceCwnd, cwndTrFileName);
-
-  if (isPcapEnabled)
-    {
-      accessLink.EnablePcap (pcapFileName,source,true);
-    }
-
-  Simulator::Stop (Seconds (stopTime));
-  Simulator::Run ();
-
-  Simulator::Destroy ();
-  return 0;
-}
diff -Naur ns-3.24.1/src/internet/examples/wscript ns-3.25/src/internet/examples/wscript
--- ns-3.24.1/src/internet/examples/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -7,11 +7,3 @@
     obj = bld.create_ns3_program('main-simple',
                                  ['network', 'internet', 'applications'])
     obj.source = 'main-simple.cc'
-    
-    obj = bld.create_ns3_program('codel-vs-droptail-basic-test',
-                                 ['point-to-point','network', 'internet', 'applications'])
-    obj.source = 'codel-vs-droptail-basic-test.cc'
-
-    obj = bld.create_ns3_program('codel-vs-droptail-asymmetric',
-                                 ['point-to-point','network', 'internet', 'applications'])
-    obj.source = 'codel-vs-droptail-asymmetric.cc'
diff -Naur ns-3.24.1/src/internet/helper/internet-stack-helper.cc ns-3.25/src/internet/helper/internet-stack-helper.cc
--- ns-3.24.1/src/internet/helper/internet-stack-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/internet-stack-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -169,13 +169,13 @@
 #include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/ipv6-list-routing-helper.h"
 #include "ns3/ipv6-static-routing-helper.h"
 #include "ns3/ipv6-extension.h"
 #include "ns3/ipv6-extension-demux.h"
 #include "ns3/ipv6-extension-header.h"
 #include "ns3/icmpv6-l4-protocol.h"
 #include "ns3/global-router-interface.h"
+#include "ns3/traffic-control-layer.h"
 #include <limits>
 #include <map>
 
@@ -250,13 +250,11 @@
   Ipv4StaticRoutingHelper staticRouting;
   Ipv4GlobalRoutingHelper globalRouting;
   Ipv4ListRoutingHelper listRouting;
-  Ipv6ListRoutingHelper listRoutingv6;
   Ipv6StaticRoutingHelper staticRoutingv6;
   listRouting.Add (staticRouting, 0);
   listRouting.Add (globalRouting, -10);
-  listRoutingv6.Add (staticRoutingv6, 0);
   SetRoutingHelper (listRouting);
-  SetRoutingHelper (listRoutingv6);
+  SetRoutingHelper (staticRoutingv6);
 }
 
 InternetStackHelper::~InternetStackHelper ()
@@ -476,6 +474,7 @@
 
   if (m_ipv4Enabled || m_ipv6Enabled)
     {
+      CreateAndAggregateObjectFromTypeId (node, "ns3::TrafficControlLayer");
       CreateAndAggregateObjectFromTypeId (node, "ns3::UdpL4Protocol");
       node->AggregateObject (m_tcpFactory.Create<Object> ());
       Ptr<PacketSocketFactory> factory = CreateObject<PacketSocketFactory> ();
diff -Naur ns-3.24.1/src/internet/helper/ipv4-address-helper.cc ns-3.25/src/internet/helper/ipv4-address-helper.cc
--- ns-3.24.1/src/internet/helper/ipv4-address-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv4-address-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -21,9 +21,12 @@
 #include "ns3/ptr.h"
 #include "ns3/node.h"
 #include "ns3/net-device.h"
+#include "ns3/loopback-net-device.h"
 #include "ns3/ipv4.h"
 #include "ns3/ipv4-address-generator.h"
 #include "ns3/simulator.h"
+#include "ns3/traffic-control-helper.h"
+#include "ns3/traffic-control-layer.h"
 #include "ipv4-address-helper.h"
 
 namespace ns3 {
@@ -157,6 +160,17 @@
       ipv4->SetMetric (interface, 1);
       ipv4->SetUp (interface);
       retval.Add (ipv4, interface);
+
+      // Install the default traffic control configuration if the traffic
+      // control layer has been aggregated, if this is not 
+      // a loopback interface, and there is no queue disc installed already
+      Ptr<TrafficControlLayer> tc = node->GetObject<TrafficControlLayer> ();
+      if (tc && DynamicCast<LoopbackNetDevice> (device) == 0 && tc->GetRootQueueDiscOnDevice (device) == 0)
+        {
+          NS_LOG_LOGIC ("Installing default traffic control configuration");
+          TrafficControlHelper tcHelper = TrafficControlHelper::Default ();
+          tcHelper.Install (device);
+        }
     }
   return retval;
 }
diff -Naur ns-3.24.1/src/internet/helper/ipv4-interface-container.cc ns-3.25/src/internet/helper/ipv4-interface-container.cc
--- ns-3.24.1/src/internet/helper/ipv4-interface-container.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv4-interface-container.cc	2016-03-23 21:36:53.000000000 -0700
@@ -29,7 +29,7 @@
 }
 
 void
-Ipv4InterfaceContainer::Add (Ipv4InterfaceContainer other)
+Ipv4InterfaceContainer::Add (const Ipv4InterfaceContainer& other)
 {
   for (InterfaceVector::const_iterator i = other.m_interfaces.begin (); i != other.m_interfaces.end (); i++)
     {
diff -Naur ns-3.24.1/src/internet/helper/ipv4-interface-container.h ns-3.25/src/internet/helper/ipv4-interface-container.h
--- ns-3.24.1/src/internet/helper/ipv4-interface-container.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv4-interface-container.h	2016-03-23 21:36:53.000000000 -0700
@@ -66,7 +66,7 @@
    * Concatenate the entries in the other container with ours.
    * \param other container
    */
-  void Add (Ipv4InterfaceContainer other);
+  void Add (const Ipv4InterfaceContainer& other);
 
   /**
    * \brief Get an iterator which refers to the first pair in the 
diff -Naur ns-3.24.1/src/internet/helper/ipv6-address-helper.cc ns-3.25/src/internet/helper/ipv6-address-helper.cc
--- ns-3.24.1/src/internet/helper/ipv6-address-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv6-address-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -23,11 +23,14 @@
 #include "ns3/ptr.h"
 #include "ns3/node.h"
 #include "ns3/net-device.h"
+#include "ns3/loopback-net-device.h"
 #include "ns3/mac16-address.h"
 #include "ns3/mac48-address.h"
 #include "ns3/mac64-address.h"
 #include "ns3/ipv6.h"
 #include "ns3/ipv6-address-generator.h"
+#include "ns3/traffic-control-helper.h"
+#include "ns3/traffic-control-layer.h"
 
 #include "ipv6-address-helper.h"
 
@@ -140,6 +143,17 @@
       ipv6->SetUp (ifIndex);
 
       retval.Add (ipv6, ifIndex);
+
+      // Install the default traffic control configuration if the traffic
+      // control layer has been aggregated, if this is not
+      // a loopback interface, and there is no queue disc installed already
+      Ptr<TrafficControlLayer> tc = node->GetObject<TrafficControlLayer> ();
+      if (tc && DynamicCast<LoopbackNetDevice> (device) == 0 && tc->GetRootQueueDiscOnDevice (device) == 0)
+        {
+          NS_LOG_LOGIC ("Installing default traffic control configuration");
+          TrafficControlHelper tcHelper = TrafficControlHelper::Default ();
+          tcHelper.Install (device);
+        }
     }
   return retval;
 }
@@ -176,6 +190,17 @@
 
       ipv6->SetUp (ifIndex);
       retval.Add (ipv6, ifIndex);
+
+      // Install the default traffic control configuration if the traffic
+      // control layer has been aggregated, if this is not
+      // a loopback interface, and there is no queue disc installed already
+      Ptr<TrafficControlLayer> tc = node->GetObject<TrafficControlLayer> ();
+      if (tc && DynamicCast<LoopbackNetDevice> (device) == 0 && tc->GetRootQueueDiscOnDevice (device) == 0)
+        {
+          NS_LOG_LOGIC ("Installing default traffic control configuration");
+          TrafficControlHelper tcHelper = TrafficControlHelper::Default ();
+          tcHelper.Install (device);
+        }
     }
   return retval;
 }
diff -Naur ns-3.24.1/src/internet/helper/ipv6-interface-container.cc ns-3.25/src/internet/helper/ipv6-interface-container.cc
--- ns-3.24.1/src/internet/helper/ipv6-interface-container.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv6-interface-container.cc	2016-03-23 21:36:53.000000000 -0700
@@ -72,7 +72,7 @@
   m_interfaces.push_back (std::make_pair (ipv6, interface));
 }
 
-void Ipv6InterfaceContainer::Add (Ipv6InterfaceContainer& c)
+void Ipv6InterfaceContainer::Add (const Ipv6InterfaceContainer& c)
 {
   for (InterfaceVector::const_iterator it = c.m_interfaces.begin (); it != c.m_interfaces.end (); it++)
     {
@@ -103,6 +103,7 @@
 
           ipv6 = m_interfaces[other].first;
           routing = routingHelper.GetStaticRouting (ipv6);
+          NS_ASSERT_MSG (routing != 0, "Default router setup failed because no Ipv6StaticRouting was found on the node.");
           routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
         }
     }
@@ -141,6 +142,7 @@
 
           Ptr<Ipv6> ipv6 = m_interfaces[other].first;
           routing = routingHelper.GetStaticRouting (ipv6);
+          NS_ASSERT_MSG (routing != 0, "Default router setup failed because no Ipv6StaticRouting was found on the node.");
           routing->SetDefaultRoute (routerAddress, m_interfaces[other].second);
         }
     }
@@ -160,6 +162,7 @@
   Ipv6StaticRoutingHelper routingHelper;
 
   routing = routingHelper.GetStaticRouting (ipv6);
+  NS_ASSERT_MSG (routing != 0, "Default router setup failed because no Ipv6StaticRouting was found on the node.");
   routing->SetDefaultRoute (routerAddress, m_interfaces[i].second);
 }
 
@@ -196,6 +199,7 @@
   Ipv6StaticRoutingHelper routingHelper;
 
   routing = routingHelper.GetStaticRouting (ipv6);
+  NS_ASSERT_MSG (routing != 0, "Default router setup failed because no Ipv6StaticRouting was found on the node.");
   routing->SetDefaultRoute (routerLinkLocalAddress, m_interfaces[i].second);
 }
 
diff -Naur ns-3.24.1/src/internet/helper/ipv6-interface-container.h ns-3.25/src/internet/helper/ipv6-interface-container.h
--- ns-3.24.1/src/internet/helper/ipv6-interface-container.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ipv6-interface-container.h	2016-03-23 21:36:53.000000000 -0700
@@ -156,7 +156,7 @@
    * \brief Fusion with another Ipv6InterfaceContainer.
    * \param c container
    */
-  void Add (Ipv6InterfaceContainer& c);
+  void Add (const Ipv6InterfaceContainer& c);
 
   /**
    * \brief Add a couple of name/interface.
diff -Naur ns-3.24.1/src/internet/helper/rip-helper.cc ns-3.25/src/internet/helper/rip-helper.cc
--- ns-3.24.1/src/internet/helper/rip-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/helper/rip-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,182 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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/ipv4-list-routing.h"
+#include "ns3/rip.h"
+#include "rip-helper.h"
+
+namespace ns3 {
+
+RipHelper::RipHelper ()
+{
+  m_factory.SetTypeId ("ns3::Rip");
+}
+
+RipHelper::RipHelper (const RipHelper &o)
+  : m_factory (o.m_factory)
+{
+  m_interfaceExclusions = o.m_interfaceExclusions;
+  m_interfaceMetrics = o.m_interfaceMetrics;
+}
+
+RipHelper::~RipHelper ()
+{
+  m_interfaceExclusions.clear ();
+  m_interfaceMetrics.clear ();
+}
+
+RipHelper*
+RipHelper::Copy (void) const
+{
+  return new RipHelper (*this);
+}
+
+Ptr<Ipv4RoutingProtocol>
+RipHelper::Create (Ptr<Node> node) const
+{
+  Ptr<Rip> rip = m_factory.Create<Rip> ();
+
+  std::map<Ptr<Node>, std::set<uint32_t> >::const_iterator it = m_interfaceExclusions.find (node);
+
+  if(it != m_interfaceExclusions.end ())
+    {
+      rip->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++)
+        {
+          rip->SetInterfaceMetric (subiter->first, subiter->second);
+        }
+    }
+
+  node->AggregateObject (rip);
+  return rip;
+}
+
+void
+RipHelper::Set (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+
+
+int64_t
+RipHelper::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<Ipv4> ipv4 = node->GetObject<Ipv4> ();
+      NS_ASSERT_MSG (ipv4, "Ipv4 not installed on node");
+      Ptr<Ipv4RoutingProtocol> proto = ipv4->GetRoutingProtocol ();
+      NS_ASSERT_MSG (proto, "Ipv4 routing not installed on node");
+      Ptr<Rip> rip = DynamicCast<Rip> (proto);
+      if (rip)
+        {
+          currentStream += rip->AssignStreams (currentStream);
+          continue;
+        }
+      // RIP may also be in a list
+      Ptr<Ipv4ListRouting> list = DynamicCast<Ipv4ListRouting> (proto);
+      if (list)
+        {
+          int16_t priority;
+          Ptr<Ipv4RoutingProtocol> listProto;
+          Ptr<Rip> listRip;
+          for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++)
+            {
+              listProto = list->GetRoutingProtocol (i, priority);
+              listRip = DynamicCast<Rip> (listProto);
+              if (listRip)
+                {
+                  currentStream += listRip->AssignStreams (currentStream);
+                  break;
+                }
+            }
+        }
+    }
+  return (currentStream - stream);
+}
+
+void RipHelper::SetDefaultRouter (Ptr<Node> node, Ipv4Address nextHop, uint32_t interface)
+{
+  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
+  NS_ASSERT_MSG (ipv4, "Ipv4 not installed on node");
+  Ptr<Ipv4RoutingProtocol> proto = ipv4->GetRoutingProtocol ();
+  NS_ASSERT_MSG (proto, "Ipv4 routing not installed on node");
+  Ptr<Rip> rip = DynamicCast<Rip> (proto);
+  if (rip)
+    {
+      rip->AddDefaultRouteTo (nextHop, interface);
+    }
+  // RIP may also be in a list
+  Ptr<Ipv4ListRouting> list = DynamicCast<Ipv4ListRouting> (proto);
+  if (list)
+    {
+      int16_t priority;
+      Ptr<Ipv4RoutingProtocol> listProto;
+      Ptr<Rip> listRip;
+      for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++)
+        {
+          listProto = list->GetRoutingProtocol (i, priority);
+          listRip = DynamicCast<Rip> (listProto);
+          if (listRip)
+            {
+              listRip->AddDefaultRouteTo (nextHop, interface);
+              break;
+            }
+        }
+    }
+}
+
+void
+RipHelper::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 RipHelper::SetInterfaceMetric (Ptr<Node> node, uint32_t interface, uint8_t metric)
+{
+  m_interfaceMetrics[node][interface] = metric;
+}
+
+}
+
diff -Naur ns-3.24.1/src/internet/helper/rip-helper.h ns-3.25/src/internet/helper/rip-helper.h
--- ns-3.24.1/src/internet/helper/rip-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/helper/rip-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,148 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 RIP_HELPER_H
+#define RIP_HELPER_H
+
+#include "ns3/object-factory.h"
+#include "ns3/ipv4-routing-helper.h"
+#include "ns3/node-container.h"
+#include "ns3/node.h"
+
+namespace ns3 {
+
+/**
+ * \brief Helper class that adds RIP routing to nodes.
+ *
+ * This class is expected to be used in conjunction with
+ * ns3::InternetStackHelper::SetRoutingHelper
+ *
+ */
+class RipHelper : public Ipv4RoutingHelper
+{
+public:
+  /*
+   * Construct an RipHelper to make life easier while adding RIP
+   * routing to nodes.
+   */
+  RipHelper ();
+
+  /**
+   * \brief Construct an RipHelper from another previously
+   * initialized instance (Copy Constructor).
+   */
+  RipHelper (const RipHelper &);
+
+  virtual ~RipHelper ();
+
+  /**
+   * \returns pointer to clone of this RipHelper
+   *
+   * This method is mainly for internal use by the other helpers;
+   * clients are expected to free the dynamic memory allocated by this method
+   */
+  RipHelper* 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<Ipv4RoutingProtocol> 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, Ipv4Address nextHop, uint32_t interface);
+
+  /**
+   * \brief Exclude an interface from RIP protocol.
+   *
+   * You have to call this function \a before installing RIP in the nodes.
+   *
+   * Note: the exclusion means that RIP will not be propagated on that interface.
+   * The network prefix on that interface will be still considered in RIP.
+   *
+   * \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 RIP in the nodes.
+   *
+   * Note: RIP 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.
+   */
+  RipHelper &operator = (const RipHelper &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 /* RIP_HELPER_H */
+
diff -Naur ns-3.24.1/src/internet/helper/ripng-helper.h ns-3.25/src/internet/helper/ripng-helper.h
--- ns-3.24.1/src/internet/helper/ripng-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/helper/ripng-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -39,13 +39,13 @@
 {
 public:
   /*
-   * Construct an RipngHelper to make life easier while adding RIPng
+   * Construct an RipNgHelper to make life easier while adding RIPng
    * routing to nodes.
    */
   RipNgHelper ();
 
   /**
-   * \brief Construct an RipngHelper from another previously
+   * \brief Construct an RipNgHelper from another previously
    * initialized instance (Copy Constructor).
    */
   RipNgHelper (const RipNgHelper &);
@@ -53,7 +53,7 @@
   virtual ~RipNgHelper ();
 
   /**
-   * \returns pointer to clone of this Ipv4NixVectorHelper
+   * \returns pointer to clone of this RipNgHelper
    *
    * This method is mainly for internal use by the other helpers;
    * clients are expected to free the dynamic memory allocated by this method
@@ -72,7 +72,7 @@
    * \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
+   * This method controls the attributes of ns3::RipNg
    */
   void Set (std::string name, const AttributeValue &value);
 
diff -Naur ns-3.24.1/src/internet/model/arp-cache.cc ns-3.25/src/internet/model/arp-cache.cc
--- ns-3.24.1/src/internet/model/arp-cache.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/arp-cache.cc	2016-03-23 21:36:53.000000000 -0700
@@ -219,10 +219,12 @@
                             entry->GetRetries ());
               entry->MarkDead ();
               entry->ClearRetries ();
-              Ptr<Packet> pending = entry->DequeuePending ();
-              while (pending != 0)
+              Ipv4PayloadHeaderPair pending = entry->DequeuePending ();
+              while (pending.first != 0)
                 {
-                  m_dropTrace (pending);
+                  // add the Ipv4 header for tracing purposes
+                  pending.first->AddHeader (pending.second);
+                  m_dropTrace (pending.first);
                   pending = entry->DequeuePending ();
                 }
             }
@@ -392,16 +394,17 @@
 void
 ArpCache::Entry::MarkPermanent (void)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << m_macAddress);
   NS_ASSERT (!m_macAddress.IsInvalid ());
+
   m_state = PERMANENT;
   ClearRetries ();
   UpdateSeen ();
 }
 bool
-ArpCache::Entry::UpdateWaitReply (Ptr<Packet> waiting)
+ArpCache::Entry::UpdateWaitReply (Ipv4PayloadHeaderPair waiting)
 {
-  NS_LOG_FUNCTION (this << waiting);
+  NS_LOG_FUNCTION (this << waiting.first);
   NS_ASSERT (m_state == WAIT_REPLY);
   /* We are already waiting for an answer so
    * we dump the previously waiting packet and
@@ -415,11 +418,13 @@
   return true;
 }
 void 
-ArpCache::Entry::MarkWaitReply (Ptr<Packet> waiting)
+ArpCache::Entry::MarkWaitReply (Ipv4PayloadHeaderPair waiting)
 {
-  NS_LOG_FUNCTION (this << waiting);
+  NS_LOG_FUNCTION (this << waiting.first);
   NS_ASSERT (m_state == ALIVE || m_state == DEAD);
   NS_ASSERT (m_pending.empty ());
+  NS_ASSERT_MSG (waiting.first, "Can not add a null packet to the ARP queue");
+
   m_state = WAIT_REPLY;
   m_pending.push_back (waiting);
   UpdateSeen ();
@@ -482,17 +487,18 @@
     } 
   return false;
 }
-Ptr<Packet> 
+ArpCache::Ipv4PayloadHeaderPair
 ArpCache::Entry::DequeuePending (void)
 {
   NS_LOG_FUNCTION (this);
   if (m_pending.empty ())
     {
-      return 0;
+      Ipv4Header h;
+      return Ipv4PayloadHeaderPair (0, h);
     }
   else
     {
-      Ptr<Packet> p = m_pending.front ();
+      Ipv4PayloadHeaderPair p = m_pending.front ();
       m_pending.pop_front ();
       return p;
     }
diff -Naur ns-3.24.1/src/internet/model/arp-cache.h ns-3.25/src/internet/model/arp-cache.h
--- ns-3.24.1/src/internet/model/arp-cache.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/arp-cache.h	2016-03-23 21:36:53.000000000 -0700
@@ -39,6 +39,7 @@
 
 class NetDevice;
 class Ipv4Interface;
+class Ipv4Header;
 
 /**
  * \ingroup arp
@@ -168,6 +169,11 @@
   void PrintArpCache (Ptr<OutputStreamWrapper> stream);
 
   /**
+   * \brief Pair of a packet and an Ipv4 header.
+   */
+  typedef std::pair<Ptr<Packet>, Ipv4Header> Ipv4PayloadHeaderPair;
+
+  /**
    * \brief A record that that holds information about an ArpCache entry
    */
   class Entry {
@@ -189,7 +195,7 @@
     /**
      * \param waiting
      */
-    void MarkWaitReply (Ptr<Packet> waiting);
+    void MarkWaitReply (Ipv4PayloadHeaderPair waiting);
     /**
      * \brief Changes the state of this entry to Permanent.
      *
@@ -200,7 +206,7 @@
      * \param waiting
      * \return 
      */
-    bool UpdateWaitReply (Ptr<Packet> waiting);
+    bool UpdateWaitReply (Ipv4PayloadHeaderPair waiting);
     /**
      * \return True if the state of this entry is dead; false otherwise.
      */
@@ -244,7 +250,7 @@
      * \returns 0 is no packet is pending, the next packet to send if 
      *            packets are pending.
      */
-    Ptr<Packet> DequeuePending (void);
+    Ipv4PayloadHeaderPair DequeuePending (void);
     /**
      * \brief Clear the pending packet list
      */
@@ -290,7 +296,7 @@
     Time m_lastSeen; //!< last moment a packet from that address has been seen
     Address m_macAddress; //!< entry's MAC address
     Ipv4Address m_ipv4Address; //!< entry's IP address
-    std::list<Ptr<Packet> > m_pending; //!< list of pending packets for the entry's IP
+    std::list<Ipv4PayloadHeaderPair> m_pending; //!< list of pending packets for the entry's IP
     uint32_t m_retries; //!< rerty counter
   };
 
diff -Naur ns-3.24.1/src/internet/model/arp-l3-protocol.cc ns-3.25/src/internet/model/arp-l3-protocol.cc
--- ns-3.24.1/src/internet/model/arp-l3-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/arp-l3-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -229,10 +229,10 @@
                                        << " for waiting entry -- flush");
                   Address from_mac = arp.GetSourceHardwareAddress ();
                   entry->MarkAlive (from_mac);
-                  Ptr<Packet> pending = entry->DequeuePending ();
-                  while (pending != 0)
+                  ArpCache::Ipv4PayloadHeaderPair pending = entry->DequeuePending ();
+                  while (pending.first != 0)
                     {
-                      cache->GetInterface ()->Send (pending,
+                      cache->GetInterface ()->Send (pending.first, pending.second,
                                                     arp.GetSourceIpv4Address ());
                       pending = entry->DequeuePending ();
                     }
@@ -264,7 +264,7 @@
 }
 
 bool 
-ArpL3Protocol::Lookup (Ptr<Packet> packet, Ipv4Address destination, 
+ArpL3Protocol::Lookup (Ptr<Packet> packet, const Ipv4Header & ipHeader, Ipv4Address destination,
                        Ptr<NetDevice> device,
                        Ptr<ArpCache> cache,
                        Address *hardwareDestination)
@@ -279,14 +279,14 @@
             {
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", dead entry for " << destination << " expired -- send arp request");
-              entry->MarkWaitReply (packet);
+              entry->MarkWaitReply (ArpCache::Ipv4PayloadHeaderPair (packet, ipHeader));
               Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
             } 
           else if (entry->IsAlive ()) 
             {
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", alive entry for " << destination << " expired -- send arp request");
-              entry->MarkWaitReply (packet);
+              entry->MarkWaitReply (ArpCache::Ipv4PayloadHeaderPair (packet, ipHeader));
               Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
             } 
           else
@@ -300,6 +300,8 @@
             {
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", dead entry for " << destination << " valid -- drop");
+              // add the Ipv4 header for tracing purposes
+              packet->AddHeader (ipHeader);
               m_dropTrace (packet);
             } 
           else if (entry->IsAlive ()) 
@@ -313,8 +315,10 @@
             {
               NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                             ", wait reply for " << destination << " valid -- drop previous");
-              if (!entry->UpdateWaitReply (packet))
+              if (!entry->UpdateWaitReply (ArpCache::Ipv4PayloadHeaderPair (packet, ipHeader)))
                 {
+                  // add the Ipv4 header for tracing purposes
+                  packet->AddHeader (ipHeader);
                   m_dropTrace (packet);
                 }
             }
@@ -337,7 +341,7 @@
       NS_LOG_LOGIC ("node="<<m_node->GetId ()<<
                     ", no entry for " << destination << " -- send arp request");
       entry = cache->Add (destination);
-      entry->MarkWaitReply (packet);
+      entry->MarkWaitReply (ArpCache::Ipv4PayloadHeaderPair (packet, ipHeader));
       Simulator::Schedule (Time (MilliSeconds (m_requestJitter->GetValue ())), &ArpL3Protocol::SendArpRequest, this, cache, destination);
     }
   return false;
diff -Naur ns-3.24.1/src/internet/model/arp-l3-protocol.h ns-3.25/src/internet/model/arp-l3-protocol.h
--- ns-3.24.1/src/internet/model/arp-l3-protocol.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/arp-l3-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -21,7 +21,7 @@
 #define ARP_L3_PROTOCOL_H
 
 #include <list>
-#include "ns3/ipv4-address.h"
+#include "ns3/ipv4-header.h"
 #include "ns3/net-device.h"
 #include "ns3/address.h"
 #include "ns3/ptr.h"
@@ -87,13 +87,14 @@
   /**
    * \brief Perform an ARP lookup
    * \param p the packet
+   * \param ipHeader the IPv4 header
    * \param destination destination IP address
    * \param device outgoing device
    * \param cache ARP cache
    * \param hardwareDestination filled with the destination MAC address (if the entry exists)
    * \return true if there is a matching ARP Entry
    */
-  bool Lookup (Ptr<Packet> p, Ipv4Address destination, 
+  bool Lookup (Ptr<Packet> p, const Ipv4Header & ipHeader, Ipv4Address destination,
                Ptr<NetDevice> device,
                Ptr<ArpCache> cache,
                Address *hardwareDestination);
diff -Naur ns-3.24.1/src/internet/model/codel-queue.cc ns-3.25/src/internet/model/codel-queue.cc
--- ns-3.24.1/src/internet/model/codel-queue.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/codel-queue.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,606 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 Andrew McGregor
- *
- * 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
- *
- * Codel, the COntrolled DELay Queueing discipline
- * Based on ns2 simulation code presented by Kathie Nichols
- *
- * This port based on linux kernel code by
- * Authors:	Dave TÃ¤ht <d@taht.net>
- *		Eric Dumazet <edumazet@google.com>
- *
- * Ported to ns-3 by: Andrew McGregor <andrewmcgr@gmail.com>
-*/
-
-#include "ns3/log.h"
-#include "ns3/enum.h"
-#include "ns3/uinteger.h"
-#include "ns3/abort.h"
-#include "codel-queue.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("CoDelQueue");
-
-/**
- * Performs a reciprocal divide, similar to the
- * Linux kernel reciprocal_divide function
- * \param A numerator
- * \param R reciprocal of the denominator B
- * \return the value of A/B
- */
-/* borrowed from the linux kernel */
-static inline uint32_t ReciprocalDivide (uint32_t A, uint32_t R)
-{
-  return (uint32_t)(((uint64_t)A * R) >> 32);
-}
-
-/* end kernel borrowings */
-
-/**
- * Returns the current time translated in CoDel time representation
- * \return the current time
- */
-static uint32_t CoDelGetTime (void)
-{
-  Time time = Simulator::Now ();
-  uint64_t ns = time.GetNanoSeconds ();
-
-  return ns >> CODEL_SHIFT;
-}
-
-/**
- * CoDel time stamp, used to carry CoDel time informations.
- */
-class CoDelTimestampTag : public Tag
-{
-public:
-  CoDelTimestampTag ();
-  /**
-   * \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 i) const;
-  virtual void Deserialize (TagBuffer i);
-  virtual void Print (std::ostream &os) const;
-
-  /**
-   * Gets the Tag creation time
-   * @return the time object stored in the tag
-   */
-  Time GetTxTime (void) const;
-private:
-  uint64_t m_creationTime; //!< Tag creation time
-};
-
-CoDelTimestampTag::CoDelTimestampTag ()
-  : m_creationTime (Simulator::Now ().GetTimeStep ())
-{
-}
-
-TypeId
-CoDelTimestampTag::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::CoDelTimestampTag")
-    .SetParent<Tag> ()
-    .AddConstructor<CoDelTimestampTag> ()
-    .AddAttribute ("CreationTime",
-                   "The time at which the timestamp was created",
-                   StringValue ("0.0s"),
-                   MakeTimeAccessor (&CoDelTimestampTag::GetTxTime),
-                   MakeTimeChecker ())
-  ;
-  return tid;
-}
-
-TypeId
-CoDelTimestampTag::GetInstanceTypeId (void) const
-{
-  return GetTypeId ();
-}
-
-uint32_t
-CoDelTimestampTag::GetSerializedSize (void) const
-{
-  return 8;
-}
-void
-CoDelTimestampTag::Serialize (TagBuffer i) const
-{
-  i.WriteU64 (m_creationTime);
-}
-void
-CoDelTimestampTag::Deserialize (TagBuffer i)
-{
-  m_creationTime = i.ReadU64 ();
-}
-void
-CoDelTimestampTag::Print (std::ostream &os) const
-{
-  os << "CreationTime=" << m_creationTime;
-}
-Time
-CoDelTimestampTag::GetTxTime (void) const
-{
-  return TimeStep (m_creationTime);
-}
-
-NS_OBJECT_ENSURE_REGISTERED (CoDelQueue);
-
-TypeId CoDelQueue::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::CoDelQueue")
-    .SetParent<Queue> ()
-    .SetGroupName ("Internet")
-    .AddConstructor<CoDelQueue> ()
-    .AddAttribute ("Mode",
-                   "Whether to use Bytes (see MaxBytes) or Packets (see MaxPackets) as the maximum queue size metric.",
-                   EnumValue (QUEUE_MODE_BYTES),
-                   MakeEnumAccessor (&CoDelQueue::SetMode),
-                   MakeEnumChecker (QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
-                                    QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
-    .AddAttribute ("MaxPackets",
-                   "The maximum number of packets accepted by this CoDelQueue.",
-                   UintegerValue (DEFAULT_CODEL_LIMIT),
-                   MakeUintegerAccessor (&CoDelQueue::m_maxPackets),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxBytes",
-                   "The maximum number of bytes accepted by this CoDelQueue.",
-                   UintegerValue (1500 * DEFAULT_CODEL_LIMIT),
-                   MakeUintegerAccessor (&CoDelQueue::m_maxBytes),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MinBytes",
-                   "The CoDel algorithm minbytes parameter.",
-                   UintegerValue (1500),
-                   MakeUintegerAccessor (&CoDelQueue::m_minBytes),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Interval",
-                   "The CoDel algorithm interval",
-                   StringValue ("100ms"),
-                   MakeTimeAccessor (&CoDelQueue::m_interval),
-                   MakeTimeChecker ())
-    .AddAttribute ("Target",
-                   "The CoDel algorithm target queue delay",
-                   StringValue ("5ms"),
-                   MakeTimeAccessor (&CoDelQueue::m_target),
-                   MakeTimeChecker ())
-    .AddTraceSource ("Count",
-                     "CoDel count",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_count),
-                     "ns3::TracedValueCallback::Uint32")
-    .AddTraceSource ("DropCount",
-                     "CoDel drop count",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropCount),
-                     "ns3::TracedValueCallback::Uint32")
-    .AddTraceSource ("LastCount",
-                     "CoDel lastcount",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_lastCount),
-                     "ns3::TracedValueCallback::Uint32")
-    .AddTraceSource ("DropState",
-                     "Dropping state",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropping),
-                     "ns3::TracedValueCallback::Bool")
-    .AddTraceSource ("BytesInQueue",
-                     "Number of bytes in the queue",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_bytesInQueue),
-                     "ns3::TracedValueCallback::Uint32")
-    .AddTraceSource ("Sojourn",
-                     "Time in the queue",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_sojourn),
-                     "ns3::Time::TracedValueCallback")
-    .AddTraceSource ("DropNext",
-                     "Time until next packet drop",
-                     MakeTraceSourceAccessor (&CoDelQueue::m_dropNext),
-                     "ns3::TracedValueCallback::Uint32")
-  ;
-
-  return tid;
-}
-
-CoDelQueue::CoDelQueue ()
-  : Queue (),
-    m_packets (),
-    m_maxBytes (),
-    m_bytesInQueue (0),
-    m_count (0),
-    m_dropCount (0),
-    m_lastCount (0),
-    m_dropping (false),
-    m_recInvSqrt (~0U >> REC_INV_SQRT_SHIFT),
-    m_firstAboveTime (0),
-    m_dropNext (0),
-    m_state1 (0),
-    m_state2 (0),
-    m_state3 (0),
-    m_states (0),
-    m_dropOverLimit (0),
-    m_sojourn (0)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-CoDelQueue::~CoDelQueue ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void
-CoDelQueue::NewtonStep (void)
-{
-  NS_LOG_FUNCTION (this);
-  uint32_t invsqrt = ((uint32_t) m_recInvSqrt) << REC_INV_SQRT_SHIFT;
-  uint32_t invsqrt2 = ((uint64_t) invsqrt * invsqrt) >> 32;
-  uint64_t val = (3ll << 32) - ((uint64_t) m_count * invsqrt2);
-
-  val >>= 2; /* avoid overflow */
-  val = (val * invsqrt) >> (32 - 2 + 1);
-  m_recInvSqrt = val >> REC_INV_SQRT_SHIFT;
-}
-
-uint32_t
-CoDelQueue::ControlLaw (uint32_t t)
-{
-  NS_LOG_FUNCTION (this);
-  return t + ReciprocalDivide (Time2CoDel (m_interval), m_recInvSqrt << REC_INV_SQRT_SHIFT);
-}
-
-void
-CoDelQueue::SetMode (CoDelQueue::QueueMode mode)
-{
-  NS_LOG_FUNCTION (mode);
-  m_mode = mode;
-}
-
-CoDelQueue::QueueMode
-CoDelQueue::GetMode (void)
-{
-  NS_LOG_FUNCTION (this);
-  return m_mode;
-}
-
-bool
-CoDelQueue::DoEnqueue (Ptr<Packet> p)
-{
-  NS_LOG_FUNCTION (this << p);
-
-  if (m_mode == QUEUE_MODE_PACKETS && (m_packets.size () + 1 > m_maxPackets))
-    {
-      NS_LOG_LOGIC ("Queue full (at max packets) -- droppping pkt");
-      Drop (p);
-      ++m_dropOverLimit;
-      return false;
-    }
-
-  if (m_mode == QUEUE_MODE_BYTES && (m_bytesInQueue + p->GetSize () > m_maxBytes))
-    {
-      NS_LOG_LOGIC ("Queue full (packet would exceed max bytes) -- droppping pkt");
-      Drop (p);
-      ++m_dropOverLimit;
-      return false;
-    }
-
-  // Tag packet with current time for DoDequeue() to compute sojourn time
-  CoDelTimestampTag tag;
-  p->AddPacketTag (tag);
-
-  m_bytesInQueue += p->GetSize ();
-  m_packets.push (p);
-
-  NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
-
-  return true;
-}
-
-bool
-CoDelQueue::OkToDrop (Ptr<Packet> p, uint32_t now)
-{
-  NS_LOG_FUNCTION (this);
-  CoDelTimestampTag tag;
-  bool okToDrop;
-
-  bool found = p->RemovePacketTag (tag);
-  NS_ASSERT_MSG (found, "found a packet without an input timestamp tag");
-  NS_UNUSED (found);    //silence compiler warning
-  Time delta = Simulator::Now () - tag.GetTxTime ();
-  NS_LOG_INFO ("Sojourn time " << delta.GetSeconds ());
-  m_sojourn = delta;
-  uint32_t sojournTime = Time2CoDel (delta);
-
-  if (CoDelTimeBefore (sojournTime, Time2CoDel (m_target))
-      || m_bytesInQueue < m_minBytes)
-    {
-      // went below so we'll stay below for at least q->interval
-      NS_LOG_LOGIC ("Sojourn time is below target or number of bytes in queue is less than minBytes; packet should not be dropped");
-      m_firstAboveTime = 0;
-      return false;
-    }
-  okToDrop = false;
-  if (m_firstAboveTime == 0)
-    {
-      /* just went above from below. If we stay above
-       * for at least q->interval we'll say it's ok to drop
-       */
-      NS_LOG_LOGIC ("Sojourn time has just gone above target from below, need to stay above for at least q->interval before packet can be dropped. ");
-      m_firstAboveTime = now + Time2CoDel (m_interval);
-    }
-  else
-  if (CoDelTimeAfter (now, m_firstAboveTime))
-    {
-      NS_LOG_LOGIC ("Sojourn time has been above target for at least q->interval; it's OK to (possibly) drop packet.");
-      okToDrop = true;
-      ++m_state1;
-    }
-  return okToDrop;
-}
-
-Ptr<Packet>
-CoDelQueue::DoDequeue (void)
-{
-  NS_LOG_FUNCTION (this);
-
-  if (m_packets.empty ())
-    {
-      // Leave dropping state when queue is empty
-      m_dropping = false;
-      m_firstAboveTime = 0;
-      NS_LOG_LOGIC ("Queue empty");
-      return 0;
-    }
-  uint32_t now = CoDelGetTime ();
-  Ptr<Packet> p = m_packets.front ();
-  m_packets.pop ();
-  m_bytesInQueue -= p->GetSize ();
-
-  NS_LOG_LOGIC ("Popped " << p);
-  NS_LOG_LOGIC ("Number packets remaining " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes remaining " << m_bytesInQueue);
-
-  // Determine if p should be dropped
-  bool okToDrop = OkToDrop (p, now);
-
-  if (m_dropping)
-    { // In the dropping state (sojourn time has gone above target and hasn't come down yet)
-      // Check if we can leave the dropping state or next drop should occur
-      NS_LOG_LOGIC ("In dropping state, check if it's OK to leave or next drop should occur");
-      if (!okToDrop)
-        {
-          /* sojourn time fell below target - leave dropping state */
-          NS_LOG_LOGIC ("Sojourn time goes below target, it's OK to leave dropping state.");
-          m_dropping = false;
-        }
-      else
-      if (CoDelTimeAfterEq (now, m_dropNext))
-        {
-          m_state2++;
-          while (m_dropping && CoDelTimeAfterEq (now, m_dropNext))
-            {
-              // It's time for the next drop. Drop the current packet and
-              // dequeue the next. The dequeue might take us out of dropping
-              // state. If not, schedule the next drop.
-              // A large amount of packets in queue might result in drop
-              // rates so high that the next drop should happen now,
-              // hence the while loop.
-              NS_LOG_LOGIC ("Sojourn time is still above target and it's time for next drop; dropping " << p);
-              Drop (p);
-
-              // p was in queue, trace dequeue and update stats manually
-              m_traceDequeue (p);
-              m_nBytes -= p->GetSize ();
-              m_nPackets--;
-
-              ++m_dropCount;
-              ++m_count;
-              NewtonStep ();
-              if (m_packets.empty ())
-                {
-                  m_dropping = false;
-                  NS_LOG_LOGIC ("Queue empty");
-                  ++m_states;
-                  return 0;
-                }
-              p = m_packets.front ();
-              m_packets.pop ();
-              m_bytesInQueue -= p->GetSize ();
-
-              NS_LOG_LOGIC ("Popped " << p);
-              NS_LOG_LOGIC ("Number packets remaining " << m_packets.size ());
-              NS_LOG_LOGIC ("Number bytes remaining " << m_bytesInQueue);
-
-              if (!OkToDrop (p, now))
-                {
-                  /* leave dropping state */
-                  NS_LOG_LOGIC ("Leaving dropping state");
-                  m_dropping = false;
-                }
-              else
-                {
-                  /* schedule the next drop */
-                  NS_LOG_LOGIC ("Running ControlLaw for input m_dropNext: " << (double)m_dropNext / 1000000);
-                  m_dropNext = ControlLaw (m_dropNext);
-                  NS_LOG_LOGIC ("Scheduled next drop at " << (double)m_dropNext / 1000000);
-                }
-            }
-        }
-    }
-  else
-    {
-      // Not in the dropping state
-      // Decide if we have to enter the dropping state and drop the first packet
-      NS_LOG_LOGIC ("Not in dropping state; decide if we have to enter the state and drop the first packet");
-      if (okToDrop)
-        {
-          // Drop the first packet and enter dropping state unless the queue is empty
-          NS_LOG_LOGIC ("Sojourn time goes above target, dropping the first packet " << p << " and entering the dropping state");
-          ++m_dropCount;
-          Drop (p);
-
-          // p was in queue, trace the dequeue and update stats manually
-          m_traceDequeue (p);
-          m_nBytes -= p->GetSize ();
-          m_nPackets--;
-
-          if (m_packets.empty ())
-            {
-              m_dropping = false;
-              okToDrop = false;
-              NS_LOG_LOGIC ("Queue empty");
-              ++m_states;
-            }
-          else
-            {
-              p = m_packets.front ();
-              m_packets.pop ();
-              m_bytesInQueue -= p->GetSize ();
-
-              NS_LOG_LOGIC ("Popped " << p);
-              NS_LOG_LOGIC ("Number packets remaining " << m_packets.size ());
-              NS_LOG_LOGIC ("Number bytes remaining " << m_bytesInQueue);
-
-              okToDrop = OkToDrop (p, now);
-              m_dropping = true;
-            }
-          ++m_state3;
-          /*
-           * if min went above target close to when we last went below it
-           * assume that the drop rate that controlled the queue on the
-           * last cycle is a good starting point to control it now.
-           */
-          int delta = m_count - m_lastCount;
-          if (delta > 1 && CoDelTimeBefore (now - m_dropNext, 16 * Time2CoDel (m_interval)))
-            {
-              m_count = delta;
-              NewtonStep ();
-            }
-          else
-            {
-              m_count = 1;
-              m_recInvSqrt = ~0U >> REC_INV_SQRT_SHIFT;
-            }
-          m_lastCount = m_count;
-          NS_LOG_LOGIC ("Running ControlLaw for input now: " << (double)now);
-          m_dropNext = ControlLaw (now);
-          NS_LOG_LOGIC ("Scheduled next drop at " << (double)m_dropNext / 1000000 << " now " << (double)now / 1000000);
-        }
-    }
-  ++m_states;
-  return p;
-}
-
-uint32_t
-CoDelQueue::GetQueueSize (void)
-{
-  NS_LOG_FUNCTION (this);
-  if (GetMode () == QUEUE_MODE_BYTES)
-    {
-      return m_bytesInQueue;
-    }
-  else if (GetMode () == QUEUE_MODE_PACKETS)
-    {
-      return m_packets.size ();
-    }
-  else
-    {
-      NS_ABORT_MSG ("Unknown mode.");
-    }
-}
-
-uint32_t
-CoDelQueue::GetDropOverLimit (void)
-{
-  return m_dropOverLimit;
-}
-
-uint32_t
-CoDelQueue::GetDropCount (void)
-{
-  return m_dropCount;
-}
-
-Time
-CoDelQueue::GetTarget (void)
-{
-  return m_target;
-}
-
-Time
-CoDelQueue::GetInterval (void)
-{
-  return m_interval;
-}
-
-uint32_t
-CoDelQueue::GetDropNext (void)
-{
-  return m_dropNext;
-}
-
-Ptr<const Packet>
-CoDelQueue::DoPeek (void) const
-{
-  NS_LOG_FUNCTION (this);
-
-  if (m_packets.empty ())
-    {
-      NS_LOG_LOGIC ("Queue empty");
-      return 0;
-    }
-
-  Ptr<Packet> p = m_packets.front ();
-
-  NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
-
-  return p;
-}
-
-bool
-CoDelQueue::CoDelTimeAfter (uint32_t a, uint32_t b)
-{
-  return  ((int)(a) - (int)(b) > 0);
-}
-
-bool
-CoDelQueue::CoDelTimeAfterEq (uint32_t a, uint32_t b)
-{
-  return ((int)(a) - (int)(b) >= 0);
-}
-
-bool
-CoDelQueue::CoDelTimeBefore (uint32_t a, uint32_t b)
-{
-  return  ((int)(a) - (int)(b) < 0);
-}
-
-bool
-CoDelQueue::CoDelTimeBeforeEq (uint32_t a, uint32_t b)
-{
-  return ((int)(a) - (int)(b) <= 0);
-}
-
-uint32_t
-CoDelQueue::Time2CoDel (Time t)
-{
-  return (t.GetNanoSeconds () >> CODEL_SHIFT);
-}
-
-
-} // namespace ns3
-
diff -Naur ns-3.24.1/src/internet/model/codel-queue.h ns-3.25/src/internet/model/codel-queue.h
--- ns-3.24.1/src/internet/model/codel-queue.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/codel-queue.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,251 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 Andrew McGregor
- *
- * 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
- *
- * Codel, the COntrolled DELay Queueing discipline
- * Based on ns2 simulation code presented by Kathie Nichols
- *
- * This port based on linux kernel code by
- * Authors:	Dave TÃ¤ht <d@taht.net>
- *		Eric Dumazet <edumazet@google.com>
- *
- * Ported to ns-3 by: Andrew McGregor <andrewmcgr@gmail.com>
- */
-
-#ifndef CODEL_H
-#define CODEL_H
-
-#include <queue>
-#include "ns3/packet.h"
-#include "ns3/queue.h"
-#include "ns3/nstime.h"
-#include "ns3/simulator.h"
-#include "ns3/string.h"
-#include "ns3/traced-value.h"
-#include "ns3/trace-source-accessor.h"
-
-class CoDelQueueNewtonStepTest;  // Forward declaration for unit test
-class CoDelQueueControlLawTest;  // Forward declaration for unit test
-
-namespace ns3 {
-
-/**
- * Number of bits discarded from the time representation.
- * The time is assumed to be in nanoseconds.
- */
-static const int  CODEL_SHIFT = 10;
-
-#define DEFAULT_CODEL_LIMIT 1000
-#define REC_INV_SQRT_BITS (8 * sizeof(uint16_t))
-#define REC_INV_SQRT_SHIFT (32 - REC_INV_SQRT_BITS)
-
-class TraceContainer;
-
-/**
- * \ingroup queue
- *
- * \brief A CoDel packet queue
- */
-
-class CoDelQueue : public Queue
-{
-public:
-  /**
-   * Get the type ID.
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-
-  /**
-   * \brief CoDelQueue Constructor
-   *
-   * Creates a CoDel queue
-   */
-  CoDelQueue ();
-
-  virtual ~CoDelQueue ();
-
-  /**
-   * \brief Set the operating mode of this device.
-   *
-   * \param mode The operating mode of this device.
-   */
-  void SetMode (CoDelQueue::QueueMode mode);
-
-  /**
-   * \brief Get the encapsulation mode of this device.
-   *
-   * \returns The encapsulation mode of this device.
-   */
-  CoDelQueue::QueueMode  GetMode (void);
-
-  /**
-   * \brief Get the current value of the queue in bytes or packets.
-   *
-   * \returns The queue size in bytes or packets.
-   */
-  uint32_t GetQueueSize (void);
-
-  /**
-   * \brief Get the number of packets dropped when packets
-   * arrive at a full queue and cannot be enqueued.
-   *
-   * \returns The number of dropped packets
-   */
-  uint32_t GetDropOverLimit (void);
-
-  /**
-   * \brief Get the number of packets dropped according to CoDel algorithm
-   *
-   * \returns The number of dropped packets
-   */
-  uint32_t GetDropCount (void);
-
-  /**
-   * \brief Get the target queue delay
-   *
-   * \returns The target queue delay
-   */
-  Time GetTarget (void);
-
-  /**
-   * \brief Get the interval
-   *
-   * \returns The interval
-   */
-  Time GetInterval (void);
-
-  /**
-   * \brief Get the time for next packet drop while in the dropping state
-   *
-   * \returns The time for next packet drop
-   */
-  uint32_t GetDropNext (void);
-
-private:
-  friend class::CoDelQueueNewtonStepTest;  // Test code
-  friend class::CoDelQueueControlLawTest;  // Test code
-  /**
-   * \brief Add a packet to the queue
-   *
-   * \param p The packet to be added
-   * \returns True if the packet can be added, False if the packet is dropped due to full queue
-   */
-  virtual bool DoEnqueue (Ptr<Packet> p);
-
-  /**
-   * \brief Remove a packet from queue based on the current state
-   * If we are in dropping state, check if we could leave the dropping state
-   * or if we should perform next drop
-   * If we are not currently in dropping state, check if we need to enter the state
-   * and drop the first packet
-   *
-   * \returns The packet that is examined
-   */
-  virtual Ptr<Packet> DoDequeue (void);
-
-  virtual Ptr<const Packet> DoPeek (void) const;
-
-  /**
-   * \brief Calculate the reciprocal square root of m_count by using Newton's method
-   *  http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Iterative_methods_for_reciprocal_square_roots
-   * m_recInvSqrt (new) = (m_recInvSqrt (old) / 2) * (3 - m_count * m_recInvSqrt^2)
-   */
-  void NewtonStep (void);
-
-  /**
-   * \brief Determine the time for next drop
-   * CoDel control law is t + m_interval/sqrt(m_count).
-   * Here, we use m_recInvSqrt calculated by Newton's method in NewtonStep() to avoid
-   * both sqrt() and divide operations
-   *
-   * \param t Current next drop time
-   * \returns The new next drop time:
-   */
-  uint32_t ControlLaw (uint32_t t);
-
-  /**
-   * \brief Determine whether a packet is OK to be dropped. The packet
-   * may not be actually dropped (depending on the drop state)
-   *
-   * \param p The packet that is considered
-   * \param now The current time represented as 32-bit unsigned integer (us)
-   * \returns True if it is OK to drop the packet (sojourn time above target for at least interval)
-   */
-  bool OkToDrop (Ptr<Packet> p, uint32_t now);
-
-  /**
-   * Check if CoDel time a is successive to b
-   * @param a left operand
-   * @param b right operand
-   * @return true if a is greater than b
-   */
-  bool CoDelTimeAfter (uint32_t a, uint32_t b);
-  /**
-   * Check if CoDel time a is successive or equal to b
-   * @param a left operand
-   * @param b right operand
-   * @return true if a is greater than or equal to b
-   */
-  bool CoDelTimeAfterEq (uint32_t a, uint32_t b);
-  /**
-   * Check if CoDel time a is preceding b
-   * @param a left operand
-   * @param b right operand
-   * @return true if a is less than to b
-   */
-  bool CoDelTimeBefore (uint32_t a, uint32_t b);
-  /**
-   * Check if CoDel time a is preceding or equal to b
-   * @param a left operand
-   * @param b right operand
-   * @return true if a is less than or equal to b
-   */
-  bool CoDelTimeBeforeEq (uint32_t a, uint32_t b);
-
-  /**
-   * returned unsigned 32-bit integer representation of the input Time object
-   * units are microseconds
-   */
-  uint32_t Time2CoDel (Time t);
-
-  std::queue<Ptr<Packet> > m_packets;     //!< The packet queue
-  uint32_t m_maxPackets;                  //!< Max # of packets accepted by the queue
-  uint32_t m_maxBytes;                    //!< Max # of bytes accepted by the queue
-  TracedValue<uint32_t> m_bytesInQueue;   //!< The total number of bytes in queue
-  uint32_t m_minBytes;                    //!< Minimum bytes in queue to allow a packet drop
-  Time m_interval;                        //!< 100 ms sliding minimum time window width
-  Time m_target;                          //!< 5 ms target queue delay
-  TracedValue<uint32_t> m_count;          //!< Number of packets dropped since entering drop state
-  TracedValue<uint32_t> m_dropCount;      //!< Number of dropped packets according CoDel algorithm
-  TracedValue<uint32_t> m_lastCount;      //!< Last number of packets dropped since entering drop state
-  TracedValue<bool> m_dropping;           //!< True if in dropping state
-  uint16_t m_recInvSqrt;                  //!< Reciprocal inverse square root
-  uint32_t m_firstAboveTime;              //!< Time to declare sojourn time above target
-  TracedValue<uint32_t> m_dropNext;       //!< Time to drop next packet
-  uint32_t m_state1;                      //!< Number of times packet sojourn goes above target for interval
-  uint32_t m_state2;                      //!< Number of times we perform next drop while in dropping state
-  uint32_t m_state3;                      //!< Number of times we enter drop state and drop the fist packet
-  uint32_t m_states;                      //!< Total number of times we are in state 1, state 2, or state 3
-  uint32_t m_dropOverLimit;               //!< The number of packets dropped due to full queue
-  QueueMode     m_mode;                   //!< The operating mode (Bytes or packets)
-  TracedValue<Time> m_sojourn;            //!< Time in queue
-};
-
-} // namespace ns3
-
-#endif /* CODEL_H */
diff -Naur ns-3.24.1/src/internet/model/global-router-interface.cc ns-3.25/src/internet/model/global-router-interface.cc
--- ns-3.24.1/src/internet/model/global-router-interface.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/global-router-interface.cc	2016-03-23 21:36:53.000000000 -0700
@@ -791,7 +791,8 @@
   // this is a stub network.  If we find another router, then what we have here
   // is a transit network.
   //
-  if (AnotherRouterOnLink (nd, true) == false)
+  ClearBridgesVisited ();
+  if (AnotherRouterOnLink (nd) == false)
     {
       //
       // This is a net device connected to a stub network
@@ -830,7 +831,8 @@
       // gets the IP interface address of the designated router in this 
       // case.
       //
-      Ipv4Address desigRtr = FindDesignatedRouterForLink (nd, true);
+      ClearBridgesVisited ();
+      Ipv4Address desigRtr = FindDesignatedRouterForLink (nd);
 
       //
       // Let's double-check that any designated router we find out on our
@@ -926,7 +928,8 @@
       // by the presence of another router on the network segment.  If we find
       // another router on any of our bridged links, we are a transit network.
       //
-      if (AnotherRouterOnLink (ndTemp, true))
+      ClearBridgesVisited ();
+      if (AnotherRouterOnLink (ndTemp))
         {
           areTransitNetwork = true;
 
@@ -937,7 +940,8 @@
           // for the lowest address on each segment and pick the lowest of them
           // all.
           //
-          Ipv4Address desigRtrTemp = FindDesignatedRouterForLink (ndTemp, true);
+          ClearBridgesVisited ();
+          Ipv4Address desigRtrTemp = FindDesignatedRouterForLink (ndTemp);
 
           //
           // Let's double-check that any designated router we find out on our
@@ -1243,9 +1247,9 @@
 // connecting to the channel becomes the designated router for the link.
 //
 Ipv4Address
-GlobalRouter::FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal, bool allowRecursion) const
+GlobalRouter::FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal) const
 {
-  NS_LOG_FUNCTION (this << ndLocal << allowRecursion);
+  NS_LOG_FUNCTION (this << ndLocal);
 
   Ptr<Channel> ch = ndLocal->GetChannel ();
   uint32_t nDevices = ch->GetNDevices ();
@@ -1282,6 +1286,15 @@
           NS_LOG_LOGIC ("Device is bridged by BridgeNetDevice " << bnd);
 
           //
+          // When enumerating a bridge, don't count the netdevice we came in on
+          //
+          if (ndLocal == ndOther)
+            {
+              NS_LOG_LOGIC ("Skip -- it is where we came from.");
+              continue;
+            }
+
+          //
           // It is possible that the bridge net device is sitting under a
           // router, so we have to check for the presence of that router
           // before we run off and follow all the links
@@ -1315,6 +1328,19 @@
                 }
             }
 
+          // 
+          // Check if we have seen this bridge net device already while
+          // recursively enumerating an L2 broadcast domain. If it is new 
+          // to us, go ahead and process it. If we have already processed it,
+          // move to the next
+          // 
+          if(BridgeHasAlreadyBeenVisited(bnd))
+            {
+              NS_ABORT_MSG ("ERROR: L2 forwarding loop detected!");
+            }
+
+          MarkBridgeAsVisited(bnd);
+
           NS_LOG_LOGIC ("Looking through bridge ports of bridge net device " << bnd);
           for (uint32_t j = 0; j < bnd->GetNBridgePorts (); ++j)
             {
@@ -1326,13 +1352,10 @@
                   continue;
                 }
 
-              if (allowRecursion)
-                {
-                  NS_LOG_LOGIC ("Recursively looking for routers down bridge port " << ndBridged);
-                  Ipv4Address addrOther = FindDesignatedRouterForLink (ndBridged, false);
-                  desigRtr = addrOther < desigRtr ? addrOther : desigRtr;
-                  NS_LOG_LOGIC ("designated router now " << desigRtr);
-                }
+              NS_LOG_LOGIC ("Recursively looking for routers down bridge port " << ndBridged);
+              Ipv4Address addrOther = FindDesignatedRouterForLink (ndBridged);
+              desigRtr = addrOther < desigRtr ? addrOther : desigRtr;
+              NS_LOG_LOGIC ("designated router now " << desigRtr);
             }
         }
       else
@@ -1380,9 +1403,9 @@
 // when there is a bridged net device on the other side.
 //
 bool
-GlobalRouter::AnotherRouterOnLink (Ptr<NetDevice> nd, bool allowRecursion) const
+GlobalRouter::AnotherRouterOnLink (Ptr<NetDevice> nd) const
 {
-  NS_LOG_FUNCTION (this << nd << allowRecursion);
+  NS_LOG_FUNCTION (this << nd);
 
   Ptr<Channel> ch = nd->GetChannel ();
   if (!ch)
@@ -1426,6 +1449,20 @@
       if (bnd)
         {
           NS_LOG_LOGIC ("Device is bridged by net device " << bnd);
+
+          // 
+          // Check if we have seen this bridge net device already while
+          // recursively enumerating an L2 broadcast domain. If it is new 
+          // to us, go ahead and process it. If we have already processed it,
+          // move to the next
+          // 
+          if(BridgeHasAlreadyBeenVisited(bnd))
+            {
+              NS_ABORT_MSG ("ERROR: L2 forwarding loop detected!");
+            }
+
+          MarkBridgeAsVisited(bnd);
+
           NS_LOG_LOGIC ("Looking through bridge ports of bridge net device " << bnd);
           for (uint32_t j = 0; j < bnd->GetNBridgePorts (); ++j)
             {
@@ -1437,14 +1474,11 @@
                   continue;
                 }
 
-              if (allowRecursion)
+              NS_LOG_LOGIC ("Recursively looking for routers on bridge port " << ndBridged);
+              if (AnotherRouterOnLink (ndBridged))
                 {
-                  NS_LOG_LOGIC ("Recursively looking for routers on bridge port " << ndBridged);
-                  if (AnotherRouterOnLink (ndBridged, false))
-                    {
-                      NS_LOG_LOGIC ("Found routers on bridge port, return true");
-                      return true;
-                    }
+                  NS_LOG_LOGIC ("Found routers on bridge port, return true");
+                  return true;
                 }
             }
           NS_LOG_LOGIC ("No routers on bridged net device, return false");
@@ -1699,4 +1733,40 @@
   return 0;
 }
 
+//
+// Start a new enumeration of an L2 broadcast domain by clearing m_bridgesVisited
+//
+void 
+GlobalRouter::ClearBridgesVisited (void) const
+{
+  m_bridgesVisited.clear();
+}
+
+//
+// Check if we have already visited a given bridge net device by searching m_bridgesVisited
+//
+bool
+GlobalRouter::BridgeHasAlreadyBeenVisited (Ptr<BridgeNetDevice> bridgeNetDevice) const
+{
+  std::vector<Ptr<BridgeNetDevice> >::iterator iter;
+  for (iter = m_bridgesVisited.begin (); iter != m_bridgesVisited.end (); ++iter)
+    {
+      if (bridgeNetDevice == *iter)
+        {
+          return true;
+        }
+    }
+  return false;
+}
+
+//
+// Remember that we visited a bridge net device by adding it to m_bridgesVisited
+//
+void 
+GlobalRouter::MarkBridgeAsVisited (Ptr<BridgeNetDevice> bridgeNetDevice) const
+{
+  m_bridgesVisited.push_back (bridgeNetDevice);
+}
+
+
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/global-router-interface.h ns-3.25/src/internet/model/global-router-interface.h
--- ns-3.24.1/src/internet/model/global-router-interface.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/global-router-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -766,24 +766,21 @@
    * connecting to the channel becomes the designated router for the link.
    *
    * \param ndLocal local NetDevice to scan
-   * \param allowRecursion Recursively look for routers down bridge port
    * \returns the IP address of the designated router
    */
-  Ipv4Address FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal, bool allowRecursion) const;
+  Ipv4Address FindDesignatedRouterForLink (Ptr<NetDevice> ndLocal) const;
 
   /**
    * \brief Checks for the presence of another router on the NetDevice
    *
    * Given a node and an attached net device, take a look off in the channel to
    * which the net device is attached and look for a node on the other side
-   * that has a GlobalRouter interface aggregated.  Life gets more complicated
-   * when there is a bridged net device on the other side.
+   * that has a GlobalRouter interface aggregated.  
    *
    * \param nd NetDevice to scan
-   * \param allowRecursion Recursively look for routers down bridge port
    * \returns true if a router is found
    */
-  bool AnotherRouterOnLink (Ptr<NetDevice> nd, bool allowRecursion) const;
+  bool AnotherRouterOnLink (Ptr<NetDevice> nd) const;
 
   /**
    * \brief Process a generic broadcast link
@@ -848,6 +845,29 @@
   typedef std::list<Ipv4RoutingTableEntry *>::iterator InjectedRoutesI; //!< Iterator to container of Ipv4RoutingTableEntry
   InjectedRoutes m_injectedRoutes; //!< Routes we are exporting
 
+  // Declared mutable so that const member functions can clear it
+  // (supporting the logical constness of the search methods of this class) 
+  mutable std::vector<Ptr<BridgeNetDevice> > m_bridgesVisited;
+  /**
+   * Clear the list of bridges visited on the link 
+   */
+  void ClearBridgesVisited (void) const;
+  /**
+   * When recursively checking for devices on the link, check whether a
+   * given device has already been visited.
+   *
+   * \param device the bridge device to check
+   * \return true if bridge has already been visited 
+   */
+  bool BridgeHasAlreadyBeenVisited (Ptr<BridgeNetDevice> device) const;
+  /**
+   * When recursively checking for devices on the link, mark a given device 
+   * as having been visited.
+   *
+   * \param device the bridge device to mark
+   */
+  void MarkBridgeAsVisited (Ptr<BridgeNetDevice> device) const;
+
   // inherited from Object
   virtual void DoDispose (void);
 
diff -Naur ns-3.24.1/src/internet/model/icmpv6-l4-protocol.cc ns-3.25/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.24.1/src/internet/model/icmpv6-l4-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/icmpv6-l4-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -35,7 +35,6 @@
 #include "ipv6-l3-protocol.h"
 #include "ipv6-interface.h"
 #include "icmpv6-l4-protocol.h"
-#include "ndisc-cache.h"
 
 namespace ns3 {
 
@@ -126,14 +125,14 @@
       Ptr<Node> node = this->GetObject<Node> ();
       if (node != 0)
         {
-          Ptr<Ipv6L3Protocol> ipv6 = this->GetObject<Ipv6L3Protocol> ();
+          Ptr<Ipv6> ipv6 = this->GetObject<Ipv6> ();
           if (ipv6 != 0 && m_downTarget.IsNull ())
             {
               SetNode (node);
               ipv6->Insert (this);
               Ptr<Ipv6RawSocketFactoryImpl> rawFactory = CreateObject<Ipv6RawSocketFactoryImpl> ();
               ipv6->AggregateObject (rawFactory);
-              SetDownTarget6 (MakeCallback (&Ipv6L3Protocol::Send, ipv6));
+              SetDownTarget6 (MakeCallback (&Ipv6::Send, ipv6));
             }
         }
     }
@@ -185,11 +184,11 @@
 
   /** \todo disable multicast loopback to prevent NS probing to be received by the sender */
 
-  Ptr<Packet> p = ForgeNS ("::",Ipv6Address::MakeSolicitedAddress (target), target, interface->GetDevice ()->GetAddress ());
+  NdiscCache::Ipv6PayloadHeaderPair p = ForgeNS ("::",Ipv6Address::MakeSolicitedAddress (target), target, interface->GetDevice ()->GetAddress ());
 
   /* update last packet UID */
-  interface->SetNsDadUid (target, p->GetUid ());
-  Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Ipv6Interface::Send, interface, p, Ipv6Address::MakeSolicitedAddress (target));
+  interface->SetNsDadUid (target, p.first->GetUid ());
+  Simulator::Schedule (Time (MilliSeconds (m_solicitationJitter->GetValue ())), &Ipv6Interface::Send, interface, p.first, p.second, Ipv6Address::MakeSolicitedAddress (target));
 }
 
 enum IpL4Protocol::RxStatus Icmpv6L4Protocol::Receive (Ptr<Packet> packet, Ipv4Header const &header,  Ptr<Ipv4Interface> interface)
@@ -377,7 +376,7 @@
     }
   else
     {
-      std::list<Ptr<Packet> > waiting;
+      std::list<NdiscCache::Ipv6PayloadHeaderPair> waiting;
       if (entry->IsIncomplete ())
         {
           entry->StopNudTimer ();
@@ -385,9 +384,9 @@
           waiting = entry->MarkReachable (lla.GetAddress ());
           entry->StartReachableTimer ();
           // send out waiting packet
-          for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+          for (std::list<NdiscCache::Ipv6PayloadHeaderPair>::const_iterator it = waiting.begin (); it != waiting.end (); it++)
             {
-              cache->GetInterface ()->Send (*it, src);
+              cache->GetInterface ()->Send (it->first, it->second, src);
             }
           entry->ClearWaitingPacket ();
         }
@@ -401,18 +400,21 @@
             }
           else
             {
-              if (!entry->IsReachable ())
+              if (!entry->IsReachable () || !entry->IsPermanent ())
                 {
                   entry->StopNudTimer ();
                   waiting = entry->MarkReachable (lla.GetAddress ());
                   if (entry->IsProbe ())
                     {
-                      for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+                      for (std::list<NdiscCache::Ipv6PayloadHeaderPair>::const_iterator it = waiting.begin (); it != waiting.end (); it++)
                         {
-                          cache->GetInterface ()->Send (*it, src);
+                          cache->GetInterface ()->Send (it->first, it->second, src);
                         }
                     }
-                  entry->StartReachableTimer ();
+                  if (!entry->IsPermanent ())
+                    {
+                      entry->StartReachableTimer ();
+                    }
                 }
             }
         }
@@ -545,13 +547,13 @@
     }
 
   hardwareAddress = interface->GetDevice ()->GetAddress ();
-  Ptr<Packet> p = ForgeNA (target.IsLinkLocal () ? interface->GetLinkLocalAddress ().GetAddress () : ifaddr.GetAddress (), src.IsAny () ? Ipv6Address::GetAllNodesMulticast () : src, &hardwareAddress, flags );
-  interface->Send (p,  src.IsAny () ? Ipv6Address::GetAllNodesMulticast () : src);
+  NdiscCache::Ipv6PayloadHeaderPair p = ForgeNA (target.IsLinkLocal () ? interface->GetLinkLocalAddress ().GetAddress () : ifaddr.GetAddress (), src.IsAny () ? Ipv6Address::GetAllNodesMulticast () : src, &hardwareAddress, flags );
+  interface->Send (p.first, p.second, src.IsAny () ? Ipv6Address::GetAllNodesMulticast () : src);
 
   /* not a NS for us discard it */
 }
 
-Ptr<Packet> Icmpv6L4Protocol::ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress)
+NdiscCache::Ipv6PayloadHeaderPair Icmpv6L4Protocol::ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress)
 {
   NS_LOG_FUNCTION (this << src << dst << hardwareAddress);
   Ptr<Packet> p = Create<Packet> ();
@@ -571,12 +573,10 @@
   ipHeader.SetPayloadLength (p->GetSize ());
   ipHeader.SetHopLimit (255);
 
-  p->AddHeader (ipHeader);
-
-  return p;
+  return NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader);
 }
 
-Ptr<Packet> Icmpv6L4Protocol::ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data)
+NdiscCache::Ipv6PayloadHeaderPair Icmpv6L4Protocol::ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data)
 {
   NS_LOG_FUNCTION (this << src << dst << id << seq << data);
   Ptr<Packet> p = data->Copy ();
@@ -595,9 +595,7 @@
   ipHeader.SetPayloadLength (p->GetSize ());
   ipHeader.SetHopLimit (255);
 
-  p->AddHeader (ipHeader);
-
-  return p;
+  return NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader);
 }
 
 void Icmpv6L4Protocol::HandleNA (Ptr<Packet> packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr<Ipv6Interface> interface)
@@ -612,7 +610,7 @@
   Address hardwareAddress;
   NdiscCache::Entry* entry = 0;
   Ptr<NdiscCache> cache = FindCache (interface->GetDevice ());
-  std::list<Ptr<Packet> > waiting;
+  std::list<NdiscCache::Ipv6PayloadHeaderPair> waiting;
 
   /* check if we have something in our cache */
   entry = cache->Lookup (target);
@@ -670,9 +668,9 @@
           waiting = entry->MarkReachable (lla.GetAddress ());
           entry->StartReachableTimer ();
           /* send out waiting packet */
-          for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+          for (std::list<NdiscCache::Ipv6PayloadHeaderPair>::const_iterator it = waiting.begin (); it != waiting.end (); it++)
             {
-              cache->GetInterface ()->Send (*it, src);
+              cache->GetInterface ()->Send (it->first, it->second, src);
             }
           entry->ClearWaitingPacket ();
         }
@@ -708,14 +706,14 @@
 
               if (naHeader.GetFlagS ())
                 {
-                  if (!entry->IsReachable ())
+                  if (!entry->IsReachable () || !entry->IsPermanent ())
                     {
                       if (entry->IsProbe ())
                         {
                           waiting = entry->MarkReachable (lla.GetAddress ());
-                          for (std::list<Ptr<Packet> >::const_iterator it = waiting.begin (); it != waiting.end (); it++)
+                          for (std::list<NdiscCache::Ipv6PayloadHeaderPair>::const_iterator it = waiting.begin (); it != waiting.end (); it++)
                             {
-                              cache->GetInterface ()->Send (*it, src);
+                              cache->GetInterface ()->Send (it->first, it->second, src);
                             }
                           entry->ClearWaitingPacket ();
                         }
@@ -724,7 +722,10 @@
                           entry->MarkReachable (lla.GetAddress ());
                         }
                     }
-                  entry->StartReachableTimer ();
+                  if (!entry->IsPermanent ())
+                    {
+                      entry->StartReachableTimer ();
+                    }
                 }
               else if (lla.GetAddress () != entry->GetMacAddress ())
                 {
@@ -1179,7 +1180,7 @@
   SendMessage (p, src, dst, 64);
 }
 
-Ptr<Packet> Icmpv6L4Protocol::ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags)
+NdiscCache::Ipv6PayloadHeaderPair Icmpv6L4Protocol::ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags)
 {
   NS_LOG_FUNCTION (this << src << dst << hardwareAddress << (uint32_t)flags);
   Ptr<Packet> p = Create<Packet> ();
@@ -1216,12 +1217,10 @@
   ipHeader.SetPayloadLength (p->GetSize ());
   ipHeader.SetHopLimit (255);
 
-  p->AddHeader (ipHeader);
-
-  return p;
+  return NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader);
 }
 
-Ptr<Packet> Icmpv6L4Protocol::ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress)
+NdiscCache::Ipv6PayloadHeaderPair Icmpv6L4Protocol::ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress)
 {
   NS_LOG_FUNCTION (this << src << dst << target << hardwareAddress);
   Ptr<Packet> p = Create<Packet> ();
@@ -1247,9 +1246,7 @@
   ipHeader.SetPayloadLength (p->GetSize ());
   ipHeader.SetHopLimit (255);
 
-  p->AddHeader (ipHeader);
-
-  return p;
+  return NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader);
 }
 
 Ptr<NdiscCache> Icmpv6L4Protocol::FindCache (Ptr<NetDevice> device)
@@ -1295,7 +1292,7 @@
       NdiscCache::Entry* entry = cache->Lookup (dst);
       if (entry)
         {
-          if (entry->IsReachable () || entry->IsDelay ())
+          if (entry->IsReachable () || entry->IsDelay () || entry->IsPermanent ())
             {
               *hardwareDestination = entry->GetMacAddress ();
               return true;
@@ -1312,9 +1309,9 @@
   return false;
 }
 
-bool Icmpv6L4Protocol::Lookup (Ptr<Packet> p, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination)
+bool Icmpv6L4Protocol::Lookup (Ptr<Packet> p, const Ipv6Header & ipHeader, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination)
 {
-  NS_LOG_FUNCTION (this << p << dst << device << cache << hardwareDestination);
+  NS_LOG_FUNCTION (this << p << ipHeader << dst << device << cache << hardwareDestination);
 
   if (!cache)
     {
@@ -1329,7 +1326,7 @@
   NdiscCache::Entry* entry = cache->Lookup (dst);
   if (entry)
     {
-      if (entry->IsReachable () || entry->IsDelay ())
+      if (entry->IsReachable () || entry->IsDelay () || entry->IsPermanent ())
         {
           /* XXX check reachability time */
           /* send packet */
@@ -1347,7 +1344,7 @@
       else /* INCOMPLETE or PROBE */
         {
           /* queue packet */
-          entry->AddWaitingPacket (p);
+          entry->AddWaitingPacket (NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader));
           return false;
         }
     }
@@ -1358,7 +1355,7 @@
        */
       Ipv6Address addr;
       NdiscCache::Entry* entry = cache->Add (dst);
-      entry->MarkIncomplete (p);
+      entry->MarkIncomplete (NdiscCache::Ipv6PayloadHeaderPair (p, ipHeader));
       entry->SetRouter (false);
 
       if (dst.IsLinkLocal ())
diff -Naur ns-3.24.1/src/internet/model/icmpv6-l4-protocol.h ns-3.25/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.24.1/src/internet/model/icmpv6-l4-protocol.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/icmpv6-l4-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -30,6 +30,7 @@
 
 #include "icmpv6-header.h"
 #include "ip-l4-protocol.h"
+#include "ndisc-cache.h"
 
 namespace ns3 {
 
@@ -37,7 +38,6 @@
 class Node;
 class Packet;
 class TraceContext;
-class NdiscCache;
 
 /**
  * \class Icmpv6L4Protocol
@@ -301,7 +301,7 @@
    * \param hardwareAddress our mac address
    * \return NS packet (with IPv6 header)
    */
-  Ptr<Packet> ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
+  NdiscCache::Ipv6PayloadHeaderPair ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress);
 
   /**
    * \brief Forge a Neighbor Advertisement.
@@ -311,7 +311,7 @@
    * \param flags flags (bitfield => R (4), S (2), O (1))
    * \return NA packet (with IPv6 header)
    */
-  Ptr<Packet> ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
+  NdiscCache::Ipv6PayloadHeaderPair ForgeNA (Ipv6Address src, Ipv6Address dst, Address* hardwareAddress, uint8_t flags);
 
   /**
    * \brief Forge a Router Solicitation.
@@ -320,7 +320,7 @@
    * \param hardwareAddress our mac address
    * \return RS packet (with IPv6 header)
    */
-  Ptr<Packet> ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
+  NdiscCache::Ipv6PayloadHeaderPair ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress);
 
   /**
    * \brief Forge an Echo Request.
@@ -331,7 +331,7 @@
    * \param data the data
    * \return Echo Request packet (with IPv6 header)
    */
-  Ptr<Packet> ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
+  NdiscCache::Ipv6PayloadHeaderPair ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr<Packet> data);
 
   /**
    * \brief Receive method.
@@ -381,13 +381,14 @@
    *
    * It also send NS request to target and store the waiting packet.
    * \param p the packet
+   * \param ipHeader IPv6 header
    * \param dst destination address
    * \param device device
    * \param cache the neighbor cache
    * \param hardwareDestination hardware address
    * \return true if the address is in the ND cache, the hardwareDestination is updated.
    */
-  bool Lookup (Ptr<Packet> p, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
+  bool Lookup (Ptr<Packet> p, const Ipv6Header & ipHeader, Ipv6Address dst, Ptr<NetDevice> device, Ptr<NdiscCache> cache, Address* hardwareDestination);
 
   /**
    * \brief Send a Router Solicitation.
diff -Naur ns-3.24.1/src/internet/model/ip-l4-protocol.cc ns-3.25/src/internet/model/ip-l4-protocol.cc
--- ns-3.24.1/src/internet/model/ip-l4-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ip-l4-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -22,7 +22,7 @@
 // George F. Riley, Georgia Tech, Spring 2007
 
 #include "ip-l4-protocol.h"
-#include "ns3/uinteger.h"
+#include "ns3/integer.h"
 #include "ns3/log.h"
 
 namespace ns3 {
@@ -38,9 +38,10 @@
     .SetParent<Object> ()
     .SetGroupName ("Internet")
     .AddAttribute ("ProtocolNumber", "The IP protocol number.",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&IpL4Protocol::GetProtocolNumber),
-                   MakeUintegerChecker<int> ())
+                   TypeId::ATTR_GET,
+                   IntegerValue (0),
+                   MakeIntegerAccessor (&IpL4Protocol::GetProtocolNumber),
+                   MakeIntegerChecker<int> (0,255))
   ;
   return tid;
 }
diff -Naur ns-3.24.1/src/internet/model/ipv4-end-point.cc ns-3.25/src/internet/model/ipv4-end-point.cc
--- ns-3.24.1/src/internet/model/ipv4-end-point.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-end-point.cc	2016-03-23 21:36:53.000000000 -0700
@@ -136,19 +136,6 @@
   
   if (!m_rxCallback.IsNull ())
     {
-      Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardUp, this, p, header, sport, 
-                              incomingInterface);
-    }
-}
-
-void 
-Ipv4EndPoint::DoForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
-                           Ptr<Ipv4Interface> incomingInterface)
-{
-  NS_LOG_FUNCTION (this << p << &header << sport << incomingInterface);
-  
-  if (!m_rxCallback.IsNull ())
-    {
       m_rxCallback (p, header, sport, incomingInterface);
     }
 }
@@ -162,21 +149,7 @@
                    (uint32_t)icmpCode << icmpInfo);
   if (!m_icmpCallback.IsNull ())
     {
-      Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardIcmp, this, 
-                              icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
-    }
-}
-
-void 
-Ipv4EndPoint::DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, 
-                             uint8_t icmpType, uint8_t icmpCode,
-                             uint32_t icmpInfo)
-{
-  NS_LOG_FUNCTION (this << icmpSource << static_cast<uint32_t> (icmpTtl) << static_cast<uint32_t> (icmpType) << static_cast<uint32_t> (icmpCode) << icmpInfo);
-  
-  if (!m_icmpCallback.IsNull ())
-    {
-      m_icmpCallback (icmpSource,icmpTtl,icmpType,icmpCode,icmpInfo);
+      m_icmpCallback (icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
     }
 }
 
diff -Naur ns-3.24.1/src/internet/model/ipv4-end-point.h ns-3.25/src/internet/model/ipv4-end-point.h
--- ns-3.24.1/src/internet/model/ipv4-end-point.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-end-point.h	2016-03-23 21:36:53.000000000 -0700
@@ -182,27 +182,6 @@
 
 private:
   /**
-   * \brief ForwardUp wrapper.
-   * \param p packet
-   * \param header the packet header
-   * \param sport source port
-   * \param incomingInterface incoming interface
-   */
-  void DoForwardUp (Ptr<Packet> p, const Ipv4Header& header, uint16_t sport,
-                    Ptr<Ipv4Interface> incomingInterface);
-  /**
-   * \brief ForwardIcmp wrapper.
-   * \param icmpSource source IP address
-   * \param icmpTtl time-to-live
-   * \param icmpType ICMP type
-   * \param icmpCode ICMP code
-   * \param icmpInfo ICMP info
-   */
-  void DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
-                      uint8_t icmpType, uint8_t icmpCode,
-                      uint32_t icmpInfo);
-
-  /**
    * \brief The local address.
    */
   Ipv4Address m_localAddr;
diff -Naur ns-3.24.1/src/internet/model/ipv4-global-routing.cc ns-3.25/src/internet/model/ipv4-global-routing.cc
--- ns-3.24.1/src/internet/model/ipv4-global-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-global-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -27,6 +27,7 @@
 #include "ns3/ipv4-route.h"
 #include "ns3/ipv4-routing-table-entry.h"
 #include "ns3/boolean.h"
+#include "ns3/node.h"
 #include "ipv4-global-routing.h"
 #include "global-route-manager.h"
 
@@ -401,6 +402,12 @@
 {
   NS_LOG_FUNCTION (this << stream);
   std::ostream* os = stream->GetStream ();
+
+  *os << "Node: " << m_ipv4->GetObject<Node> ()->GetId ()
+      << ", Time: " << Now().As (Time::S)
+      << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+      << ", Ipv4GlobalRouting table" << std::endl;
+
   if (GetNRoutes () > 0)
     {
       *os << "Destination     Gateway         Genmask         Flags Metric Ref    Use Iface" << std::endl;
@@ -441,6 +448,7 @@
           *os << std::endl;
         }
     }
+  *os << std::endl;
 }
 
 Ptr<Ipv4Route>
@@ -481,53 +489,25 @@
   NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
   uint32_t iif = m_ipv4->GetInterfaceForDevice (idev);
 
-  if (header.GetDestination ().IsMulticast ())
-    {
-      NS_LOG_LOGIC ("Multicast destination-- returning false");
-      return false; // Let other routing protocols try to handle this
-    }
-
-  if (header.GetDestination ().IsBroadcast ())
-    {
-      NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
-      /// \todo  Local Deliver for broadcast
-      /// \todo  Forward broadcast
-    }
-
-  /// \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_ipv4->GetNInterfaces (); j++)
+  if (m_ipv4->IsDestinationAddress (header.GetDestination (), iif))
     {
-      for (uint32_t i = 0; i < m_ipv4->GetNAddresses (j); i++)
+      if (!lcb.IsNull ())
         {
-          Ipv4InterfaceAddress iaddr = m_ipv4->GetAddress (j, i);
-          Ipv4Address addr = iaddr.GetLocal ();
-          if (addr.IsEqual (header.GetDestination ()))
-            {
-              if (j == iif)
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match)");
-                }
-              else
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match) on another interface " << header.GetDestination ());
-                }
-              lcb (p, header, iif);
-              return true;
-            }
-          if (header.GetDestination ().IsEqual (iaddr.GetBroadcast ()))
-            {
-              NS_LOG_LOGIC ("For me (interface broadcast address)");
-              lcb (p, header, iif);
-              return true;
-            }
-          NS_LOG_LOGIC ("Address "<< addr << " not a match");
+          NS_LOG_LOGIC ("Local delivery to " << header.GetDestination ());
+          lcb (p, header, iif);
+          return true;
+        }
+      else
+        {
+          // The local delivery callback is null.  This may be a multicast
+          // or broadcast packet, so return false so that another
+          // multicast routing protocol can handle it.  It should be possible
+          // to extend this to explicitly check whether it is a unicast
+          // packet, and invoke the error callback if so
+          return false;
         }
     }
+
   // Check if input device supports IP forwarding
   if (m_ipv4->IsForwarding (iif) == false)
     {
diff -Naur ns-3.24.1/src/internet/model/ipv4.h ns-3.25/src/internet/model/ipv4.h
--- ns-3.24.1/src/internet/model/ipv4.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4.h	2016-03-23 21:36:53.000000000 -0700
@@ -159,14 +159,48 @@
   virtual void SendWithHeader (Ptr<Packet> packet, Ipv4Header ipHeader, Ptr<Ipv4Route> route) = 0;
 
   /**
-   * \param protocol a pointer to the protocol to add to this L4 Demux.
-   *
-   * Adds a protocol to an internal list of L4 protocols.
+   * \param protocol a template for the protocol to add to this L4 Demux.
+   * \returns the L4Protocol effectively added.
    *
+   * Invoke Copy on the input template to get a copy of the input
+   * protocol which can be used on the Node on which this L4 Demux
+   * is running. The new L4Protocol is registered internally as
+   * a working L4 Protocol and returned from this method.
+   * The caller does not get ownership of the returned pointer.
    */
   virtual void Insert (Ptr<IpL4Protocol> protocol) = 0;
 
   /**
+   * \brief Add a L4 protocol to a specific interface.
+   *
+   * This may be called multiple times for multiple interfaces for the same
+   * protocol.  To insert for all interfaces, use the separate
+   * Insert (Ptr<IpL4Protocol> protocol) method.
+   *
+   * Setting a protocol on a specific interface will overwrite the
+   * previously bound protocol.
+   *
+   * \param protocol L4 protocol.
+   * \param interfaceIndex interface index.
+   */
+  virtual void Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex) = 0;
+
+  /**
+   * \param protocol protocol to remove from this demux.
+   *
+   * The input value to this method should be the value
+   * returned from the Ipv4L4Protocol::Insert method.
+   */
+  virtual void Remove (Ptr<IpL4Protocol> protocol) = 0;
+
+  /**
+   * \brief Remove a L4 protocol from a specific interface.
+   * \param protocol L4 protocol to remove.
+   * \param interfaceIndex interface index.
+   */
+  virtual void Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex) = 0;
+
+  /**
    * \brief Determine whether address and interface corresponding to
    *        received packet can be accepted for local delivery
    *
@@ -360,6 +394,14 @@
   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 IPv4 destination address
+   * \return IPv4 source address to use
+   */
+  virtual Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest) = 0;
+
+  /**
    * \param protocolNumber number of protocol to lookup
    *        in this L4 Demux
    * \returns a matching L4 Protocol
@@ -370,6 +412,14 @@
   virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const = 0;
 
   /**
+   * \brief Get L4 protocol by protocol number for the specified interface.
+   * \param protocolNumber protocol number
+   * \param interfaceIndex interface index, -1 means "any" interface.
+   * \return corresponding IpL4Protocol or 0 if not found
+   */
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber, int32_t interfaceIndex) const = 0;
+
+  /**
    * \brief Creates a raw socket
    *
    * \returns a smart pointer to the instantiated raw socket
diff -Naur ns-3.24.1/src/internet/model/ipv4-header.cc ns-3.25/src/internet/model/ipv4-header.cc
--- ns-3.24.1/src/internet/model/ipv4-header.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -90,7 +90,7 @@
 {
   NS_LOG_FUNCTION (this << dscp);
   m_tos &= 0x3; // Clear out the DSCP part, retain 2 bits of ECN
-  m_tos |= dscp;
+  m_tos |= (dscp << 2);
 }
 
 void
@@ -106,7 +106,7 @@
 {
   NS_LOG_FUNCTION (this);
   // Extract only first 6 bits of TOS byte, i.e 0xFC
-  return DscpType (m_tos & 0xFC);
+  return DscpType ((m_tos & 0xFC) >> 2);
 }
 
 std::string 
@@ -341,8 +341,8 @@
     {
       flags = "none";
     }
-  else if (m_flags & MORE_FRAGMENTS &&
-           m_flags & DONT_FRAGMENT)
+  else if ((m_flags & MORE_FRAGMENTS) &&
+           (m_flags & DONT_FRAGMENT))
     {
       flags = "MF|DF";
     }
@@ -424,10 +424,17 @@
 {
   NS_LOG_FUNCTION (this << &start);
   Buffer::Iterator i = start;
+
   uint8_t verIhl = i.ReadU8 ();
   uint8_t ihl = verIhl & 0x0f; 
   uint16_t headerSize = ihl * 4;
-  NS_ASSERT ((verIhl >> 4) == 4);
+
+  if ((verIhl >> 4) != 4)
+    {
+      NS_LOG_WARN ("Trying to decode a non-IPv4 header, refusing to do it.");
+      return 0;
+    }
+
   m_tos = i.ReadU8 ();
   uint16_t size = i.ReadNtohU16 ();
   m_payloadSize = size - headerSize;
diff -Naur ns-3.24.1/src/internet/model/ipv4-header.h ns-3.25/src/internet/model/ipv4-header.h
--- ns-3.24.1/src/internet/model/ipv4-header.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -53,9 +53,10 @@
    * \param tos the 8 bits of Ipv4 TOS.
    */
   void SetTos (uint8_t tos);
+public:
   /**
    * \enum DscpType
-   * \brief DiffServ Code Points 
+   * \brief DiffServ Code Points
    * Code Points defined in
    * Assured Forwarding (AF) \RFC{2597}
    * Expedited Forwarding (EF) \RFC{2598}
@@ -66,32 +67,32 @@
       DscpDefault = 0x00,
 
       // Prefixed with "DSCP" to avoid name clash (bug 1723)
-      DSCP_CS1 = 0x20,
-      DSCP_AF11 = 0x28,
-      DSCP_AF12 = 0x30,
-      DSCP_AF13 = 0x38,
-
-      DSCP_CS2 = 0x40,
-      DSCP_AF21 = 0x48,
-      DSCP_AF22 = 0x50,
-      DSCP_AF23 = 0x58,
-
-      DSCP_CS3 = 0x60,
-      DSCP_AF31 = 0x68,
-      DSCP_AF32 = 0x70,
-      DSCP_AF33 = 0x78,
-
-      DSCP_CS4 = 0x80,
-      DSCP_AF41 = 0x88,
-      DSCP_AF42 = 0x90,
-      DSCP_AF43 = 0x98,
-
-      DSCP_CS5 = 0xA0,
-      DSCP_EF = 0xB8,
-      
-      DSCP_CS6 = 0xC0,
-      DSCP_CS7 = 0xE0
-      
+      DSCP_CS1  = 0x08, // octal 010
+      DSCP_AF11 = 0x0A, // octal 012
+      DSCP_AF12 = 0x0C, // octal 014
+      DSCP_AF13 = 0x0E, // octal 016
+
+      DSCP_CS2  = 0x10, // octal 020
+      DSCP_AF21 = 0x12, // octal 022
+      DSCP_AF22 = 0x14, // octal 024
+      DSCP_AF23 = 0x16, // octal 026
+
+      DSCP_CS3  = 0x18, // octal 030
+      DSCP_AF31 = 0x1A, // octal 032
+      DSCP_AF32 = 0x1C, // octal 034
+      DSCP_AF33 = 0x1E, // octal 036
+
+      DSCP_CS4  = 0x20, // octal 040
+      DSCP_AF41 = 0x22, // octal 042
+      DSCP_AF42 = 0x24, // octal 044
+      DSCP_AF43 = 0x26, // octal 046
+
+      DSCP_CS5  = 0x28, // octal 050
+      DSCP_EF   = 0x2E, // octal 056
+
+      DSCP_CS6  = 0x30, // octal 060
+      DSCP_CS7  = 0x38  // octal 070
+
     };
   /**
    * \brief Set DSCP Field
diff -Naur ns-3.24.1/src/internet/model/ipv4-interface.cc ns-3.25/src/internet/model/ipv4-interface.cc
--- ns-3.24.1/src/internet/model/ipv4-interface.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-interface.cc	2016-03-23 21:36:53.000000000 -0700
@@ -20,8 +20,8 @@
 
 #include "ipv4-interface.h"
 #include "loopback-net-device.h"
-#include "ns3/ipv4-address.h"
 #include "ipv4-l3-protocol.h"
+#include "ipv4-queue-disc-item.h"
 #include "arp-l3-protocol.h"
 #include "arp-cache.h"
 #include "ns3/net-device.h"
@@ -64,6 +64,7 @@
     m_metric (1),
     m_node (0), 
     m_device (0),
+    m_tc (0),
     m_cache (0)
 {
   NS_LOG_FUNCTION (this);
@@ -80,6 +81,8 @@
   NS_LOG_FUNCTION (this);
   m_node = 0;
   m_device = 0;
+  m_tc = 0;
+  m_cache = 0;
   Object::DoDispose ();
 }
 
@@ -100,6 +103,13 @@
 }
 
 void
+Ipv4Interface::SetTrafficControl (Ptr<TrafficControlLayer> tc)
+{
+  NS_LOG_FUNCTION (this << tc);
+  m_tc = tc;
+}
+
+void
 Ipv4Interface::DoSetup (void)
 {
   NS_LOG_FUNCTION (this);
@@ -198,34 +208,37 @@
 }
 
 void
-Ipv4Interface::Send (Ptr<Packet> p, Ipv4Address dest)
+Ipv4Interface::Send (Ptr<Packet> p, const Ipv4Header & hdr, Ipv4Address dest)
 {
   NS_LOG_FUNCTION (this << *p << dest);
   if (!IsUp ())
     {
       return;
     }
-  // Check for a loopback device
+
+  // Check for a loopback device, if it's the case we don't pass through
+  // traffic control layer
   if (DynamicCast<LoopbackNetDevice> (m_device))
     {
       /// \todo additional checks needed here (such as whether multicast
       /// goes to loopback)?
-      m_device->Send (p, m_device->GetBroadcast (), 
-                      Ipv4L3Protocol::PROT_NUMBER);
+      p->AddHeader (hdr);
+      m_device->Send (p, m_device->GetBroadcast (), Ipv4L3Protocol::PROT_NUMBER);
       return;
     } 
+
+  NS_ASSERT (m_tc != 0);
+
   // is this packet aimed at a local interface ?
   for (Ipv4InterfaceAddressListCI i = m_ifaddrs.begin (); i != m_ifaddrs.end (); ++i)
     {
       if (dest == (*i).GetLocal ())
         {
-          Ptr<Ipv4L3Protocol> ipv4 = m_node->GetObject<Ipv4L3Protocol> ();
-
-          ipv4->Receive (m_device, p, Ipv4L3Protocol::PROT_NUMBER, 
+          p->AddHeader (hdr);
+          m_tc->Receive (m_device, p, Ipv4L3Protocol::PROT_NUMBER,
                          m_device->GetBroadcast (),
                          m_device->GetBroadcast (),
-                         NetDevice::PACKET_HOST // note: linux uses PACKET_LOOPBACK here
-                         );
+                         NetDevice::PACKET_HOST);
           return;
         }
     }
@@ -266,22 +279,20 @@
           if (!found)
             {
               NS_LOG_LOGIC ("ARP Lookup");
-              found = arp->Lookup (p, dest, m_device, m_cache, &hardwareDestination);
+              found = arp->Lookup (p, hdr, dest, m_device, m_cache, &hardwareDestination);
             }
         }
 
       if (found)
         {
           NS_LOG_LOGIC ("Address Resolved.  Send.");
-          m_device->Send (p, hardwareDestination,
-                          Ipv4L3Protocol::PROT_NUMBER);
+          m_tc->Send (m_device, Create<Ipv4QueueDiscItem> (p, hardwareDestination, Ipv4L3Protocol::PROT_NUMBER, hdr));
         }
     }
   else
     {
       NS_LOG_LOGIC ("Doesn't need ARP");
-      m_device->Send (p, m_device->GetBroadcast (), 
-                      Ipv4L3Protocol::PROT_NUMBER);
+      m_tc->Send (m_device, Create<Ipv4QueueDiscItem> (p, m_device->GetBroadcast (), Ipv4L3Protocol::PROT_NUMBER, hdr));
     }
 }
 
diff -Naur ns-3.24.1/src/internet/model/ipv4-interface.h ns-3.25/src/internet/model/ipv4-interface.h
--- ns-3.24.1/src/internet/model/ipv4-interface.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,10 +23,11 @@
 #define IPV4_INTERFACE_H
 
 #include <list>
-#include "ns3/ipv4-address.h"
+#include "ns3/ipv4-header.h"
 #include "ns3/ipv4-interface-address.h"
 #include "ns3/ptr.h"
 #include "ns3/object.h"
+#include "ns3/traffic-control-layer.h"
 
 namespace ns3 {
 
@@ -69,6 +70,11 @@
    */
   void SetDevice (Ptr<NetDevice> device);
   /**
+   * \brief Set the TrafficControlLayer.
+   * \param tc TrafficControlLayer object
+   */
+  void SetTrafficControl (Ptr<TrafficControlLayer> tc);
+  /**
    * \brief Set ARP cache used by this interface
    * \param arpCache the ARP cache
    */
@@ -139,12 +145,13 @@
 
   /**
    * \param p packet to send
+   * \param hdr IPv4 header
    * \param dest next hop address of packet.
    *
    * This method will eventually call the private
    * SendTo method which must be implemented by subclasses.
    */ 
-  void Send (Ptr<Packet> p, Ipv4Address dest);
+  void Send (Ptr<Packet> p, const Ipv4Header & hdr, Ipv4Address dest);
 
   /**
    * \param address The Ipv4InterfaceAddress to add to the interface
@@ -210,6 +217,7 @@
   Ipv4InterfaceAddressList m_ifaddrs; //!< Address list
   Ptr<Node> m_node; //!< The associated node
   Ptr<NetDevice> m_device; //!< The associated NetDevice
+  Ptr<TrafficControlLayer> m_tc; //!< The associated TrafficControlLayer
   Ptr<ArpCache> m_cache; //!< ARP cache
 };
 
diff -Naur ns-3.24.1/src/internet/model/ipv4-l3-protocol.cc ns-3.25/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.24.1/src/internet/model/ipv4-l3-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-l3-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,6 +32,7 @@
 #include "ns3/ipv4-header.h"
 #include "ns3/boolean.h"
 #include "ns3/ipv4-routing-table-entry.h"
+#include "ns3/traffic-control-layer.h"
 
 #include "loopback-net-device.h"
 #include "arp-l3-protocol.h"
@@ -125,27 +126,96 @@
 Ipv4L3Protocol::Insert (Ptr<IpL4Protocol> protocol)
 {
   NS_LOG_FUNCTION (this << protocol);
-  m_protocols.push_back (protocol);
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  m_protocols[key] = protocol;
+}
+
+void
+Ipv4L3Protocol::Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  m_protocols[key] = protocol;
 }
+
+void
+Ipv4L3Protocol::Remove (Ptr<IpL4Protocol> protocol)
+{
+  NS_LOG_FUNCTION (this << protocol);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
+}
+
+void
+Ipv4L3Protocol::Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
+}
+
 Ptr<IpL4Protocol>
 Ipv4L3Protocol::GetProtocol (int protocolNumber) const
 {
   NS_LOG_FUNCTION (this << protocolNumber);
-  for (L4List_t::const_iterator i = m_protocols.begin (); i != m_protocols.end (); ++i)
+
+  return GetProtocol (protocolNumber, -1);
+}
+
+Ptr<IpL4Protocol>
+Ipv4L3Protocol::GetProtocol (int protocolNumber, int32_t interfaceIndex) const
+{
+  NS_LOG_FUNCTION (this << protocolNumber << interfaceIndex);
+
+  L4ListKey_t key;
+  L4List_t::const_iterator i;
+  if (interfaceIndex >= 0)
     {
-      if ((*i)->GetProtocolNumber () == protocolNumber)
+      // try the interface-specific protocol.
+      key = std::make_pair (protocolNumber, interfaceIndex);
+      i = m_protocols.find (key);
+      if (i != m_protocols.end ())
         {
-          return *i;
+          return i->second;
         }
     }
+  // try the generic protocol.
+  key = std::make_pair (protocolNumber, -1);
+  i = m_protocols.find (key);
+  if (i != m_protocols.end ())
+    {
+      return i->second;
+    }
+
   return 0;
 }
-void
-Ipv4L3Protocol::Remove (Ptr<IpL4Protocol> protocol)
-{
-  NS_LOG_FUNCTION (this << protocol);
-  m_protocols.remove (protocol);
-}
 
 void
 Ipv4L3Protocol::SetNode (Ptr<Node> node)
@@ -222,7 +292,7 @@
   NS_LOG_FUNCTION (this);
   for (L4List_t::iterator i = m_protocols.begin (); i != m_protocols.end (); ++i)
     {
-      *i = 0;
+      i->second = 0;
     }
   m_protocols.clear ();
 
@@ -231,6 +301,8 @@
       *i = 0;
     }
   m_interfaces.clear ();
+  m_reverseInterfacesContainer.clear ();
+
   m_sockets.clear ();
   m_node = 0;
   m_routingProtocol = 0;
@@ -300,17 +372,28 @@
 Ipv4L3Protocol::AddInterface (Ptr<NetDevice> device)
 {
   NS_LOG_FUNCTION (this << device);
+  NS_ASSERT (m_node != 0);
 
-  Ptr<Node> node = GetObject<Node> ();
-  node->RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, this), 
-                                 Ipv4L3Protocol::PROT_NUMBER, device);
-  node->RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer (GetObject<ArpL3Protocol> ())),
-                                 ArpL3Protocol::PROT_NUMBER, device);
+  Ptr<TrafficControlLayer> tc = m_node->GetObject<TrafficControlLayer> ();
+
+  NS_ASSERT (tc != 0);
+
+  m_node->RegisterProtocolHandler (MakeCallback (&TrafficControlLayer::Receive, tc),
+                                   Ipv4L3Protocol::PROT_NUMBER, device);
+  m_node->RegisterProtocolHandler (MakeCallback (&TrafficControlLayer::Receive, tc),
+                                   ArpL3Protocol::PROT_NUMBER, device);
+
+  tc->RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, this),
+                               Ipv4L3Protocol::PROT_NUMBER, device);
+  tc->RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer (GetObject<ArpL3Protocol> ())),
+                               ArpL3Protocol::PROT_NUMBER, device);
 
   Ptr<Ipv4Interface> interface = CreateObject<Ipv4Interface> ();
   interface->SetNode (m_node);
   interface->SetDevice (device);
+  interface->SetTrafficControl (tc);
   interface->SetForwarding (m_ipForward);
+  tc->SetupDevice (device);
   return AddIpv4Interface (interface);
 }
 
@@ -320,6 +403,7 @@
   NS_LOG_FUNCTION (this << interface);
   uint32_t index = m_interfaces.size ();
   m_interfaces.push_back (interface);
+  m_reverseInterfacesContainer[interface->GetDevice ()] = index;
   return index;
 }
 
@@ -391,15 +475,11 @@
   Ptr<const NetDevice> device) const
 {
   NS_LOG_FUNCTION (this << device);
-  int32_t interface = 0;
-  for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin (); 
-       i != m_interfaces.end (); 
-       i++, interface++)
+
+  Ipv4InterfaceReverseContainer::const_iterator iter = m_reverseInterfacesContainer.find (device);
+  if (iter != m_reverseInterfacesContainer.end ())
     {
-      if ((*i)->GetDevice () == device)
-        {
-          return interface;
-        }
+      return (*iter).second;
     }
 
   return -1;
@@ -477,31 +557,25 @@
   NS_LOG_LOGIC ("Packet from " << from << " received on node " << 
                 m_node->GetId ());
 
-  uint32_t interface = 0;
+
+  int32_t interface = GetInterfaceForDevice(device);
+  NS_ASSERT_MSG (interface != -1, "Received a packet from an interface that is not known to IPv4");
+
   Ptr<Packet> packet = p->Copy ();
 
-  Ptr<Ipv4Interface> ipv4Interface;
-  for (Ipv4InterfaceList::const_iterator i = m_interfaces.begin (); 
-       i != m_interfaces.end (); 
-       i++, interface++)
+  Ptr<Ipv4Interface> ipv4Interface = m_interfaces[interface];
+
+  if (ipv4Interface->IsUp ())
     {
-      ipv4Interface = *i;
-      if (ipv4Interface->GetDevice () == device)
-        {
-          if (ipv4Interface->IsUp ())
-            {
-              m_rxTrace (packet, m_node->GetObject<Ipv4> (), interface);
-              break;
-            }
-          else
-            {
-              NS_LOG_LOGIC ("Dropping received packet -- interface is down");
-              Ipv4Header ipHeader;
-              packet->RemoveHeader (ipHeader);
-              m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv4> (), interface);
-              return;
-            }
-        }
+      m_rxTrace (packet, m_node->GetObject<Ipv4> (), interface);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Dropping received packet -- interface is down");
+      Ipv4Header ipHeader;
+      packet->RemoveHeader (ipHeader);
+      m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv4> (), interface);
+      return;
     }
 
   Ipv4Header ipHeader;
@@ -608,6 +682,15 @@
   SendRealOut (route, packet, ipHeader);
 }
 
+void
+Ipv4L3Protocol::CallTxTrace (const Ipv4Header & ipHeader, Ptr<Packet> packet,
+                                    Ptr<Ipv4> ipv4, uint32_t interface)
+{
+  Ptr<Packet> packetCopy = packet->Copy ();
+  packetCopy->AddHeader (ipHeader);
+  m_txTrace (packetCopy, ipv4, interface);
+}
+
 void 
 Ipv4L3Protocol::Send (Ptr<Packet> packet, 
                       Ipv4Address source,
@@ -652,14 +735,28 @@
            ifaceIter != m_interfaces.end (); ifaceIter++, ifaceIndex++)
         {
           Ptr<Ipv4Interface> outInterface = *ifaceIter;
-          Ptr<Packet> packetCopy = packet->Copy ();
+          bool sendIt = false;
+          if (source == Ipv4Address::GetAny ())
+            {
+              sendIt = true;
+            }
+          for (uint32_t index = 0; index < outInterface->GetNAddresses (); index++)
+            {
+              if (outInterface->GetAddress (index).GetLocal () == source)
+                {
+                  sendIt = true;
+                }
+            }
+          if (sendIt)
+            {
+              Ptr<Packet> packetCopy = packet->Copy ();
 
-          NS_ASSERT (packetCopy->GetSize () <= outInterface->GetDevice ()->GetMtu ());
+              NS_ASSERT (packetCopy->GetSize () <= outInterface->GetDevice ()->GetMtu ());
 
-          m_sendOutgoingTrace (ipHeader, packetCopy, ifaceIndex);
-          packetCopy->AddHeader (ipHeader);
-          m_txTrace (packetCopy, m_node->GetObject<Ipv4> (), ifaceIndex);
-          outInterface->Send (packetCopy, destination);
+              m_sendOutgoingTrace (ipHeader, packetCopy, ifaceIndex);
+              CallTxTrace (ipHeader, packetCopy, m_node->GetObject<Ipv4> (), ifaceIndex);
+              outInterface->Send (packetCopy, ipHeader, destination);
+            }
         }
       return;
     }
@@ -681,9 +778,8 @@
               ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, tos, mayFragment);
               Ptr<Packet> packetCopy = packet->Copy ();
               m_sendOutgoingTrace (ipHeader, packetCopy, ifaceIndex);
-              packetCopy->AddHeader (ipHeader);
-              m_txTrace (packetCopy, m_node->GetObject<Ipv4> (), ifaceIndex);
-              outInterface->Send (packetCopy, destination);
+              CallTxTrace (ipHeader, packetCopy, m_node->GetObject<Ipv4> (), ifaceIndex);
+              outInterface->Send (packetCopy, ipHeader, destination);
               return;
             }
         }
@@ -798,7 +894,6 @@
       m_dropTrace (ipHeader, packet, DROP_NO_ROUTE, m_node->GetObject<Ipv4> (), 0);
       return;
     }
-  packet->AddHeader (ipHeader);
   Ptr<NetDevice> outDev = route->GetOutputDevice ();
   int32_t interface = GetInterfaceForDevice (outDev);
   NS_ASSERT (interface >= 0);
@@ -810,27 +905,25 @@
       if (outInterface->IsUp ())
         {
           NS_LOG_LOGIC ("Send to gateway " << route->GetGateway ());
-          if ( packet->GetSize () > outInterface->GetDevice ()->GetMtu () )
+          if ( packet->GetSize () + ipHeader.GetSerializedSize () > outInterface->GetDevice ()->GetMtu () )
             {
-              std::list<Ptr<Packet> > listFragments;
-              DoFragmentation (packet, outInterface->GetDevice ()->GetMtu (), listFragments);
-              for ( std::list<Ptr<Packet> >::iterator it = listFragments.begin (); it != listFragments.end (); it++ )
+              std::list<Ipv4PayloadHeaderPair> listFragments;
+              DoFragmentation (packet, ipHeader, outInterface->GetDevice ()->GetMtu (), listFragments);
+              for ( std::list<Ipv4PayloadHeaderPair>::iterator it = listFragments.begin (); it != listFragments.end (); it++ )
                 {
-                  m_txTrace (*it, m_node->GetObject<Ipv4> (), interface);
-                  outInterface->Send (*it, route->GetGateway ());
+                  CallTxTrace (it->second, it->first, m_node->GetObject<Ipv4> (), interface);
+                  outInterface->Send (it->first, it->second, route->GetGateway ());
                 }
             }
           else
             {
-              m_txTrace (packet, m_node->GetObject<Ipv4> (), interface);
-              outInterface->Send (packet, route->GetGateway ());
+              CallTxTrace (ipHeader, packet, m_node->GetObject<Ipv4> (), interface);
+              outInterface->Send (packet, ipHeader, route->GetGateway ());
             }
         }
       else
         {
           NS_LOG_LOGIC ("Dropping -- outgoing interface is down: " << route->GetGateway ());
-          Ipv4Header ipHeader;
-          packet->RemoveHeader (ipHeader);
           m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv4> (), interface);
         }
     } 
@@ -839,28 +932,26 @@
       if (outInterface->IsUp ())
         {
           NS_LOG_LOGIC ("Send to destination " << ipHeader.GetDestination ());
-          if ( packet->GetSize () > outInterface->GetDevice ()->GetMtu () )
+          if ( packet->GetSize () + ipHeader.GetSerializedSize () > outInterface->GetDevice ()->GetMtu () )
             {
-              std::list<Ptr<Packet> > listFragments;
-              DoFragmentation (packet, outInterface->GetDevice ()->GetMtu (), listFragments);
-              for ( std::list<Ptr<Packet> >::iterator it = listFragments.begin (); it != listFragments.end (); it++ )
+              std::list<Ipv4PayloadHeaderPair> listFragments;
+              DoFragmentation (packet, ipHeader, outInterface->GetDevice ()->GetMtu (), listFragments);
+              for ( std::list<Ipv4PayloadHeaderPair>::iterator it = listFragments.begin (); it != listFragments.end (); it++ )
                 {
-                  NS_LOG_LOGIC ("Sending fragment " << **it );
-                  m_txTrace (*it, m_node->GetObject<Ipv4> (), interface);
-                  outInterface->Send (*it, ipHeader.GetDestination ());
+                  NS_LOG_LOGIC ("Sending fragment " << *(it->first) );
+                  CallTxTrace (it->second, it->first, m_node->GetObject<Ipv4> (), interface);
+                  outInterface->Send (it->first, it->second, ipHeader.GetDestination ());
                 }
             }
           else
             {
-              m_txTrace (packet, m_node->GetObject<Ipv4> (), interface);
-              outInterface->Send (packet, ipHeader.GetDestination ());
+              CallTxTrace (ipHeader, packet, m_node->GetObject<Ipv4> (), interface);
+              outInterface->Send (packet, ipHeader, ipHeader.GetDestination ());
             }
         }
       else
         {
           NS_LOG_LOGIC ("Dropping -- outgoing interface is down: " << ipHeader.GetDestination ());
-          Ipv4Header ipHeader;
-          packet->RemoveHeader (ipHeader);
           m_dropTrace (ipHeader, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv4> (), interface);
         }
     }
@@ -953,7 +1044,7 @@
 
   m_localDeliverTrace (ipHeader, p, iif);
 
-  Ptr<IpL4Protocol> protocol = GetProtocol (ipHeader.GetProtocol ());
+  Ptr<IpL4Protocol> protocol = GetProtocol (ipHeader.GetProtocol (), iif);
   if (protocol != 0)
     {
       // we need to make a copy in the unlikely event we hit the
@@ -1062,6 +1153,33 @@
   return false;
 }
 
+Ipv4Address
+Ipv4L3Protocol::SourceAddressSelection (uint32_t interfaceIdx, Ipv4Address dest)
+{
+  NS_LOG_FUNCTION (this << interfaceIdx << " " << dest);
+  if (GetNAddresses (interfaceIdx) == 1)  // common case
+    {
+      return GetAddress (interfaceIdx, 0).GetLocal ();
+    }
+  // no way to determine the scope of the destination, so adopt the
+  // following rule:  pick the first available address (index 0) unless
+  // a subsequent address is on link (in which case, pick the primary
+  // address if there are multiple)
+  Ipv4Address candidate = GetAddress (interfaceIdx, 0).GetLocal ();
+  for (uint32_t i = 0; i < GetNAddresses (interfaceIdx); i++)
+    {
+      Ipv4InterfaceAddress test = GetAddress (interfaceIdx, i);
+      if (test.GetLocal ().CombineMask (test.GetMask ()) == dest.CombineMask (test.GetMask ()))
+        {
+          if (test.IsSecondary () == false)
+            {
+              return test.GetLocal ();
+            }
+        }
+    }
+  return candidate;
+}
+
 Ipv4Address 
 Ipv4L3Protocol::SelectSourceAddress (Ptr<const NetDevice> device,
                                      Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)
@@ -1250,7 +1368,7 @@
 }
 
 void
-Ipv4L3Protocol::DoFragmentation (Ptr<Packet> packet, uint32_t outIfaceMtu, std::list<Ptr<Packet> >& listFragments)
+Ipv4L3Protocol::DoFragmentation (Ptr<Packet> packet, const Ipv4Header & ipv4Header, uint32_t outIfaceMtu, std::list<Ipv4PayloadHeaderPair>& listFragments)
 {
   // BEWARE: here we do assume that the header options are not present.
   // a much more complex handling is necessary in case there are options.
@@ -1261,9 +1379,6 @@
 
   Ptr<Packet> p = packet->Copy ();
 
-  Ipv4Header ipv4Header;
-  p->RemoveHeader (ipv4Header);
-
   NS_ASSERT_MSG( (ipv4Header.GetSerializedSize() == 5*4),
                  "IPv4 fragmentation implementation only works without option headers." );
 
@@ -1325,14 +1440,14 @@
       NS_LOG_LOGIC ("Fragment check - " << fragmentHeader.GetFragmentOffset ()  );
 
       NS_LOG_LOGIC ("New fragment Header " << fragmentHeader);
-      fragment->AddHeader (fragmentHeader);
 
       std::ostringstream oss;
+      oss << fragmentHeader;
       fragment->Print (oss);
 
       NS_LOG_LOGIC ("New fragment " << *fragment);
 
-      listFragments.push_back (fragment);
+      listFragments.push_back (Ipv4PayloadHeaderPair (fragment, fragmentHeader));
 
       offset += currentFragmentablePartSize;
 
diff -Naur ns-3.24.1/src/internet/model/ipv4-l3-protocol.h ns-3.25/src/internet/model/ipv4-l3-protocol.h
--- ns-3.24.1/src/internet/model/ipv4-l3-protocol.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-l3-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -117,33 +117,16 @@
   Ptr<Socket> CreateRawSocket (void);
   void DeleteRawSocket (Ptr<Socket> socket);
 
-  /**
-   * \param protocol a template for the protocol to add to this L4 Demux.
-   * \returns the L4Protocol effectively added.
-   *
-   * Invoke Copy on the input template to get a copy of the input
-   * protocol which can be used on the Node on which this L4 Demux 
-   * is running. The new L4Protocol is registered internally as
-   * a working L4 Protocol and returned from this method.
-   * The caller does not get ownership of the returned pointer.
-   */
-  void Insert (Ptr<IpL4Protocol> protocol);
-  /**
-   * \param protocolNumber number of protocol to lookup
-   *        in this L4 Demux
-   * \returns a matching L4 Protocol
-   *
-   * This method is typically called by lower layers
-   * to forward packets up the stack to the right protocol.
-   */
+  virtual void Insert (Ptr<IpL4Protocol> protocol);
+  virtual void Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
+
+  virtual void Remove (Ptr<IpL4Protocol> protocol);
+  virtual void Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
+
   virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const;
-  /**
-   * \param protocol protocol to remove from this demux.
-   *
-   * The input value to this method should be the value
-   * returned from the Ipv4L4Protocol::Insert method.
-   */
-  void Remove (Ptr<IpL4Protocol> protocol);
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber, int32_t interfaceIndex) const;
+
+  virtual Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest);
 
   /**
    * \param ttl default ttl to use
@@ -162,7 +145,7 @@
    * \param device network device
    * \param p the packet
    * \param protocol protocol value
-   * \param from address of the correspondant
+   * \param from address of the correspondent
    * \param to address of the destination
    * \param packetType type of the packet
    */
@@ -250,6 +233,7 @@
   /**
    * TracedCallback signature for packet transmission or reception events.
    *
+   * \param [in] header The Ipv4Header.
    * \param [in] packet The packet.
    * \param [in] ipv4
    * \param [in] interface
@@ -403,12 +387,18 @@
   bool IsUnicast (Ipv4Address ad, Ipv4Mask interfaceMask) const;
 
   /**
+   * \brief Pair of a packet and an Ipv4 header.
+   */
+  typedef std::pair<Ptr<Packet>, Ipv4Header> Ipv4PayloadHeaderPair;
+
+  /**
    * \brief Fragment a packet
    * \param packet the packet
+   * \param ipHeader the IPv4 header
    * \param outIfaceMtu the MTU of the interface
    * \param listFragments the list of fragments
    */
-  void DoFragmentation (Ptr<Packet> packet, uint32_t outIfaceMtu, std::list<Ptr<Packet> >& listFragments);
+  void DoFragmentation (Ptr<Packet> packet, const Ipv4Header & ipv4Header, uint32_t outIfaceMtu, std::list<Ipv4PayloadHeaderPair>& listFragments);
 
   /**
    * \brief Process a packet fragment
@@ -426,24 +416,47 @@
    * \param iif Input Interface
    */
   void HandleFragmentsTimeout ( std::pair<uint64_t, uint32_t> key, Ipv4Header & ipHeader, uint32_t iif);
-  
+
+  /**
+   * \brief Make a copy of the packet, add the header and invoke the TX trace callback
+   * \param ipHeader the IP header that will be added to the packet
+   * \param packet the packet
+   * \param ipv4 the Ipv4 protocol
+   * \param interface the interface index
+   *
+   * Note: If the TracedCallback API ever is extended, we could consider
+   * to check for connected functions before adding the header
+   */
+  void CallTxTrace (const Ipv4Header & ipHeader, Ptr<Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
+
   /**
    * \brief Container of the IPv4 Interfaces.
    */
   typedef std::vector<Ptr<Ipv4Interface> > Ipv4InterfaceList;
   /**
+   * \brief Container of NetDevices registered to IPv4 and their interface indexes.
+   */
+  typedef std::map<Ptr<const NetDevice>, uint32_t > Ipv4InterfaceReverseContainer;
+  /**
    * \brief Container of the IPv4 Raw Sockets.
    */
   typedef std::list<Ptr<Ipv4RawSocketImpl> > SocketList;
+
+  /**
+   * \brief Container of the IPv4 L4 keys: protocol number, interface index
+   */
+  typedef std::pair<int, int32_t> L4ListKey_t;
+
   /**
    * \brief Container of the IPv4 L4 instances.
    */
-   typedef std::list<Ptr<IpL4Protocol> > L4List_t;
+  typedef std::map<L4ListKey_t, Ptr<IpL4Protocol> > L4List_t;
 
   bool m_ipForward;      //!< Forwarding packets (i.e. router mode) state.
   bool m_weakEsModel;    //!< Weak ES model state
   L4List_t m_protocols;  //!< List of transport protocol.
   Ipv4InterfaceList m_interfaces; //!< List of IPv4 interfaces.
+  Ipv4InterfaceReverseContainer m_reverseInterfacesContainer; //!< Container of NetDevice / Interface index associations.
   uint8_t m_defaultTos;  //!< Default TOS
   uint8_t m_defaultTtl;  //!< Default TTL
   std::map<std::pair<uint64_t, uint8_t>, uint16_t> m_identification; //!< Identification (for each {src, dst, proto} tuple)
diff -Naur ns-3.24.1/src/internet/model/ipv4-list-routing.cc ns-3.25/src/internet/model/ipv4-list-routing.cc
--- ns-3.24.1/src/internet/model/ipv4-list-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-list-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -74,15 +74,15 @@
 {
   NS_LOG_FUNCTION (this << stream);
   *stream->GetStream () << "Node: " << m_ipv4->GetObject<Node> ()->GetId () 
-                        << " Time: " << Simulator::Now ().GetSeconds () << "s "
-                        << "Ipv4ListRouting table" << std::endl;
+                        << ", Time: " << Now().As (Time::S)
+                        << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+                        << ", Ipv4ListRouting table" << std::endl;
   for (Ipv4RoutingProtocolList::const_iterator i = m_routingProtocols.begin ();
        i != m_routingProtocols.end (); i++)
     {
       *stream->GetStream () << "  Priority: " << (*i).first << " Protocol: " << (*i).second->GetInstanceTypeId () << std::endl;
       (*i).second->PrintRoutingTable (stream);
     }
-  *stream->GetStream () << std::endl;
 }
 
 void
diff -Naur ns-3.24.1/src/internet/model/ipv4-packet-filter.cc ns-3.25/src/internet/model/ipv4-packet-filter.cc
--- ns-3.24.1/src/internet/model/ipv4-packet-filter.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv4-packet-filter.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,193 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *               2016 University of Washington
+ *
+ * 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:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#include "ns3/log.h"
+#include "ns3/enum.h"
+#include "ipv4-queue-disc-item.h"
+#include "ipv4-packet-filter.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Ipv4PacketFilter");
+
+NS_OBJECT_ENSURE_REGISTERED (Ipv4PacketFilter);
+
+TypeId 
+Ipv4PacketFilter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Ipv4PacketFilter")
+    .SetParent<PacketFilter> ()
+    .SetGroupName ("Internet")
+  ;
+  return tid;
+}
+
+Ipv4PacketFilter::Ipv4PacketFilter ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ipv4PacketFilter::~Ipv4PacketFilter()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+Ipv4PacketFilter::CheckProtocol (Ptr<QueueDiscItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+  return (DynamicCast<Ipv4QueueDiscItem> (item) != 0);
+}
+
+// ------------------------------------------------------------------------- //
+
+NS_OBJECT_ENSURE_REGISTERED (PfifoFastIpv4PacketFilter);
+
+TypeId 
+PfifoFastIpv4PacketFilter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PfifoFastIpv4PacketFilter")
+    .SetParent<Ipv4PacketFilter> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<PfifoFastIpv4PacketFilter> ()
+    .AddAttribute ("Mode",
+                   "Whether to interpret the TOS byte as legacy TOS or DSCP",
+                   EnumValue (PF_MODE_DSCP),
+                   MakeEnumAccessor (&PfifoFastIpv4PacketFilter::m_trafficClassMode),
+                   MakeEnumChecker (PF_MODE_TOS, "TOS semantics",
+                                    PF_MODE_DSCP, "DSCP semantics"))
+  ;
+  return tid;
+}
+
+PfifoFastIpv4PacketFilter::PfifoFastIpv4PacketFilter ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+PfifoFastIpv4PacketFilter::~PfifoFastIpv4PacketFilter()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+int32_t
+PfifoFastIpv4PacketFilter::DoClassify (Ptr<QueueDiscItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+  uint32_t band;
+  Ptr<Ipv4QueueDiscItem> ipv4Item = DynamicCast<Ipv4QueueDiscItem> (item);
+
+  NS_ASSERT (ipv4Item != 0);
+
+  if (m_trafficClassMode == PF_MODE_TOS)
+    {
+      uint8_t tos = ipv4Item->GetHeader ().GetTos ();
+      band = TosToBand (tos);
+      NS_LOG_DEBUG ("Found Ipv4 packet; TOS " << (uint8_t) tos << " band " << band);
+    }
+  else
+    {
+      Ipv4Header::DscpType dscp = ipv4Item->GetHeader ().GetDscp ();
+      band = DscpToBand (dscp);
+      NS_LOG_DEBUG ("Found Ipv4 packet; DSCP " << ipv4Item->GetHeader ().DscpTypeToString (dscp) << " band " << band);
+    }
+
+  return band;
+}
+
+uint32_t
+PfifoFastIpv4PacketFilter::TosToBand (uint8_t tos) const
+{
+  NS_LOG_FUNCTION (this << (uint16_t) tos);
+
+  uint32_t band = 1;
+  switch (tos) {
+    case 0x10 :
+    case 0x12 :
+    case 0x14 :
+    case 0x16 :
+      band = 0;
+      break;
+    case 0x0 :
+    case 0x4 :
+    case 0x6 :
+    case 0x18 :
+    case 0x1a :
+    case 0x1c :
+    case 0x1e :
+      band = 1;
+      break;
+    case 0x2 :
+    case 0x8 :
+    case 0xa :
+    case 0xc :
+    case 0xe :
+      band = 2;
+      break;
+    default :
+      NS_LOG_ERROR ("Invalid TOS " << (uint16_t) tos);
+  }
+  return band;
+}
+
+uint32_t
+PfifoFastIpv4PacketFilter::DscpToBand (Ipv4Header::DscpType dscpType) const
+{
+  NS_LOG_FUNCTION (this);
+
+  uint32_t band = 1;
+  switch (dscpType) {
+    case Ipv4Header::DSCP_EF :
+    case Ipv4Header::DSCP_AF13 :
+    case Ipv4Header::DSCP_AF23 :
+    case Ipv4Header::DSCP_AF33 :
+    case Ipv4Header::DSCP_AF43 :
+    case Ipv4Header::DscpDefault :
+    case Ipv4Header::DSCP_CS2 :
+    case Ipv4Header::DSCP_CS3 :
+      band = 1;
+      break;
+    case Ipv4Header::DSCP_AF11 :
+    case Ipv4Header::DSCP_AF21 :
+    case Ipv4Header::DSCP_AF31 :
+    case Ipv4Header::DSCP_AF41 :
+    case Ipv4Header::DSCP_CS1 :
+      band = 2;
+      break;
+    case Ipv4Header::DSCP_AF12 :
+    case Ipv4Header::DSCP_AF22 :
+    case Ipv4Header::DSCP_AF32 :
+    case Ipv4Header::DSCP_AF42 :
+    case Ipv4Header::DSCP_CS4 :
+    case Ipv4Header::DSCP_CS5 :
+    case Ipv4Header::DSCP_CS6 :
+    case Ipv4Header::DSCP_CS7 :
+      band = 0;
+      break;
+    default :
+      band = 1;
+  }
+  NS_LOG_DEBUG ("Band returned:  " << band);
+  return band;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/ipv4-packet-filter.h ns-3.25/src/internet/model/ipv4-packet-filter.h
--- ns-3.24.1/src/internet/model/ipv4-packet-filter.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv4-packet-filter.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,159 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *               2016 University of Washington
+ *
+ * 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:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#ifndef IPV4_PACKET_FILTER_H
+#define IPV4_PACKET_FILTER_H
+
+#include "ns3/object.h"
+#include "ns3/packet-filter.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup internet
+ *
+ * Ipv4PacketFilter is the abstract base class for filters defined for IPv4 packets.
+ */
+class Ipv4PacketFilter: public PacketFilter {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  Ipv4PacketFilter ();
+  virtual ~Ipv4PacketFilter ();
+
+private:
+  virtual bool CheckProtocol (Ptr<QueueDiscItem> item) const;
+  virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const = 0;
+};
+
+
+/**
+ * \ingroup internet
+ *
+ * PfifoFastIpv4PacketFilter is the filter to be added to the PfifoFast
+ * queue disc to simulate the behavior of the pfifo_fast Linux queue disc.
+ * 
+ * Two modes of operation are provided. In PF_MODE_TOS mode, packets are
+ * classified based on the TOS byte (originally defined by RFC 1349:
+ * http://www.ietf.org/rfc/rfc1349.txt)
+ *
+ *               0     1     2     3     4     5     6     7
+ *           +-----+-----+-----+-----+-----+-----+-----+-----+
+ *           |   PRECEDENCE    |          TOS          | MBZ |
+ *           +-----+-----+-----+-----+-----+-----+-----+-----+
+ *
+ * where MBZ stands for 'must be zero'.
+ *
+ * In the eight-bit legacy TOS byte, there were five lower bits for TOS
+ * and three upper bits for Precedence.  Bit 7 was never used.  Bits 6-7
+ * are now repurposed for ECN.  The below TOS values correspond to
+ * bits 3-7 in the TOS byte (i.e. including MBZ), omitting the precedence
+ * bits 0-2.
+ *
+ * TOS  | Bits | Means                   | Linux Priority | Band
+ * -----|------|-------------------------|----------------|-----
+ * 0x0  | 0    |  Normal Service         | 0 Best Effort  |  1
+ * 0x2  | 1    |  Minimize Monetary Cost | 1 Filler       |  2
+ * 0x4  | 2    |  Maximize Reliability   | 0 Best Effort  |  1
+ * 0x6  | 3    |  mmc+mr                 | 0 Best Effort  |  1
+ * 0x8  | 4    |  Maximize Throughput    | 2 Bulk         |  2
+ * 0xa  | 5    |  mmc+mt                 | 2 Bulk         |  2
+ * 0xc  | 6    |  mr+mt                  | 2 Bulk         |  2
+ * 0xe  | 7    |  mmc+mr+mt              | 2 Bulk         |  2
+ * 0x10 | 8    |  Minimize Delay         | 6 Interactive  |  0
+ * 0x12 | 9    |  mmc+md                 | 6 Interactive  |  0
+ * 0x14 | 10   |  mr+md                  | 6 Interactive  |  0
+ * 0x16 | 11   |  mmc+mr+md              | 6 Interactive  |  0
+ * 0x18 | 12   |  mt+md                  | 4 Int. Bulk    |  1
+ * 0x1a | 13   |  mmc+mt+md              | 4 Int. Bulk    |  1
+ * 0x1c | 14   |  mr+mt+md               | 4 Int. Bulk    |  1
+ * 0x1e | 15   |  mmc+mr+mt+md           | 4 Int. Bulk    |  1
+ *
+ * In PF_MODE_TOS, the above values are used to map packets into bands, and
+ * IP precedence bits are disregarded.
+ *
+ * In PF_MODE_DSCP (the default), the following mappings are used.
+ *
+ * For DSCP, the following values are recommended for Linux in a patch
+ * to the netdev mailing list from Jesper Dangaard Brouer <brouer@redhat.com>
+ * on 15 Sept 2014.  CS* values I made up myself.
+ *
+ * DSCP | Hex  | Means                      | Linux Priority | Band
+ * -----|------|----------------------------|----------------|-----
+ * EF   | 0x2E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF11 | 0x0A | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF21 | 0x12 | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF31 | 0x1A | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF41 | 0x22 | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF12 | 0x0C | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF22 | 0x14 | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF32 | 0x1C | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF42 | 0x34 | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF13 | 0x0E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF23 | 0x16 | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF33 | 0x1E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF43 | 0x26 | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * CS0  | 0x00 | TC_PRIO_BESTEFFORT         | 0 Best Effort  |  1
+ * CS1  | 0x20 | TC_PRIO_FILLER             | 1 Filler       |  2
+ * CS2  | 0x40 | TC_PRIO_BULK               | 2 Bulk         |  1
+ * CS3  | 0x60 | TC_PRIO_INTERACTIVE_BULK   | 4 Int. Bulk    |  1
+ * CS4  | 0x80 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS5  | 0xA0 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS6  | 0xC0 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS7  | 0xE0 | TC_PRIO_CONTROL            | 8 Control      |  0
+ *
+ */
+class PfifoFastIpv4PacketFilter: public Ipv4PacketFilter {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  PfifoFastIpv4PacketFilter ();
+  virtual ~PfifoFastIpv4PacketFilter ();
+
+  /**
+   * \brief Enumeration of modes of Ipv4 header traffic class semantics
+   */
+  enum Ipv4TrafficClassMode
+  {
+    PF_MODE_TOS,       //!< use legacy TOS semantics to interpret TOS byte
+    PF_MODE_DSCP,      //!< use DSCP semantics to interpret TOS byte
+  };
+
+private:
+  virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const;
+  uint32_t TosToBand (uint8_t tos) const;
+  uint32_t DscpToBand (Ipv4Header::DscpType dscpType) const;
+
+  Ipv4TrafficClassMode m_trafficClassMode; //!< traffic class mode
+};
+
+} // namespace ns3
+
+#endif /* IPV4_PACKET_FILTER */
diff -Naur ns-3.24.1/src/internet/model/ipv4-queue-disc-item.cc ns-3.25/src/internet/model/ipv4-queue-disc-item.cc
--- ns-3.24.1/src/internet/model/ipv4-queue-disc-item.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv4-queue-disc-item.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,82 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "ns3/log.h"
+#include "ipv4-queue-disc-item.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Ipv4QueueDiscItem");
+
+Ipv4QueueDiscItem::Ipv4QueueDiscItem (Ptr<Packet> p, const Address& addr,
+                                      uint16_t protocol, const Ipv4Header & header)
+  : QueueDiscItem (p, addr, protocol),
+    m_header (header),
+    m_headerAdded (false)
+{
+}
+
+Ipv4QueueDiscItem::~Ipv4QueueDiscItem()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint32_t Ipv4QueueDiscItem::GetPacketSize(void) const
+{
+  Ptr<Packet> p = GetPacket ();
+  NS_ASSERT (p != 0);
+  uint32_t ret = p->GetSize ();
+  if (!m_headerAdded)
+    {
+      ret += m_header.GetSerializedSize ();
+    }
+  return ret;
+}
+
+const Ipv4Header&
+Ipv4QueueDiscItem::GetHeader (void) const
+{
+  return m_header;
+}
+
+void Ipv4QueueDiscItem::AddHeader(void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ASSERT_MSG (!m_headerAdded, "The header has been already added to the packet");
+  Ptr<Packet> p = GetPacket ();
+  NS_ASSERT (p != 0);
+  p->AddHeader (m_header);
+  m_headerAdded = true;
+}
+
+void
+Ipv4QueueDiscItem::Print (std::ostream& os) const
+{
+  if (!m_headerAdded)
+    {
+      os << m_header << " ";
+    }
+  os << GetPacket () << " "
+     << "Dst addr " << GetAddress () << " "
+     << "proto " << (uint16_t) GetProtocol () << " "
+     << "txq " << (uint8_t) GetTxQueueIndex ()
+  ;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/ipv4-queue-disc-item.h ns-3.25/src/internet/model/ipv4-queue-disc-item.h
--- ns-3.24.1/src/internet/model/ipv4-queue-disc-item.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv4-queue-disc-item.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,99 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef IPV4_QUEUE_DISC_ITEM_H
+#define IPV4_QUEUE_DISC_ITEM_H
+
+#include "ns3/packet.h"
+#include "ns3/object.h"
+#include "ns3/net-device.h"
+#include "ns3/traced-value.h"
+#include "ns3/queue-disc.h"
+#include "ipv4-header.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup internet
+ *
+ * Ipv4QueueDiscItem is a subclass of QueueDiscItem which stores IPv4 packets.
+ * Header and payload are kept separate to allow the queue disc to manipulate
+ * the header, which is added to the packet when the packet is dequeued.
+ */
+class Ipv4QueueDiscItem : public QueueDiscItem {
+public:
+  /**
+   * \brief Create an IPv4 queue disc item containing an IPv4 packet.
+   * \param p the packet included in the created item.
+   * \param addr the destination MAC address
+   * \param protocol the protocol number
+   * \param header the IPv4 header
+   */
+  Ipv4QueueDiscItem (Ptr<Packet> p, const Address & addr, uint16_t protocol, const Ipv4Header & header);
+
+  virtual ~Ipv4QueueDiscItem ();
+
+  /**
+   * \return the correct packet size (header plus payload).
+   */
+  virtual uint32_t GetPacketSize (void) const;
+
+  /**
+   * \return the header stored in this item..
+   */
+  const Ipv4Header & GetHeader (void) const;
+
+  /**
+   * \brief Add the header to the packet
+   */
+  virtual void AddHeader (void);
+
+  /**
+   * \brief Print the item contents.
+   * \param os output stream in which the data should be printed.
+   */
+  virtual void Print (std::ostream &os) const;
+
+private:
+  /**
+   * \brief Default constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Ipv4QueueDiscItem ();
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Ipv4QueueDiscItem (const Ipv4QueueDiscItem &);
+  /**
+   * \brief Assignment operator
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  Ipv4QueueDiscItem &operator = (const Ipv4QueueDiscItem &);
+
+  Ipv4Header m_header;
+  bool m_headerAdded;
+};
+
+} // namespace ns3
+
+#endif /* IPV4_QUEUE_DISC_ITEM_H */
diff -Naur ns-3.24.1/src/internet/model/ipv4-raw-socket-impl.cc ns-3.25/src/internet/model/ipv4-raw-socket-impl.cc
--- ns-3.24.1/src/internet/model/ipv4-raw-socket-impl.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-raw-socket-impl.cc	2016-03-23 21:36:53.000000000 -0700
@@ -131,6 +131,21 @@
   address = InetSocketAddress (m_src, 0);
   return 0;
 }
+int
+Ipv4RawSocketImpl::GetPeerName (Address &address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (m_dst == Ipv4Address::GetAny ())
+    {
+      m_err = ERROR_NOTCONN;
+      return -1;
+    }
+
+  address = InetSocketAddress (m_dst, 0);
+
+  return 0;
+}
 int 
 Ipv4RawSocketImpl::Close (void)
 {
@@ -237,17 +252,19 @@
       if (route != 0)
         {
           NS_LOG_LOGIC ("Route exists");
+          uint32_t pktSize = p->GetSize ();
           if (!m_iphdrincl)
             {
               ipv4->Send (p, route->GetSource (), dst, m_protocol, route);
             }
           else
             {
+              pktSize += header.GetSerializedSize ();
               ipv4->SendWithHeader (p, header, route);
             }
-          NotifyDataSent (p->GetSize ());
+          NotifyDataSent (pktSize);
           NotifySend (GetTxAvailable ());
-          return p->GetSize ();
+          return pktSize;
         }
       else
         {
diff -Naur ns-3.24.1/src/internet/model/ipv4-raw-socket-impl.h ns-3.25/src/internet/model/ipv4-raw-socket-impl.h
--- ns-3.24.1/src/internet/model/ipv4-raw-socket-impl.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-raw-socket-impl.h	2016-03-23 21:36:53.000000000 -0700
@@ -53,6 +53,7 @@
   virtual int Bind ();
   virtual int Bind6 ();
   virtual int GetSockName (Address &address) const; 
+  virtual int GetPeerName (Address &address) const;
   virtual int Close (void);
   virtual int ShutdownSend (void);
   virtual int ShutdownRecv (void);
@@ -98,7 +99,7 @@
     uint16_t fromProtocol;   /**< Protocol used */
   };
 
-  enum Socket::SocketErrno m_err;   //!< Last error number.
+  mutable enum Socket::SocketErrno m_err; //!< Last error number.
   Ptr<Node> m_node;                 //!< Node
   Ipv4Address m_src;                //!< Source address.
   Ipv4Address m_dst;                //!< Destination address.
diff -Naur ns-3.24.1/src/internet/model/ipv4-static-routing.cc ns-3.25/src/internet/model/ipv4-static-routing.cc
--- ns-3.24.1/src/internet/model/ipv4-static-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-static-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -235,7 +235,7 @@
       rtentry->SetDestination (dest);
       rtentry->SetGateway (Ipv4Address::GetZero ());
       rtentry->SetOutputDevice (oif);
-      rtentry->SetSource (m_ipv4->GetAddress (oif->GetIfIndex (), 0).GetLocal ());
+      rtentry->SetSource (m_ipv4->GetAddress (m_ipv4->GetInterfaceForDevice (oif), 0).GetLocal ());
       return rtentry;
     }
 
@@ -281,9 +281,13 @@
           uint32_t interfaceIdx = route->GetInterface ();
           rtentry = Create<Ipv4Route> ();
           rtentry->SetDestination (route->GetDest ());
-          rtentry->SetSource (SourceAddressSelection (interfaceIdx, route->GetDest ()));
+          rtentry->SetSource (m_ipv4->SourceAddressSelection (interfaceIdx, route->GetDest ()));
           rtentry->SetGateway (route->GetGateway ());
           rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIdx));
+          if (masklen == 32)
+            {
+              break;
+            }
         }
     }
   if (rtentry != 0)
@@ -495,7 +499,7 @@
   uint32_t iif = m_ipv4->GetInterfaceForDevice (idev); 
 
   // Multicast recognition; handle local delivery here
-  //
+
   if (ipHeader.GetDestination ().IsMulticast ())
     {
       NS_LOG_LOGIC ("Multicast destination");
@@ -514,48 +518,26 @@
           return false; // Let other routing protocols try to handle this
         }
     }
-  if (ipHeader.GetDestination ().IsBroadcast ())
+
+  if (m_ipv4->IsDestinationAddress (ipHeader.GetDestination (), iif))
     {
-      NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
-      /// \todo Local Deliver for broadcast
-      /// \todo Forward broadcast
-    }
-
-  NS_LOG_LOGIC ("Unicast destination");
-  /// \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_ipv4->GetNInterfaces (); j++)
-    {
-      for (uint32_t i = 0; i < m_ipv4->GetNAddresses (j); i++)
-        {
-          Ipv4InterfaceAddress iaddr = m_ipv4->GetAddress (j, i);
-          Ipv4Address addr = iaddr.GetLocal ();
-          if (addr.IsEqual (ipHeader.GetDestination ()))
-            {
-              if (j == iif)
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match)");
-                }
-              else
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match) on another interface " << ipHeader.GetDestination ());
-                }
-              lcb (p, ipHeader, iif);
-              return true;
-            }
-          if (ipHeader.GetDestination ().IsEqual (iaddr.GetBroadcast ()))
-            {
-              NS_LOG_LOGIC ("For me (interface broadcast address)");
-              lcb (p, ipHeader, iif);
-              return true;
-            }
-          NS_LOG_LOGIC ("Address "<< addr << " not a match");
+      if (!lcb.IsNull ())
+        {
+          NS_LOG_LOGIC ("Local delivery to " << ipHeader.GetDestination ());
+          lcb (p, ipHeader, iif);
+          return true;
+        }
+      else
+        {
+          // The local delivery callback is null.  This may be a multicast
+          // or broadcast packet, so return false so that another
+          // multicast routing protocol can handle it.  It should be possible
+          // to extend this to explicitly check whether it is a unicast
+          // packet, and invoke the error callback if so
+          return false;
         }
     }
+
   // Check if input device supports IP forwarding
   if (m_ipv4->IsForwarding (iif) == false)
     {
@@ -712,6 +694,12 @@
 {
   NS_LOG_FUNCTION (this << stream);
   std::ostream* os = stream->GetStream ();
+
+  *os << "Node: " << m_ipv4->GetObject<Node> ()->GetId ()
+      << ", Time: " << Now().As (Time::S)
+      << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+      << ", Ipv4StaticRouting table" << std::endl;
+
   if (GetNRoutes () > 0)
     {
       *os << "Destination     Gateway         Genmask         Flags Metric Ref    Use Iface" << std::endl;
@@ -751,32 +739,7 @@
           *os << std::endl;
         }
     }
-}
-Ipv4Address
-Ipv4StaticRouting::SourceAddressSelection (uint32_t interfaceIdx, Ipv4Address dest)
-{
-  NS_LOG_FUNCTION (this << interfaceIdx << " " << dest);
-  if (m_ipv4->GetNAddresses (interfaceIdx) == 1)  // common case
-    {
-      return m_ipv4->GetAddress (interfaceIdx, 0).GetLocal ();
-    }
-  // no way to determine the scope of the destination, so adopt the
-  // following rule:  pick the first available address (index 0) unless
-  // a subsequent address is on link (in which case, pick the primary
-  // address if there are multiple)
-  Ipv4Address candidate = m_ipv4->GetAddress (interfaceIdx, 0).GetLocal ();
-  for (uint32_t i = 0; i < m_ipv4->GetNAddresses (interfaceIdx); i++)
-    {
-      Ipv4InterfaceAddress test = m_ipv4->GetAddress (interfaceIdx, i);
-      if (test.GetLocal ().CombineMask (test.GetMask ()) == dest.CombineMask (test.GetMask ()))
-        {
-          if (test.IsSecondary () == false) 
-            {
-              return test.GetLocal ();
-            }
-        }
-    }
-  return candidate;
+  *os << std::endl;
 }
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/ipv4-static-routing.h ns-3.25/src/internet/model/ipv4-static-routing.h
--- ns-3.24.1/src/internet/model/ipv4-static-routing.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv4-static-routing.h	2016-03-23 21:36:53.000000000 -0700
@@ -418,14 +418,6 @@
                                         uint32_t interface);
 
   /**
-   * \brief Choose the source address to use with destination address.
-   * \param interface interface index
-   * \param dest IPv4 destination address
-   * \return IPv4 source address to use
-   */
-  Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest);
-
-  /**
    * \brief the forwarding table for network.
    */
   NetworkRoutes m_networkRoutes;
diff -Naur ns-3.24.1/src/internet/model/ipv6-autoconfigured-prefix.cc ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.cc
--- ns-3.24.1/src/internet/model/ipv6-autoconfigured-prefix.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.cc	2016-03-23 21:36:53.000000000 -0700
@@ -33,6 +33,10 @@
 
 Ipv6AutoconfiguredPrefix::Ipv6AutoconfiguredPrefix (Ptr<Node> node, uint32_t interface, Ipv6Address prefix, Ipv6Prefix mask, uint32_t preferredLifeTime, uint32_t validLifeTime, Ipv6Address router)
 {
+  if (preferredLifeTime+validLifeTime == 0)
+    {
+      NS_LOG_WARN ("Ipv6AutoconfiguredPrefix: Preferred and Valid Lifetimes are zero, the address will be removed immediately.");
+    }
   m_node = node;
   m_interface = interface;
   m_validLifeTime = validLifeTime;
@@ -73,6 +77,10 @@
 void Ipv6AutoconfiguredPrefix::SetPreferredLifeTime (uint32_t t)
 {
   m_preferredLifeTime = t;
+  if (m_preferredLifeTime+m_validLifeTime == 0)
+    {
+      NS_LOG_WARN ("Ipv6AutoconfiguredPrefix: Preferred and Valid Lifetimes are zero, the address will be removed immediately.");
+    }
 }
 
 uint32_t Ipv6AutoconfiguredPrefix::GetPreferredLifeTime () const
@@ -83,6 +91,10 @@
 void Ipv6AutoconfiguredPrefix::SetValidLifeTime (uint32_t t)
 {
   m_validLifeTime = t;
+  if (m_preferredLifeTime+m_validLifeTime == 0)
+    {
+      NS_LOG_WARN ("Ipv6AutoconfiguredPrefix: Preferred and Valid Lifetimes are zero, the address will be removed immediately.");
+    }
 }
 
 uint32_t Ipv6AutoconfiguredPrefix::GetValidLifeTime () const
diff -Naur ns-3.24.1/src/internet/model/ipv6-autoconfigured-prefix.h ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.h
--- ns-3.24.1/src/internet/model/ipv6-autoconfigured-prefix.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-autoconfigured-prefix.h	2016-03-23 21:36:53.000000000 -0700
@@ -219,7 +219,7 @@
   Ptr<Node> m_node;
 
   /**
-   * \brief The prefix IP6 address.
+   * \brief The prefix IPv6 address.
    */
   Ipv6Address m_prefix;
 
diff -Naur ns-3.24.1/src/internet/model/ipv6-end-point.cc ns-3.25/src/internet/model/ipv6-end-point.cc
--- ns-3.24.1/src/internet/model/ipv6-end-point.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-end-point.cc	2016-03-23 21:36:53.000000000 -0700
@@ -115,8 +115,7 @@
 {
   if (!m_rxCallback.IsNull ())
     {
-      Simulator::ScheduleNow (&Ipv6EndPoint::DoForwardUp, this, p, header, port,
-                              incomingInterface);
+      m_rxCallback (p, header, port, incomingInterface);
     }
 }
 
@@ -125,22 +124,10 @@
 {
   if (!m_icmpCallback.IsNull ())
     {
-      Simulator::ScheduleNow (&Ipv6EndPoint::DoForwardIcmp, this,
-                              src, ttl, type, code, info);
+      m_icmpCallback (src, ttl, type, code, info);
     }
 }
 
-void Ipv6EndPoint::DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport, Ptr<Ipv6Interface> incomingInterface)
-{
-  m_rxCallback (p, header, sport, incomingInterface);
-}
-
-void Ipv6EndPoint::DoForwardIcmp (Ipv6Address src, uint8_t ttl, uint8_t type, 
-                                  uint8_t code, uint32_t info)
-{
-  m_icmpCallback (src, ttl, type, code, info);
-}
-
 void Ipv6EndPoint::SetRxEnabled (bool enabled)
 {
   m_rxEnabled = enabled;
diff -Naur ns-3.24.1/src/internet/model/ipv6-end-point.h ns-3.25/src/internet/model/ipv6-end-point.h
--- ns-3.24.1/src/internet/model/ipv6-end-point.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-end-point.h	2016-03-23 21:36:53.000000000 -0700
@@ -191,26 +191,6 @@
 
 private:
   /**
-   * \brief ForwardUp wrapper.
-   * \param p packet
-   * \param header the packet header
-   * \param sport source port
-   * \param incomingInterface incoming interface
-   */
-  void DoForwardUp (Ptr<Packet> p, Ipv6Header header, uint16_t sport, Ptr<Ipv6Interface> incomingInterface);
-
-  /**
-   * \brief ForwardIcmp wrapper.
-   * \param src source IPv6 address
-   * \param ttl time-to-live
-   * \param type ICMPv6 type
-   * \param code ICMPv6 code
-   * \param info ICMPv6 info
-   */
-  void DoForwardIcmp (Ipv6Address src, uint8_t ttl, uint8_t type,
-                      uint8_t code, uint32_t info);
-
-  /**
    * \brief The local address.
    */
   Ipv6Address m_localAddr;
diff -Naur ns-3.24.1/src/internet/model/ipv6-extension.cc ns-3.25/src/internet/model/ipv6-extension.cc
--- ns-3.24.1/src/internet/model/ipv6-extension.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-extension.cc	2016-03-23 21:36:53.000000000 -0700
@@ -421,13 +421,10 @@
   return 0;
 }
 
-void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragmentSize, std::list<Ptr<Packet> >& listFragments)
+void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, Ipv6Header ipv6Header, uint32_t maxFragmentSize, std::list<Ipv6PayloadHeaderPair>& listFragments)
 {
   Ptr<Packet> p = packet->Copy ();
 
-  Ipv6Header ipv6Header;
-  p->RemoveHeader (ipv6Header);
-
   uint8_t nextHeader = ipv6Header.GetNextHeader ();
   uint8_t ipv6HeaderSize = ipv6Header.GetSerializedSize ();
 
@@ -579,11 +576,12 @@
         }
 
       ipv6Header.SetPayloadLength (fragment->GetSize ());
-      fragment->AddHeader (ipv6Header);
 
       std::ostringstream oss;
+      oss << ipv6Header;
       fragment->Print (oss);
-      listFragments.push_back (fragment);
+
+      listFragments.push_back (Ipv6PayloadHeaderPair (fragment, ipv6Header));
     }
   while (moreFragment);
 
@@ -1020,7 +1018,6 @@
       return routingHeader.GetSerializedSize ();
     }
 
-  routingHeader.SetLength (88);
   ipv6header.SetHopLimit (hopLimit - 1);
   p->AddHeader (routingHeader);
 
diff -Naur ns-3.24.1/src/internet/model/ipv6-extension.h ns-3.25/src/internet/model/ipv6-extension.h
--- ns-3.24.1/src/internet/model/ipv6-extension.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-extension.h	2016-03-23 21:36:53.000000000 -0700
@@ -286,12 +286,17 @@
                            Ipv6L3Protocol::DropReason& dropReason);
 
   /**
+   * \brief Pair of a packet and an Ipv6 header.
+   */
+  typedef std::pair<Ptr<Packet>, Ipv6Header> Ipv6PayloadHeaderPair;
+
+  /**
    * \brief Fragment a packet
    * \param packet the packet
    * \param fragmentSize the maximal size of the fragment (unfragmentable part + fragmentation header + fragmentable part)
    * \param listFragments the list of fragments
    */
-  void GetFragments (Ptr<Packet> packet, uint32_t fragmentSize, std::list<Ptr<Packet> >& listFragments);
+  void GetFragments (Ptr<Packet> packet, Ipv6Header ipv6Header, uint32_t fragmentSize, std::list<Ipv6PayloadHeaderPair>& listFragments);
 
 protected:
   /**
diff -Naur ns-3.24.1/src/internet/model/ipv6-extension-header.cc ns-3.25/src/internet/model/ipv6-extension-header.cc
--- ns-3.24.1/src/internet/model/ipv6-extension-header.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-extension-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -46,8 +46,8 @@
 }
 
 Ipv6ExtensionHeader::Ipv6ExtensionHeader ()
-  : m_nextHeader (0),
-    m_length (0),
+  : m_length (0),
+    m_nextHeader (0),
     m_data (0)
 {
 }
@@ -254,7 +254,7 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  m_length = i.ReadU8 ();
   OptionField::Deserialize (i, GetLength () - 2);
 
   return GetSerializedSize ();
@@ -310,7 +310,7 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  m_length = i.ReadU8 ();
   OptionField::Deserialize (i, GetLength () - 2);
 
   return GetSerializedSize ();
@@ -337,7 +337,7 @@
   : m_offset (0),
     m_identification (0)
 {
-  SetLength (16);
+  m_length = 0;
 }
 
 Ipv6ExtensionFragmentHeader::~Ipv6ExtensionFragmentHeader ()
@@ -392,6 +392,7 @@
   Buffer::Iterator i = start;
 
   i.WriteU8 (GetNextHeader ());
+  // Fragment header does not carry an extension length
   i.WriteU8 (0);
   i.WriteHtonU16 (m_offset);
   i.WriteHtonU32 (m_identification);
@@ -402,7 +403,8 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  // Fragment header does not carry an extension length
+  i.ReadU8 ();
   m_offset = i.ReadNtohU16 ();
   m_identification = i.ReadNtohU32 ();
 
@@ -472,7 +474,7 @@
   Buffer::Iterator i = start;
 
   i.WriteU8 (GetNextHeader ());
-  i.WriteU8 ((GetLength () >> 3) - 1);
+  i.WriteU8 (m_length);
   i.WriteU8 (m_typeRouting);
   i.WriteU8 (m_segmentsLeft);
 }
@@ -482,7 +484,7 @@
   Buffer::Iterator i = start;
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  m_length = i.ReadU8 ();
   m_typeRouting = i.ReadU8 ();
   m_segmentsLeft = i.ReadU8 ();
 
@@ -564,8 +566,10 @@
   Buffer::Iterator i = start;
   uint8_t buff[16];
 
+  uint8_t addressNum = m_routersAddress.size ();
+
   i.WriteU8 (GetNextHeader ());
-  i.WriteU8 ((GetLength () >> 3) - 1);
+  i.WriteU8 (addressNum*2);
   i.WriteU8 (GetTypeRouting ());
   i.WriteU8 (GetSegmentsLeft ());
   i.WriteU32 (0);
@@ -583,15 +587,17 @@
   uint8_t buff[16];
 
   SetNextHeader (i.ReadU8 ());
-  SetLength ((i.ReadU8 () + 1) << 3);
+  m_length = i.ReadU8 ();
   SetTypeRouting (i.ReadU8 ());
   SetSegmentsLeft (i.ReadU8 ());
   i.ReadU32 ();
 
-  for (std::vector<Ipv6Address>::iterator it = m_routersAddress.begin (); it != m_routersAddress.end (); it++)
+  uint8_t addressNum = m_length / 2;
+  SetNumberAddress (addressNum);
+  for (uint8_t index = 0; index < addressNum; index++)
     {
       i.Read (buff, 16);
-      it->Set (buff);
+      SetRouterAddress (index, Ipv6Address (buff));
     }
 
   return GetSerializedSize ();
diff -Naur ns-3.24.1/src/internet/model/ipv6-extension-header.h ns-3.25/src/internet/model/ipv6-extension-header.h
--- ns-3.24.1/src/internet/model/ipv6-extension-header.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-extension-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -111,16 +111,17 @@
    */
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
-private:
+protected:
   /**
-   * \brief The "next header" field.
+   * \brief The "length" field.
    */
-  uint8_t m_nextHeader;
+  uint8_t m_length;
 
+private:
   /**
-   * \brief The "length" field.
+   * \brief The "next header" field.
    */
-  uint8_t m_length;
+  uint8_t m_nextHeader;
 
   /**
    * \brief The data of the extension.
diff -Naur ns-3.24.1/src/internet/model/ipv6.h ns-3.25/src/internet/model/ipv6.h
--- ns-3.24.1/src/internet/model/ipv6.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6.h	2016-03-23 21:36:53.000000000 -0700
@@ -39,6 +39,7 @@
 class Packet;
 class Ipv6RoutingProtocol;
 class IpL4Protocol;
+class Ipv6Route;
 
 /**
  * \ingroup internet
@@ -313,13 +314,67 @@
   virtual Ipv6Address SourceAddressSelection (uint32_t interface, Ipv6Address dest) = 0;
 
   /**
+   * \brief Add a L4 protocol.
+   * \param protocol L4 protocol
+   */
+  virtual void Insert (Ptr<IpL4Protocol> protocol) = 0;
+
+  /**
+   * \brief Add a L4 protocol to a specific interface.
+   *
+   * This may be called multiple times for multiple interfaces for the same
+   * protocol.  To insert for all interfaces, use the separate
+   * Insert (Ptr<IpL4Protocol> protocol) method.
+   *
+   * Setting a protocol on a specific interface will overwrite the
+   * previously bound protocol.
+   *
+   * \param protocol L4 protocol.
+   * \param interfaceIndex interface index.
+   */
+  virtual void Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex) = 0;
+
+  /**
+   * \brief Remove a L4 protocol.
+   * \param protocol L4 protocol to remove.
+   */
+  virtual void Remove (Ptr<IpL4Protocol> protocol) = 0;
+
+  /**
+   * \brief Remove a L4 protocol from a specific interface.
+   * \param protocol L4 protocol to remove.
+   * \param interfaceIndex interface index.
+   */
+  virtual void Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex) = 0;
+
+  /**
    * \brief Get L4 protocol by protocol number.
    * \param protocolNumber protocol number
-   * \return corresponding Ipv6L4Protocol or 0 if not found
+   * \return corresponding IpL4Protocol or 0 if not found
    */
   virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber) const = 0;
 
   /**
+   * \brief Get L4 protocol by protocol number for the specified interface.
+   * \param protocolNumber protocol number
+   * \param interfaceIndex interface index, -1 means "any" interface.
+   * \return corresponding IpL4Protocol or 0 if not found
+   */
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber, int32_t interfaceIndex) const = 0;
+
+  /**
+   * \brief Higher-level layers call this method to send a packet
+   * down the stack to the MAC and PHY layers.
+   *
+   * \param packet packet to send
+   * \param source source address of packet
+   * \param destination address of packet
+   * \param protocol number of packet
+   * \param route route to take
+   */
+  virtual void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route) = 0;
+
+  /**
    * \brief Register the IPv6 Extensions.
    */
   virtual void RegisterExtensions () = 0;
diff -Naur ns-3.24.1/src/internet/model/ipv6-header.cc ns-3.25/src/internet/model/ipv6-header.cc
--- ns-3.24.1/src/internet/model/ipv6-header.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,8 +32,7 @@
 NS_OBJECT_ENSURE_REGISTERED (Ipv6Header);
 
 Ipv6Header::Ipv6Header ()
-  : m_version (6),
-    m_trafficClass (0),
+  : m_trafficClass (0),
     m_flowLabel (1),
     m_payloadLength (0),
     m_nextHeader (0),
@@ -130,9 +129,9 @@
 
 void Ipv6Header::Print (std::ostream& os) const
 {
-  os << "("
-  "Version " << m_version << " "
+  os << "(Version 6 "
      << "Traffic class 0x" << std::hex << m_trafficClass << std::dec << " "
+     << "DSCP " << DscpTypeToString (GetDscp ()) << " "
      << "Flow Label 0x" << std::hex << m_flowLabel << std::dec << " "
      << "Payload Length " << m_payloadLength << " "
      << "Next Header " << std::dec << (uint32_t) m_nextHeader << " "
@@ -151,7 +150,7 @@
   Buffer::Iterator i = start;
   uint32_t vTcFl = 0; /* version, Traffic Class and Flow Label fields */
 
-  vTcFl= (6 << 28) | (m_trafficClass << 20) | (m_flowLabel);
+  vTcFl = (6 << 28) | (m_trafficClass << 20) | (m_flowLabel);
 
   i.WriteHtonU32 (vTcFl);
   i.WriteHtonU16 (m_payloadLength);
@@ -168,9 +167,11 @@
   uint32_t vTcFl = 0;
 
   vTcFl = i.ReadNtohU32 ();
-  m_version = vTcFl >> 28;
-
-  NS_ASSERT ((m_version) == 6);
+  if ((vTcFl >> 28) != 6)
+    {
+      NS_LOG_WARN ("Trying to decode a non-IPv6 header, refusing to do it.");
+      return 0;
+    }
 
   m_trafficClass = (uint8_t)((vTcFl >> 20) & 0x000000ff);
   m_flowLabel = vTcFl & 0xfff00000;
@@ -184,5 +185,72 @@
   return GetSerializedSize ();
 }
 
+void Ipv6Header::SetDscp (DscpType dscp)
+{
+  NS_LOG_FUNCTION (this << dscp);
+  m_trafficClass &= 0x3; // Clear out the DSCP part, retain 2 bits of ECN
+  m_trafficClass |= (dscp << 2);
+}
+
+Ipv6Header::DscpType Ipv6Header::GetDscp (void) const
+{
+  NS_LOG_FUNCTION (this);
+  // Extract only first 6 bits of TOS byte, i.e 0xFC
+  return DscpType ((m_trafficClass & 0xFC) >> 2);
+}
+
+std::string Ipv6Header::DscpTypeToString (DscpType dscp) const
+{
+  NS_LOG_FUNCTION (this << dscp);
+  switch (dscp)
+    {
+      case DscpDefault:
+        return "Default";
+      case DSCP_CS1:
+        return "CS1";
+      case DSCP_AF11:
+        return "AF11";
+      case DSCP_AF12:
+        return "AF12";
+      case DSCP_AF13:
+        return "AF13";
+      case DSCP_CS2:
+        return "CS2";
+      case DSCP_AF21:
+        return "AF21";
+      case DSCP_AF22:
+        return "AF22";
+      case DSCP_AF23:
+        return "AF23";
+      case DSCP_CS3:
+        return "CS3";
+      case DSCP_AF31:
+        return "AF31";
+      case DSCP_AF32:
+        return "AF32";
+      case DSCP_AF33:
+        return "AF33";
+      case DSCP_CS4:
+        return "CS4";
+      case DSCP_AF41:
+        return "AF41";
+      case DSCP_AF42:
+        return "AF42";
+      case DSCP_AF43:
+        return "AF43";
+      case DSCP_CS5:
+        return "CS5";
+      case DSCP_EF:
+        return "EF";
+      case DSCP_CS6:
+        return "CS6";
+      case DSCP_CS7:
+        return "CS7";
+      default:
+        return "Unrecognized DSCP";
+    };
+}
+
+
 } /* namespace ns3 */
 
diff -Naur ns-3.24.1/src/internet/model/ipv6-header.h ns-3.25/src/internet/model/ipv6-header.h
--- ns-3.24.1/src/internet/model/ipv6-header.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -34,6 +34,47 @@
 {
 public:
   /**
+   * \enum DscpType
+   * \brief DiffServ Code Points
+   * Code Points defined in
+   * Assured Forwarding (AF) \RFC{2597}
+   * Expedited Forwarding (EF) \RFC{2598}
+   * Default and Class Selector (CS) \RFC{2474}
+   */
+  enum DscpType
+    {
+      DscpDefault = 0x00,
+
+      // Prefixed with "DSCP" to avoid name clash (bug 1723)
+      DSCP_CS1  = 0x08, // octal 010
+      DSCP_AF11 = 0x0A, // octal 012
+      DSCP_AF12 = 0x0C, // octal 014
+      DSCP_AF13 = 0x0E, // octal 016
+
+      DSCP_CS2  = 0x10, // octal 020
+      DSCP_AF21 = 0x12, // octal 022
+      DSCP_AF22 = 0x14, // octal 024
+      DSCP_AF23 = 0x16, // octal 026
+
+      DSCP_CS3  = 0x18, // octal 030
+      DSCP_AF31 = 0x1A, // octal 032
+      DSCP_AF32 = 0x1C, // octal 034
+      DSCP_AF33 = 0x1E, // octal 036
+
+      DSCP_CS4  = 0x20, // octal 040
+      DSCP_AF41 = 0x22, // octal 042
+      DSCP_AF42 = 0x24, // octal 044
+      DSCP_AF43 = 0x26, // octal 046
+
+      DSCP_CS5  = 0x28, // octal 050
+      DSCP_EF   = 0x2E, // octal 056
+
+      DSCP_CS6  = 0x30, // octal 060
+      DSCP_CS7  = 0x38  // octal 070
+
+    };
+
+  /**
    * \enum NextHeader_e
    * \brief IPv6 next-header value
    */
@@ -86,6 +127,23 @@
   uint8_t GetTrafficClass (void) const;
 
   /**
+   * \brief Set DSCP Field
+   * \param dscp DSCP value
+   */
+  void SetDscp (DscpType dscp);
+
+  /**
+   * \returns the DSCP field of this packet.
+   */
+  DscpType GetDscp (void) const;
+
+  /**
+   * \param dscp the dscp
+   * \returns std::string of DSCPType
+   */
+  std::string DscpTypeToString (DscpType dscp) const;
+
+  /**
    * \brief Set the "Flow label" field.
    * \param flow the 20-bit value
    */
@@ -185,10 +243,6 @@
 
 private:
   /**
-   * \brief The version (always equal to 6).
-   */
-  uint32_t m_version : 4;
-  /**
    * \brief The traffic class.
    */
   uint32_t m_trafficClass : 8;
diff -Naur ns-3.24.1/src/internet/model/ipv6-interface.cc ns-3.25/src/internet/model/ipv6-interface.cc
--- ns-3.24.1/src/internet/model/ipv6-interface.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-interface.cc	2016-03-23 21:36:53.000000000 -0700
@@ -23,6 +23,7 @@
 #include "ns3/packet.h"
 
 #include "ipv6-interface.h"
+#include "ipv6-queue-disc-item.h"
 #include "ns3/net-device.h"
 #include "loopback-net-device.h"
 #include "ns3/mac16-address.h"
@@ -30,6 +31,7 @@
 #include "ipv6-l3-protocol.h"
 #include "icmpv6-l4-protocol.h"
 #include "ndisc-cache.h"
+#include "ns3/traffic-control-layer.h"
 
 namespace ns3
 {
@@ -53,6 +55,7 @@
     m_metric (1),
     m_node (0),
     m_device (0),
+    m_tc (0),
     m_ndCache (0),
     m_curHopLimit (0),
     m_baseReachableTime (0),
@@ -72,6 +75,7 @@
   NS_LOG_FUNCTION_NOARGS ();
   m_node = 0;
   m_device = 0;
+  m_tc = 0;
   m_ndCache = 0;
   Object::DoDispose ();
 }
@@ -94,16 +98,19 @@
         {
           Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address::ConvertFrom (addr)), Ipv6Prefix (64));
           AddAddress (ifaddr);
+          m_linkLocalAddress = ifaddr;
         }
       else if (Mac48Address::IsMatchingType (addr))
         {
           Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac48Address::ConvertFrom (addr)), Ipv6Prefix (64));
           AddAddress (ifaddr);
+          m_linkLocalAddress = ifaddr;
         }
       else if (Mac16Address::IsMatchingType (addr))
         {
           Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr)), Ipv6Prefix (64));
           AddAddress (ifaddr);
+          m_linkLocalAddress = ifaddr;
         }
       else
         {
@@ -141,6 +148,13 @@
   DoSetup ();
 }
 
+void
+Ipv6Interface::SetTrafficControl (Ptr<TrafficControlLayer> tc)
+{
+  NS_LOG_FUNCTION (this << tc);
+  m_tc = tc;
+}
+
 Ptr<NetDevice> Ipv6Interface::GetDevice () const
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -213,13 +227,14 @@
     {
       for (Ipv6InterfaceAddressListCI it = m_addresses.begin (); it != m_addresses.end (); ++it)
         {
-          if ((*it).GetAddress () == addr)
+          if (it->first.GetAddress () == addr)
             {
               return false;
             }
         }
 
-      m_addresses.push_back (iface);
+      Ipv6Address solicited = Ipv6Address::MakeSolicitedAddress (iface.GetAddress ());
+      m_addresses.push_back (std::make_pair (iface, solicited));
 
       if (!addr.IsAny () || !addr.IsLocalhost ())
         {
@@ -249,16 +264,23 @@
   /* IPv6 interface has always at least one IPv6 link-local address */
   NS_LOG_FUNCTION_NOARGS ();
 
+  return m_linkLocalAddress;
+}
+
+bool Ipv6Interface::IsSolicitedMulticastAddress (Ipv6Address address) const
+{
+  /* IPv6 interface has always at least one IPv6 Solicited Multicast address */
+  NS_LOG_FUNCTION (this << address);
+
   for (Ipv6InterfaceAddressListCI it = m_addresses.begin (); it != m_addresses.end (); ++it)
-    {
-      if ((*it).GetAddress ().IsLinkLocal ())
-        {
-          return (*it);
-        }
-    }
-  NS_ASSERT_MSG (false, "No link-local address on interface " << this);
-  Ipv6InterfaceAddress addr;
-  return addr; /* quiet compiler */
+     {
+       if (it->second == address)
+         {
+           return true;
+         }
+     }
+
+  return false;
 }
 
 Ipv6InterfaceAddress Ipv6Interface::GetAddress (uint32_t index) const
@@ -272,7 +294,7 @@
         {
           if (i == index)
             {
-              return (*it);
+              return it->first;
             }
           i++;
         }
@@ -303,7 +325,7 @@
     {
       if (i == index)
         {
-          Ipv6InterfaceAddress iface = (*it);
+          Ipv6InterfaceAddress iface = it->first;
           m_addresses.erase (it);
           return iface;
         }
@@ -329,9 +351,9 @@
 
   for (Ipv6InterfaceAddressListI it = m_addresses.begin (); it != m_addresses.end (); ++it)
     {
-      if((*it).GetAddress() == address)
+      if(it->first.GetAddress () == address)
         {
-          Ipv6InterfaceAddress iface = (*it);
+          Ipv6InterfaceAddress iface = it->first;
           m_addresses.erase(it);
           return iface;
         }
@@ -345,7 +367,7 @@
 
   for (Ipv6InterfaceAddressList::const_iterator it = m_addresses.begin (); it != m_addresses.end (); ++it)
     {
-      Ipv6InterfaceAddress ifaddr = (*it);
+      Ipv6InterfaceAddress ifaddr = it->first;
 
       if (ifaddr.GetPrefix ().IsMatch (ifaddr.GetAddress (), dst))
         {
@@ -358,36 +380,41 @@
   return ret; /* quiet compiler */
 }
 
-void Ipv6Interface::Send (Ptr<Packet> p, Ipv6Address dest)
+void Ipv6Interface::Send (Ptr<Packet> p, const Ipv6Header & hdr, Ipv6Address dest)
 {
   NS_LOG_FUNCTION (this << p << dest);
-  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
 
   if (!IsUp ())
     {
       return;
     }
 
-  /* check if destination is localhost (::1) */
+  Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
+
+  /* check if destination is localhost (::1), if yes we don't pass through
+   * traffic control layer */
   if (DynamicCast<LoopbackNetDevice> (m_device))
     {
       /** \todo additional checks needed here (such as whether multicast
        * goes to loopback)?
        */
+      p->AddHeader (hdr);
       m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
       return;
     }
 
+  NS_ASSERT (m_tc != 0);
+
   /* check if destination is for one of our interface */
   for (Ipv6InterfaceAddressListCI it = m_addresses.begin (); it != m_addresses.end (); ++it)
     {
-      if (dest == (*it).GetAddress ())
+      if (dest == it->first.GetAddress ())
         {
-          ipv6->Receive (m_device, p, Ipv6L3Protocol::PROT_NUMBER,
+          p->AddHeader (hdr);
+          m_tc->Receive (m_device, p, Ipv6L3Protocol::PROT_NUMBER,
                          m_device->GetBroadcast (),
                          m_device->GetBroadcast (),
-                         NetDevice::PACKET_HOST // note: linux uses PACKET_LOOPBACK here
-                         );
+                         NetDevice::PACKET_HOST);
           return;
         }
     }
@@ -413,19 +440,19 @@
       else
         {
           NS_LOG_LOGIC ("NDISC Lookup");
-          found = icmpv6->Lookup (p, dest, GetDevice (), m_ndCache, &hardwareDestination);
+          found = icmpv6->Lookup (p, hdr, dest, GetDevice (), m_ndCache, &hardwareDestination);
         }
 
       if (found)
         {
           NS_LOG_LOGIC ("Address Resolved.  Send.");
-          m_device->Send (p, hardwareDestination, Ipv6L3Protocol::PROT_NUMBER);
+          m_tc->Send (m_device, Create<Ipv6QueueDiscItem> (p, hardwareDestination, Ipv6L3Protocol::PROT_NUMBER, hdr));
         }
     }
   else
     {
       NS_LOG_LOGIC ("Doesn't need ARP");
-      m_device->Send (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER);
+      m_tc->Send (m_device, Create<Ipv6QueueDiscItem> (p, m_device->GetBroadcast (), Ipv6L3Protocol::PROT_NUMBER, hdr));
     }
 }
 
@@ -483,9 +510,9 @@
 
   for (Ipv6InterfaceAddressListI it = m_addresses.begin (); it != m_addresses.end (); ++it)
     {
-      if ((*it).GetAddress () == address)
+      if (it->first.GetAddress () == address)
         {
-          (*it).SetState (state);
+          it->first.SetState (state);
           return;
         }
     }
@@ -498,9 +525,9 @@
 
   for (Ipv6InterfaceAddressListI it = m_addresses.begin (); it != m_addresses.end (); ++it)
     {
-      if ((*it).GetAddress () == address)
+      if (it->first.GetAddress () == address)
         {
-          (*it).SetNsDadUid (uid);
+          it->first.SetNsDadUid (uid);
           return;
         }
     }
diff -Naur ns-3.24.1/src/internet/model/ipv6-interface.h ns-3.25/src/internet/model/ipv6-interface.h
--- ns-3.24.1/src/internet/model/ipv6-interface.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,7 +23,7 @@
 
 #include <list>
 
-#include "ns3/ipv6-address.h"
+#include "ns3/ipv6-header.h"
 #include "ns3/ipv6-interface-address.h"
 #include "ns3/ptr.h"
 #include "ns3/object.h"
@@ -35,6 +35,7 @@
 class NetDevice;
 class Packet;
 class Node;
+class TrafficControlLayer;
 class NdiscCache;
 
 /**
@@ -78,6 +79,12 @@
   void SetDevice (Ptr<NetDevice> device);
 
   /**
+   * \brief Set the TrafficControlLayer.
+   * \param tc TrafficControlLayer object
+   */
+  void SetTrafficControl (Ptr<TrafficControlLayer> tc);
+
+  /**
    * \brief Get the NetDevice.
    * \return the NetDevice associated with this interface
    */
@@ -180,12 +187,13 @@
   /**
    * \brief Send a packet through this interface.
    * \param p packet to send
+   * \param hdr IPv6 header
    * \param dest next hop address of packet.
    *
    * \note This method will eventually call the private SendTo
    * method which must be implemented by subclasses.
    */
-  void Send (Ptr<Packet> p, Ipv6Address dest);
+  void Send (Ptr<Packet> p, const Ipv6Header & hdr, Ipv6Address dest);
 
   /**
    * \brief Add an IPv6 address.
@@ -201,6 +209,13 @@
   Ipv6InterfaceAddress GetLinkLocalAddress () const;
 
   /**
+   * \brief Checks if the address is a Solicited Multicast address for this interface.
+   * \param address the address to check.
+   * \return true if it is a solicited multicast address.
+   */
+  bool IsSolicitedMulticastAddress (Ipv6Address address) const;
+
+  /**
    * \brief Get an address from IPv6 interface.
    * \param index index
    * \return Ipv6InterfaceAddress address whose index is i
@@ -266,17 +281,17 @@
   /**
    * \brief Container for the Ipv6InterfaceAddresses.
    */
-  typedef std::list<Ipv6InterfaceAddress> Ipv6InterfaceAddressList;
+  typedef std::list<std::pair<Ipv6InterfaceAddress, Ipv6Address> > Ipv6InterfaceAddressList;
 
   /**
    * \brief Container Iterator for the Ipv6InterfaceAddresses.
    */
-  typedef std::list<Ipv6InterfaceAddress>::iterator Ipv6InterfaceAddressListI;
+  typedef std::list<std::pair<Ipv6InterfaceAddress, Ipv6Address> >::iterator Ipv6InterfaceAddressListI;
 
   /**
    * \brief Const Container Iterator for the Ipv6InterfaceAddresses.
    */
-  typedef std::list<Ipv6InterfaceAddress>::const_iterator Ipv6InterfaceAddressListCI;
+  typedef std::list<std::pair<Ipv6InterfaceAddress, Ipv6Address> >::const_iterator Ipv6InterfaceAddressListCI;
 
   /**
    * \brief Initialize interface.
@@ -289,6 +304,11 @@
   Ipv6InterfaceAddressList m_addresses;
 
   /**
+   * \brief The link-local addresses assigned to this interface.
+   */
+  Ipv6InterfaceAddress m_linkLocalAddress;
+
+  /**
    * \brief The state of this interface.
    */
   bool m_ifup;
@@ -314,6 +334,11 @@
   Ptr<NetDevice> m_device;
 
   /**
+   * \brief TrafficControlLayer associated with this interface.
+   */
+  Ptr<TrafficControlLayer> m_tc;
+
+  /**
    * \brief Neighbor cache.
    */
   Ptr<NdiscCache> m_ndCache;
diff -Naur ns-3.24.1/src/internet/model/ipv6-l3-protocol.cc ns-3.25/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.24.1/src/internet/model/ipv6-l3-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-l3-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,6 +30,7 @@
 #include "ns3/ipv6-route.h"
 #include "ns3/mac16-address.h"
 #include "ns3/mac64-address.h"
+#include "ns3/traffic-control-layer.h"
 
 #include "loopback-net-device.h"
 #include "ipv6-l3-protocol.h"
@@ -84,6 +85,11 @@
                    MakeBooleanAccessor (&Ipv6L3Protocol::SetSendIcmpv6Redirect,
                                         &Ipv6L3Protocol::GetSendIcmpv6Redirect),
                    MakeBooleanChecker ())
+    .AddAttribute ("StrongEndSystemModel",
+                   "Reject packets for an address not configured on the interface they're coming from (RFC1222).",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&Ipv6L3Protocol::m_strongEndSystemModel),
+                   MakeBooleanChecker ())
     .AddTraceSource ("Tx",
                      "Send IPv6 packet to outgoing interface.",
                      MakeTraceSourceAccessor (&Ipv6L3Protocol::m_txTrace),
@@ -135,7 +141,7 @@
   /* clear protocol and interface list */
   for (L4List_t::iterator it = m_protocols.begin (); it != m_protocols.end (); ++it)
     {
-      *it = 0;
+      it->second = 0;
     }
   m_protocols.clear ();
 
@@ -145,6 +151,7 @@
       *it = 0;
     }
   m_interfaces.clear ();
+  m_reverseInterfacesContainer.clear ();
 
   /* remove raw sockets */
   for (SocketList::iterator it = m_sockets.begin (); it != m_sockets.end (); ++it)
@@ -184,13 +191,23 @@
 uint32_t Ipv6L3Protocol::AddInterface (Ptr<NetDevice> device)
 {
   NS_LOG_FUNCTION (this << device);
-  Ptr<Node> node = GetObject<Node> ();
   Ptr<Ipv6Interface> interface = CreateObject<Ipv6Interface> ();
 
-  node->RegisterProtocolHandler (MakeCallback (&Ipv6L3Protocol::Receive, this), Ipv6L3Protocol::PROT_NUMBER, device);
+  Ptr<TrafficControlLayer> tc = m_node->GetObject<TrafficControlLayer> ();
+
+  NS_ASSERT (tc != 0);
+
+  m_node->RegisterProtocolHandler (MakeCallback (&TrafficControlLayer::Receive, tc),
+                                   Ipv6L3Protocol::PROT_NUMBER, device);
+
+  tc->RegisterProtocolHandler (MakeCallback (&Ipv6L3Protocol::Receive, this),
+                               Ipv6L3Protocol::PROT_NUMBER, device);
+
   interface->SetNode (m_node);
   interface->SetDevice (device);
+  interface->SetTrafficControl (tc);
   interface->SetForwarding (m_ipForward);
+  tc->SetupDevice (device);
   return AddIpv6Interface (interface);
 }
 
@@ -200,6 +217,7 @@
   uint32_t index = m_nInterfaces;
 
   m_interfaces.push_back (interface);
+  m_reverseInterfacesContainer[interface->GetDevice ()] = index;
   m_nInterfaces++;
   return index;
 }
@@ -277,16 +295,13 @@
 int32_t Ipv6L3Protocol::GetInterfaceForDevice (Ptr<const NetDevice> device) const
 {
   NS_LOG_FUNCTION (this << device);
-  int32_t index = 0;
 
-  for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin (); it != m_interfaces.end (); it++)
+  Ipv6InterfaceReverseContainer::const_iterator iter = m_reverseInterfacesContainer.find (device);
+  if (iter != m_reverseInterfacesContainer.end ())
     {
-      if ((*it)->GetDevice () == device)
-        {
-          return index;
-        }
-      index++;
+      return (*iter).second;
     }
+
   return -1;
 }
 
@@ -529,7 +544,7 @@
     }
   else
     {
-      NS_LOG_LOGIC ("Interface " << int(i) << " is set to be down for IPv6. Reason: not respecting minimum IPv6 MTU (1280 octects)");
+      NS_LOG_LOGIC ("Interface " << int(i) << " is set to be down for IPv6. Reason: not respecting minimum IPv6 MTU (1280 octets)");
     }
 }
 
@@ -707,26 +722,89 @@
 void Ipv6L3Protocol::Insert (Ptr<IpL4Protocol> protocol)
 {
   NS_LOG_FUNCTION (this << protocol);
-  m_protocols.push_back (protocol);
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  m_protocols[key] = protocol;
+}
+
+void Ipv6L3Protocol::Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  if (m_protocols.find (key) != m_protocols.end ())
+    {
+      NS_LOG_WARN ("Overwriting protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  m_protocols[key] = protocol;
 }
 
 void Ipv6L3Protocol::Remove (Ptr<IpL4Protocol> protocol)
 {
   NS_LOG_FUNCTION (this << protocol);
-  m_protocols.remove (protocol);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), -1);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent default protocol " << int(protocol->GetProtocolNumber ()));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
+}
+
+void Ipv6L3Protocol::Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex)
+{
+  NS_LOG_FUNCTION (this << protocol << interfaceIndex);
+
+  L4ListKey_t key = std::make_pair (protocol->GetProtocolNumber (), interfaceIndex);
+  L4List_t::iterator iter = m_protocols.find (key);
+  if (iter == m_protocols.end ())
+    {
+      NS_LOG_WARN ("Trying to remove an non-existent protocol " << int(protocol->GetProtocolNumber ()) << " on interface " << int(interfaceIndex));
+    }
+  else
+    {
+      m_protocols.erase (key);
+    }
 }
 
 Ptr<IpL4Protocol> Ipv6L3Protocol::GetProtocol (int protocolNumber) const
 {
   NS_LOG_FUNCTION (this << protocolNumber);
 
-  for (L4List_t::const_iterator i = m_protocols.begin (); i != m_protocols.end (); ++i)
+  return GetProtocol (protocolNumber, -1);
+}
+
+Ptr<IpL4Protocol> Ipv6L3Protocol::GetProtocol (int protocolNumber, int32_t interfaceIndex) const
+{
+  NS_LOG_FUNCTION (this << protocolNumber << interfaceIndex);
+
+  L4ListKey_t key;
+  L4List_t::const_iterator i;
+  if (interfaceIndex >= 0)
     {
-      if ((*i)->GetProtocolNumber () == protocolNumber)
+      // try the interface-specific protocol.
+      key = std::make_pair (protocolNumber, interfaceIndex);
+      i = m_protocols.find (key);
+      if (i != m_protocols.end ())
         {
-          return *i;
+          return i->second;
         }
     }
+  // try the generic protocol.
+  key = std::make_pair (protocolNumber, -1);
+  i = m_protocols.find (key);
+  if (i != m_protocols.end ())
+    {
+      return i->second;
+    }
+
   return 0;
 }
 
@@ -868,31 +946,24 @@
 {
   NS_LOG_FUNCTION (this << device << p << protocol << from << to << packetType);
   NS_LOG_LOGIC ("Packet from " << from << " received on node " << m_node->GetId ());
-  uint32_t interface = 0;
+
+  NS_ASSERT_MSG (GetInterfaceForDevice(device) != -1, "Received a packet from an interface that is not known to IPv6");
+  uint32_t interface = GetInterfaceForDevice(device);
+
+  Ptr<Ipv6Interface> ipv6Interface = m_interfaces[interface];
   Ptr<Packet> packet = p->Copy ();
-  Ptr<Ipv6Interface> ipv6Interface = 0;
 
-  for (Ipv6InterfaceList::const_iterator it = m_interfaces.begin (); it != m_interfaces.end (); it++)
+  if (ipv6Interface->IsUp ())
     {
-      ipv6Interface = *it;
-
-      if (ipv6Interface->GetDevice () == device)
-        {
-          if (ipv6Interface->IsUp ())
-            {
-              m_rxTrace (packet, m_node->GetObject<Ipv6> (), interface);
-              break;
-            }
-          else
-            {
-              NS_LOG_LOGIC ("Dropping received packet-- interface is down");
-              Ipv6Header hdr;
-              packet->RemoveHeader (hdr);
-              m_dropTrace (hdr, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv6> (), interface);
-              return;
-            }
-        }
-      interface++;
+      m_rxTrace (packet, m_node->GetObject<Ipv6> (), interface);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Dropping received packet-- interface is down");
+      Ipv6Header hdr;
+      packet->RemoveHeader (hdr);
+      m_dropTrace (hdr, packet, DROP_INTERFACE_DOWN, m_node->GetObject<Ipv6> (), interface);
+      return;
     }
 
   Ipv6Header hdr;
@@ -938,6 +1009,55 @@
         }
     }
 
+  if (hdr.GetDestinationAddress ().IsAllNodesMulticast ())
+    {
+      LocalDeliver (packet, hdr, interface);
+      return;
+    }
+  else if (hdr.GetDestinationAddress ().IsAllRoutersMulticast() && ipv6Interface->IsForwarding ())
+    {
+      LocalDeliver (packet, hdr, interface);
+      return;
+    }
+  else if (hdr.GetDestinationAddress ().IsMulticast ())
+    {
+      bool isSolicited = ipv6Interface->IsSolicitedMulticastAddress (hdr.GetDestinationAddress ());
+      bool isRegisteredOnInterface = IsRegisteredMulticastAddress (hdr.GetDestinationAddress (), interface);
+      bool isRegisteredGlobally = IsRegisteredMulticastAddress (hdr.GetDestinationAddress ());
+      if (isSolicited || isRegisteredGlobally || isRegisteredOnInterface)
+        {
+          LocalDeliver (packet, hdr, interface);
+          // do not return, the packet could be handled by a routing protocol
+        }
+    }
+
+
+  for (uint32_t j = 0; j < GetNInterfaces (); j++)
+    {
+      if (j == interface || !m_strongEndSystemModel)
+        {
+          for (uint32_t i = 0; i < GetNAddresses (j); i++)
+            {
+              Ipv6InterfaceAddress iaddr = GetAddress (j, i);
+              Ipv6Address addr = iaddr.GetAddress ();
+              if (addr.IsEqual (hdr.GetDestinationAddress ()))
+                {
+                  if (j == interface)
+                    {
+                      NS_LOG_LOGIC ("For me (destination " << addr << " match)");
+                    }
+                  else
+                    {
+                      NS_LOG_LOGIC ("For me (destination " << addr << " match) on another interface " << hdr.GetDestinationAddress ());
+                    }
+                  LocalDeliver (packet, hdr, interface);
+                  return;
+                }
+              NS_LOG_LOGIC ("Address " << addr << " not a match");
+            }
+        }
+    }
+
   if (!m_routingProtocol->RouteInput (packet, hdr, device,
                                       MakeCallback (&Ipv6L3Protocol::IpForward, this),
                                       MakeCallback (&Ipv6L3Protocol::IpMulticastForward, this),
@@ -945,11 +1065,19 @@
                                       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);
+      // Drop trace and ICMPs are courtesy of RouteInputError
     }
 }
 
+void
+Ipv6L3Protocol::CallTxTrace (const Ipv6Header & ipHeader, Ptr<Packet> packet,
+                                    Ptr<Ipv6> ipv6, uint32_t interface)
+{
+  Ptr<Packet> packetCopy = packet->Copy ();
+  packetCopy->AddHeader (ipHeader);
+  m_txTrace (packetCopy, ipv6, interface);
+}
+
 void Ipv6L3Protocol::SendRealOut (Ptr<Ipv6Route> route, Ptr<Packet> packet, Ipv6Header const& ipHeader)
 {
   NS_LOG_FUNCTION (this << route << packet << ipHeader);
@@ -968,7 +1096,7 @@
   NS_LOG_LOGIC ("Send via NetDevice ifIndex " << dev->GetIfIndex () << " Ipv6InterfaceIndex " << interface);
 
   // Check packet size
-  std::list<Ptr<Packet> > fragments;
+  std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair> fragments;
 
   // Check if we have a Path MTU stored. If so, use it. Else, use the link MTU.
   size_t targetMtu = (size_t)(m_pmtuCache->GetPmtu (ipHeader.GetDestinationAddress()));
@@ -1006,12 +1134,10 @@
 
       Ptr<Ipv6ExtensionDemux> ipv6ExtensionDemux = m_node->GetObject<Ipv6ExtensionDemux> ();
 
-      packet->AddHeader (ipHeader);
-
       // To get specific method GetFragments from Ipv6ExtensionFragmentation
       Ipv6ExtensionFragment *ipv6Fragment = dynamic_cast<Ipv6ExtensionFragment *> (PeekPointer (ipv6ExtensionDemux->GetExtension (Ipv6Header::IPV6_EXT_FRAGMENTATION)));
       NS_ASSERT (ipv6Fragment != 0);
-      ipv6Fragment->GetFragments (packet, targetMtu, fragments);
+      ipv6Fragment->GetFragments (packet, ipHeader, targetMtu, fragments);
     }
 
   if (!route->GetGateway ().IsEqual (Ipv6Address::GetAny ()))
@@ -1024,18 +1150,16 @@
             {
               std::ostringstream oss;
 
-              /* IPv6 header is already added in fragments */
-              for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
+              for (std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair>::const_iterator it = fragments.begin (); it != fragments.end (); it++)
                 {
-                  m_txTrace (*it, m_node->GetObject<Ipv6> (), interface);
-                  outInterface->Send (*it, route->GetGateway ());
+                  CallTxTrace (it->second, it->first, m_node->GetObject<Ipv6> (), interface);
+                  outInterface->Send (it->first, it->second, route->GetGateway ());
                 }
             }
           else
             {
-              packet->AddHeader (ipHeader);
-              m_txTrace (packet, m_node->GetObject<Ipv6> (), interface);
-              outInterface->Send (packet, route->GetGateway ());
+              CallTxTrace (ipHeader, packet, m_node->GetObject<Ipv6> (), interface);
+              outInterface->Send (packet, ipHeader, route->GetGateway ());
             }
         }
       else
@@ -1054,18 +1178,16 @@
             {
               std::ostringstream oss;
 
-              /* IPv6 header is already added in fragments */
-              for (std::list<Ptr<Packet> >::const_iterator it = fragments.begin (); it != fragments.end (); it++)
+              for (std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair>::const_iterator it = fragments.begin (); it != fragments.end (); it++)
                 {
-                  m_txTrace (*it, m_node->GetObject<Ipv6> (), interface);
-                  outInterface->Send (*it, ipHeader.GetDestinationAddress ());
+                  CallTxTrace (it->second, it->first, m_node->GetObject<Ipv6> (), interface);
+                  outInterface->Send (it->first, it->second, ipHeader.GetDestinationAddress ());
                 }
             }
           else
             {
-              packet->AddHeader (ipHeader);
-              m_txTrace (packet, m_node->GetObject<Ipv6> (), interface);
-              outInterface->Send (packet, ipHeader.GetDestinationAddress ());
+              CallTxTrace (ipHeader, packet, m_node->GetObject<Ipv6> (), interface);
+              outInterface->Send (packet, ipHeader, ipHeader.GetDestinationAddress ());
             }
         }
       else
@@ -1244,15 +1366,16 @@
         }
       else
         {
-          protocol = GetProtocol (nextHeader);
-          // For ICMPv6 Error packets
-          Ptr<Packet> malformedPacket  = packet->Copy ();
-          malformedPacket->AddHeader (ip);
+          protocol = GetProtocol (nextHeader, iif);
 
           if (!protocol)
             {
               NS_LOG_LOGIC ("Unknown Next Header. Drop!");
 
+              // For ICMPv6 Error packets
+              Ptr<Packet> malformedPacket  = packet->Copy ();
+              malformedPacket->AddHeader (ip);
+
               if (nextHeaderPosition == 0)
                 {
                   GetIcmpv6 ()->SendErrorParameterError (malformedPacket, dst, Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, 40);
@@ -1304,7 +1427,15 @@
 {
   NS_LOG_FUNCTION (this << p << ipHeader << sockErrno);
   NS_LOG_LOGIC ("Route input failure-- dropping packet to " << ipHeader << " with errno " << sockErrno);
+
   m_dropTrace (ipHeader, p, DROP_ROUTE_ERROR, m_node->GetObject<Ipv6> (), 0);
+
+  if (!ipHeader.GetDestinationAddress ().IsMulticast ())
+    {
+      Ptr<Packet> packet = p->Copy ();
+      packet->AddHeader (ipHeader);
+      GetIcmpv6 ()->SendErrorDestinationUnreachable (packet, ipHeader.GetSourceAddress (), Icmpv6Header::ICMPV6_NO_ROUTE);
+    }
 }
 
 Ipv6Header Ipv6L3Protocol::BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol, uint16_t payloadSize, uint8_t ttl, uint8_t tclass)
@@ -1381,5 +1512,83 @@
   m_dropTrace (ipHeader, p, dropReason, m_node->GetObject<Ipv6> (), 0);
 }
 
+void Ipv6L3Protocol::AddMulticastAddress (Ipv6Address address, uint32_t interface)
+{
+  NS_LOG_FUNCTION (address << interface);
+
+  if (!address.IsMulticast ())
+    {
+      NS_LOG_WARN ("Not adding a non-multicast address " << address);
+      return;
+    }
+
+  Ipv6RegisteredMulticastAddressKey_t key = std::make_pair (address, interface);
+  m_multicastAddresses[key]++;
+}
+
+void Ipv6L3Protocol::AddMulticastAddress (Ipv6Address address)
+{
+  NS_LOG_FUNCTION (address);
+
+  if (!address.IsMulticast ())
+    {
+      NS_LOG_WARN ("Not adding a non-multicast address " << address);
+      return;
+    }
+
+  m_multicastAddressesNoInterface[address]++;
+}
+
+void Ipv6L3Protocol::RemoveMulticastAddress (Ipv6Address address, uint32_t interface)
+{
+  NS_LOG_FUNCTION (address << interface);
+
+  Ipv6RegisteredMulticastAddressKey_t key = std::make_pair (address, interface);
+
+  m_multicastAddresses[key]--;
+  if (m_multicastAddresses[key] == 0)
+    {
+      m_multicastAddresses.erase (key);
+    }
+}
+
+void Ipv6L3Protocol::RemoveMulticastAddress (Ipv6Address address)
+{
+  NS_LOG_FUNCTION (address);
+
+  m_multicastAddressesNoInterface[address]--;
+  if (m_multicastAddressesNoInterface[address] == 0)
+    {
+      m_multicastAddressesNoInterface.erase (address);
+    }
+}
+
+bool Ipv6L3Protocol::IsRegisteredMulticastAddress (Ipv6Address address, uint32_t interface) const
+{
+  NS_LOG_FUNCTION (address << interface);
+
+  Ipv6RegisteredMulticastAddressKey_t key = std::make_pair (address, interface);
+  Ipv6RegisteredMulticastAddressCIter_t iter = m_multicastAddresses.find (key);
+
+  if (iter == m_multicastAddresses.end ())
+    {
+      return false;
+    }
+  return true;
+}
+
+bool Ipv6L3Protocol::IsRegisteredMulticastAddress (Ipv6Address address) const
+{
+  NS_LOG_FUNCTION (address);
+
+  Ipv6RegisteredMulticastAddressNoInterfaceCIter_t iter = m_multicastAddressesNoInterface.find (address);
+
+  if (iter == m_multicastAddressesNoInterface.end ())
+    {
+      return false;
+    }
+  return true;
+}
+
 } /* namespace ns3 */
 
diff -Naur ns-3.24.1/src/internet/model/ipv6-l3-protocol.h ns-3.25/src/internet/model/ipv6-l3-protocol.h
--- ns-3.24.1/src/internet/model/ipv6-l3-protocol.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-l3-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -104,24 +104,14 @@
    */
   void SetNode (Ptr<Node> node);
 
-  /**
-   * \brief Add an L4 protocol.
-   * \param protocol L4 protocol
-   */
-  void Insert (Ptr<IpL4Protocol> protocol);
+  virtual void Insert (Ptr<IpL4Protocol> protocol);
+  virtual void Insert (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
 
-  /**
-   * \brief Remove an L4 protocol.
-   * \param protocol L4 protocol to remove
-   */
-  void Remove (Ptr<IpL4Protocol> protocol);
+  virtual void Remove (Ptr<IpL4Protocol> protocol);
+  virtual void Remove (Ptr<IpL4Protocol> protocol, uint32_t interfaceIndex);
 
-  /**
-   * \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;
+  virtual Ptr<IpL4Protocol> GetProtocol (int protocolNumber, int32_t interfaceIndex) const;
 
   /**
    * \brief Create raw IPv6 socket.
@@ -154,23 +144,13 @@
    * \param device network device
    * \param p the packet
    * \param protocol next header value
-   * \param from address of the correspondant
+   * \param from address of the correspondent
    * \param to address of the destination
    * \param packetType type of the packet
    */
   void Receive (Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType);
 
-  /**
-   * \brief Higher-level layers call this method to send a packet
-   * down the stack to the MAC and PHY layers.
-   *
-   * \param packet packet to send
-   * \param source source address of packet
-   * \param destination address of packet
-   * \param protocol number of packet
-   * \param route route to take
-   */
-  void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route);
+  virtual void Send (Ptr<Packet> packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr<Ipv6Route> route);
 
   /**
    * \brief Set routing protocol for this stack.
@@ -400,6 +380,7 @@
   /**
    * TracedCallback signature for packet transmission or reception events.
    *
+   * \param [in] header The Ipv6Header.
    * \param [in] packet The packet.
    * \param [in] ipv6
    * \param [in] interface
@@ -424,7 +405,48 @@
     (const Ipv6Header & header, Ptr<const Packet> packet,
      DropReason reason, Ptr<Ipv6> ipv6,
      uint32_t interface);
-   
+
+  /**
+   * Adds a multicast address to the list of addresses to pass to local deliver.
+   * \param address the address.
+   */
+  void AddMulticastAddress (Ipv6Address address);
+
+  /**
+   * Adds a multicast address to the list of addresses to pass to local deliver.
+   * \param address the address.
+   * \param interface the incoming interface.
+   */
+  void AddMulticastAddress (Ipv6Address address, uint32_t interface);
+
+  /**
+   * Removes a multicast address from the list of addresses to pass to local deliver.
+   * \param address the address.
+   */
+  void RemoveMulticastAddress (Ipv6Address address);
+
+  /**
+   * Removes a multicast address from the list of addresses to pass to local deliver.
+   * \param address the address.
+   * \param interface the incoming interface.
+   */
+  void RemoveMulticastAddress (Ipv6Address address, uint32_t interface);
+
+  /**
+   * Checks if the address has been registered.
+   * \param address the address.
+   * \return true if the address is registered.
+   */
+  bool IsRegisteredMulticastAddress (Ipv6Address address) const;
+
+  /**
+   * Checks if the address has been registered for a specific interface.
+   * \param address the address.
+   * \param interface the incoming interface.
+   * \return true if the address is registered.
+   */
+  bool IsRegisteredMulticastAddress (Ipv6Address address, uint32_t interface) const;
+
 protected:
   /**
    * \brief Dispose object.
@@ -446,7 +468,12 @@
   /**
    * \brief Container of the IPv6 Interfaces.
    */
-  typedef std::list<Ptr<Ipv6Interface> > Ipv6InterfaceList;
+  typedef std::vector<Ptr<Ipv6Interface> > Ipv6InterfaceList;
+
+  /**
+   * \brief Container of NetDevices registered to IPv6 and their interface indexes.
+   */
+  typedef std::map<Ptr<const NetDevice>, uint32_t > Ipv6InterfaceReverseContainer;
 
   /**
    * \brief Container of the IPv6 Raw Sockets.
@@ -454,9 +481,14 @@
   typedef std::list<Ptr<Ipv6RawSocketImpl> > SocketList;
 
   /**
+   * \brief Container of the IPv6 L4 keys: protocol number, interface index
+   */
+  typedef std::pair<int, int32_t> L4ListKey_t;
+
+  /**
    * \brief Container of the IPv6 L4 instances.
    */
-  typedef std::list<Ptr<IpL4Protocol> > L4List_t;
+  typedef std::map<L4ListKey_t, Ptr<IpL4Protocol> > L4List_t;
 
   /**
    * \brief Container of the IPv6 Autoconfigured addresses.
@@ -469,6 +501,18 @@
   typedef std::list< Ptr<Ipv6AutoconfiguredPrefix> >::iterator Ipv6AutoconfiguredPrefixListI;
 
   /**
+   * \brief Make a copy of the packet, add the header and invoke the TX trace callback
+   * \param ipHeader the IP header that will be added to the packet
+   * \param packet the packet
+   * \param ipv6 the Ipv6 protocol
+   * \param interface the interface index
+   *
+   * Note: If the TracedCallback API ever is extended, we could consider
+   * to check for connected functions before adding the header
+   */
+  void CallTxTrace (const Ipv6Header & ipHeader, Ptr<Packet> packet, Ptr<Ipv6> ipv6, uint32_t interface);
+
+  /**
    * \brief Callback to trace TX (transmission) packets.
    * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
    * and will be changed to \c Ptr<const Ipv6> in a future release.
@@ -645,6 +689,11 @@
   Ipv6InterfaceList m_interfaces;
 
   /**
+   * Container of NetDevice / Interface index associations.
+   */
+  Ipv6InterfaceReverseContainer m_reverseInterfacesContainer;
+
+  /**
    * \brief Number of IPv6 interfaces managed by the stack.
    */
   uint32_t m_nInterfaces;
@@ -660,6 +709,11 @@
   uint8_t m_defaultTclass;
 
   /**
+   * \brief Rejects packets directed to an interface with wrong address (\RFC{1222}).
+   */
+  bool m_strongEndSystemModel;
+
+  /**
    * \brief Routing protocol.
    */
   Ptr<Ipv6RoutingProtocol> m_routingProtocol;
@@ -678,6 +732,51 @@
    * \brief Allow ICMPv6 Redirect sending state
    */
   bool m_sendIcmpv6Redirect;
+
+  /**
+   * \brief IPv6 multicast addresses / interface key.
+   */
+  typedef std::pair<Ipv6Address, uint64_t> Ipv6RegisteredMulticastAddressKey_t;
+
+  /**
+   * \brief Container of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6RegisteredMulticastAddressKey_t, uint32_t> Ipv6RegisteredMulticastAddress_t;
+
+  /**
+   * \brief Container Iterator of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6RegisteredMulticastAddressKey_t, uint32_t>::iterator Ipv6RegisteredMulticastAddressIter_t;
+
+  /**
+   * \brief Container Const Iterator of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6RegisteredMulticastAddressKey_t, uint32_t>::const_iterator Ipv6RegisteredMulticastAddressCIter_t;
+
+  /**
+   * \brief Container of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6Address, uint32_t> Ipv6RegisteredMulticastAddressNoInterface_t;
+
+  /**
+   * \brief Container Iterator of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6Address, uint32_t>::iterator Ipv6RegisteredMulticastAddressNoInterfaceIter_t;
+
+  /**
+   * \brief Container Const Iterator of the IPv6 multicast addresses.
+   */
+  typedef std::map<Ipv6Address, uint32_t>::const_iterator Ipv6RegisteredMulticastAddressNoInterfaceCIter_t;
+
+  /**
+   * \brief List of multicast IP addresses of interest, divided per interface.
+   */
+  Ipv6RegisteredMulticastAddress_t m_multicastAddresses;
+
+  /**
+   * \brief List of multicast IP addresses of interest for all the interfaces.
+   */
+  Ipv6RegisteredMulticastAddressNoInterface_t m_multicastAddressesNoInterface;
 };
 
 } /* namespace ns3 */
diff -Naur ns-3.24.1/src/internet/model/ipv6-list-routing.cc ns-3.25/src/internet/model/ipv6-list-routing.cc
--- ns-3.24.1/src/internet/model/ipv6-list-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-list-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -101,101 +101,39 @@
                              UnicastForwardCallback ucb, MulticastForwardCallback mcb,
                              LocalDeliverCallback lcb, ErrorCallback ecb)
 {
-  bool retVal = false;
   NS_LOG_FUNCTION (p << header << idev);
   NS_LOG_LOGIC ("RouteInput logic for node: " << m_ipv6->GetObject<Node> ()->GetId ());
 
   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 ();
 
-  // Multicast recognition; handle local delivery here
-  //
-  if (dst.IsMulticast ())
-    {
-#ifdef NOTYET
-      if (m_ipv6->MulticastCheckGroup (iif, dst))
-#endif
-      if (true)
-        {
-          NS_LOG_LOGIC ("Multicast packet for me-- local deliver");
-          Ptr<Packet> packetCopy = p->Copy ();
-          // Here may want to disable lcb callback in recursive RouteInput
-          // call below
-          lcb (packetCopy, header, iif);
-          // Fall through-- we may also need to forward this
-          retVal = true;
-        }
-
-      /* do not forward link-local multicast address */
-      if (dst.IsLinkLocalMulticast ())
-        {
-          return retVal;
-        }
-
-      for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
-             m_routingProtocols.begin (); rprotoIter != m_routingProtocols.end ();
-           rprotoIter++)
-        {
-          NS_LOG_LOGIC ("Multicast packet for me-- trying to forward");
-          if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
-            {
-              retVal = true;
-            }
-        }
-      return retVal;
-    }
-
-  /// \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
+  uint32_t iif = m_ipv6->GetInterfaceForDevice (idev);
   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
-  for (Ipv6RoutingProtocolList::const_iterator rprotoIter =
-         m_routingProtocols.begin ();
+
+  // We disable error callback for the called protocols.
+  ErrorCallback nullEcb = MakeNullCallback<void, Ptr<const Packet>, const Ipv6Header &, Socket::SocketErrno > ();
+
+  for (Ipv6RoutingProtocolList::const_iterator rprotoIter = m_routingProtocols.begin ();
        rprotoIter != m_routingProtocols.end ();
        rprotoIter++)
     {
-      if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
+      if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, nullEcb))
         {
           return true;
         }
     }
+
   // No routing protocol has found a route.
-  return retVal;
+  ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+  return false;
 }
 
 void
@@ -277,15 +215,15 @@
   NS_LOG_FUNCTION (this);
 
   *stream->GetStream () << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
-                        << " Time: " << Simulator::Now ().GetSeconds () << "s "
-                        << "Ipv6ListRouting table" << std::endl;
+                        << ", Time: " << Now().As (Time::S)
+                        << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+                        << ", Ipv6ListRouting table" << std::endl;
   for (Ipv6RoutingProtocolList::const_iterator i = m_routingProtocols.begin ();
        i != m_routingProtocols.end (); i++)
     {
       *stream->GetStream () << "  Priority: " << (*i).first << " Protocol: " << (*i).second->GetInstanceTypeId () << std::endl;
       (*i).second->PrintRoutingTable (stream);
     }
-  *stream->GetStream () << std::endl;
 }
 
 void
diff -Naur ns-3.24.1/src/internet/model/ipv6-packet-filter.cc ns-3.25/src/internet/model/ipv6-packet-filter.cc
--- ns-3.24.1/src/internet/model/ipv6-packet-filter.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv6-packet-filter.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,143 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *               2016 University of Washington
+ *
+ * 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:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#include "ns3/log.h"
+#include "ns3/enum.h"
+#include "ipv6-queue-disc-item.h"
+#include "ipv6-packet-filter.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Ipv6PacketFilter");
+
+NS_OBJECT_ENSURE_REGISTERED (Ipv6PacketFilter);
+
+TypeId 
+Ipv6PacketFilter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Ipv6PacketFilter")
+    .SetParent<PacketFilter> ()
+    .SetGroupName ("Internet")
+  ;
+  return tid;
+}
+
+Ipv6PacketFilter::Ipv6PacketFilter ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ipv6PacketFilter::~Ipv6PacketFilter()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+Ipv6PacketFilter::CheckProtocol (Ptr<QueueDiscItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+  return (DynamicCast<Ipv6QueueDiscItem> (item) != 0);
+}
+
+// ------------------------------------------------------------------------- //
+
+NS_OBJECT_ENSURE_REGISTERED (PfifoFastIpv6PacketFilter);
+
+TypeId 
+PfifoFastIpv6PacketFilter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PfifoFastIpv6PacketFilter")
+    .SetParent<Ipv6PacketFilter> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<PfifoFastIpv6PacketFilter> ()
+  ;
+  return tid;
+}
+
+PfifoFastIpv6PacketFilter::PfifoFastIpv6PacketFilter ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+PfifoFastIpv6PacketFilter::~PfifoFastIpv6PacketFilter()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+int32_t
+PfifoFastIpv6PacketFilter::DoClassify (Ptr<QueueDiscItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+  uint32_t band;
+  Ptr<Ipv6QueueDiscItem> ipv6Item = DynamicCast<Ipv6QueueDiscItem> (item);
+
+  NS_ASSERT (ipv6Item != 0);
+
+  Ipv6Header::DscpType dscp = ipv6Item->GetHeader ().GetDscp ();
+  band = DscpToBand (dscp);
+  NS_LOG_DEBUG ("Found Ipv6 packet; DSCP " << ipv6Item->GetHeader ().DscpTypeToString (dscp) << " band " << band);
+
+  return band;
+}
+
+uint32_t
+PfifoFastIpv6PacketFilter::DscpToBand (Ipv6Header::DscpType dscpType) const
+{
+  NS_LOG_FUNCTION (this);
+
+  uint32_t band = 1;
+  switch (dscpType) {
+    case Ipv6Header::DSCP_EF :
+    case Ipv6Header::DSCP_AF13 :
+    case Ipv6Header::DSCP_AF23 :
+    case Ipv6Header::DSCP_AF33 :
+    case Ipv6Header::DSCP_AF43 :
+    case Ipv6Header::DscpDefault :
+    case Ipv6Header::DSCP_CS2 :
+    case Ipv6Header::DSCP_CS3 :
+      band = 1;
+      break;
+    case Ipv6Header::DSCP_AF11 :
+    case Ipv6Header::DSCP_AF21 :
+    case Ipv6Header::DSCP_AF31 :
+    case Ipv6Header::DSCP_AF41 :
+    case Ipv6Header::DSCP_CS1 :
+      band = 2;
+      break;
+    case Ipv6Header::DSCP_AF12 :
+    case Ipv6Header::DSCP_AF22 :
+    case Ipv6Header::DSCP_AF32 :
+    case Ipv6Header::DSCP_AF42 :
+    case Ipv6Header::DSCP_CS4 :
+    case Ipv6Header::DSCP_CS5 :
+    case Ipv6Header::DSCP_CS6 :
+    case Ipv6Header::DSCP_CS7 :
+      band = 0;
+      break;
+    default :
+      band = 1;
+  }
+  NS_LOG_DEBUG ("Band returned:  " << band);
+  return band;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/ipv6-packet-filter.h ns-3.25/src/internet/model/ipv6-packet-filter.h
--- ns-3.24.1/src/internet/model/ipv6-packet-filter.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv6-packet-filter.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,107 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *               2016 University of Washington
+ *
+ * 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:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#ifndef IPV6_PACKET_FILTER_H
+#define IPV6_PACKET_FILTER_H
+
+#include "ns3/object.h"
+#include "ns3/packet-filter.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup internet
+ *
+ * Ipv6PacketFilter is the abstract base class for filters defined for IPv6 packets.
+ */
+class Ipv6PacketFilter: public PacketFilter {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  Ipv6PacketFilter ();
+  virtual ~Ipv6PacketFilter ();
+
+private:
+  virtual bool CheckProtocol (Ptr<QueueDiscItem> item) const;
+  virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const = 0;
+};
+
+
+/**
+ * \ingroup internet
+ *
+ * PfifoFastIpv6PacketFilter is the filter to be added to the PfifoFast
+ * queue disc to simulate the behavior of the pfifo_fast Linux queue disc.
+ * 
+ * Packets are classified based on the DSCP. The following values are
+ * recommended for Linux in a patch to the netdev mailing list from
+ * Jesper Dangaard Brouer <brouer@redhat.com> on 15 Sept 2014.
+ * CS* values I made up myself.
+ *
+ * DSCP | Hex  | Means                      | Linux Priority | Band
+ * -----|------|----------------------------|----------------|-----
+ * EF   | 0x2E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF11 | 0x0A | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF21 | 0x12 | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF31 | 0x1A | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF41 | 0x22 | TC_PRIO_BULK=2             | 2 Bulk         |  2
+ * AF12 | 0x0C | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF22 | 0x14 | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF32 | 0x1C | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF42 | 0x34 | TC_PRIO_INTERACTIVE=6      | 6 Interactive  |  0
+ * AF13 | 0x0E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF23 | 0x16 | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF33 | 0x1E | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * AF43 | 0x26 | TC_PRIO_INTERACTIVE_BULK=4 | 4 Int. Bulk    |  1
+ * CS0  | 0x00 | TC_PRIO_BESTEFFORT         | 0 Best Effort  |  1
+ * CS1  | 0x20 | TC_PRIO_FILLER             | 1 Filler       |  2
+ * CS2  | 0x40 | TC_PRIO_BULK               | 2 Bulk         |  1
+ * CS3  | 0x60 | TC_PRIO_INTERACTIVE_BULK   | 4 Int. Bulk    |  1
+ * CS4  | 0x80 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS5  | 0xA0 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS6  | 0xC0 | TC_PRIO_INTERACTIVE        | 6 Interactive  |  0
+ * CS7  | 0xE0 | TC_PRIO_CONTROL            | 8 Control      |  0
+ *
+ */
+class PfifoFastIpv6PacketFilter: public Ipv6PacketFilter {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  PfifoFastIpv6PacketFilter ();
+  virtual ~PfifoFastIpv6PacketFilter ();
+
+private:
+  virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const;
+  uint32_t DscpToBand (Ipv6Header::DscpType dscpType) const;
+};
+
+} // namespace ns3
+
+#endif /* IPV6_PACKET_FILTER */
diff -Naur ns-3.24.1/src/internet/model/ipv6-queue-disc-item.cc ns-3.25/src/internet/model/ipv6-queue-disc-item.cc
--- ns-3.24.1/src/internet/model/ipv6-queue-disc-item.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv6-queue-disc-item.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,82 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "ns3/log.h"
+#include "ipv6-queue-disc-item.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Ipv6QueueDiscItem");
+
+Ipv6QueueDiscItem::Ipv6QueueDiscItem (Ptr<Packet> p, const Address& addr,
+                                      uint16_t protocol, const Ipv6Header & header)
+  : QueueDiscItem (p, addr, protocol),
+    m_header (header),
+    m_headerAdded (false)
+{
+}
+
+Ipv6QueueDiscItem::~Ipv6QueueDiscItem()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+uint32_t Ipv6QueueDiscItem::GetPacketSize(void) const
+{
+  Ptr<Packet> p = GetPacket ();
+  NS_ASSERT (p != 0);
+  uint32_t ret = p->GetSize ();
+  if (!m_headerAdded)
+    {
+      ret += m_header.GetSerializedSize ();
+    }
+  return ret;
+}
+
+const Ipv6Header&
+Ipv6QueueDiscItem::GetHeader (void) const
+{
+  return m_header;
+}
+
+void Ipv6QueueDiscItem::AddHeader(void)
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_ASSERT_MSG (!m_headerAdded, "The header has been already added to the packet");
+  Ptr<Packet> p = GetPacket ();
+  NS_ASSERT (p != 0);
+  p->AddHeader (m_header);
+  m_headerAdded = true;
+}
+
+void
+Ipv6QueueDiscItem::Print (std::ostream& os) const
+{
+  if (!m_headerAdded)
+    {
+      os << m_header << " ";
+    }
+  os << GetPacket () << " "
+     << "Dst addr " << GetAddress () << " "
+     << "proto " << (uint16_t) GetProtocol () << " "
+     << "txq " << (uint8_t) GetTxQueueIndex ()
+  ;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/ipv6-queue-disc-item.h ns-3.25/src/internet/model/ipv6-queue-disc-item.h
--- ns-3.24.1/src/internet/model/ipv6-queue-disc-item.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/ipv6-queue-disc-item.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,99 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef IPV6_QUEUE_DISC_ITEM_H
+#define IPV6_QUEUE_DISC_ITEM_H
+
+#include "ns3/packet.h"
+#include "ns3/object.h"
+#include "ns3/net-device.h"
+#include "ns3/traced-value.h"
+#include "ns3/queue-disc.h"
+#include "ipv6-header.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup internet
+ *
+ * Ipv6QueueDiscItem is a subclass of QueueDiscItem which stores IPv6 packets.
+ * Header and payload are kept separate to allow the queue disc to manipulate
+ * the header, which is added to the packet when the packet is dequeued.
+ */
+class Ipv6QueueDiscItem : public QueueDiscItem {
+public:
+  /**
+   * \brief Create an IPv6 queue disc item containing an IPv6 packet.
+   * \param p the packet included in the created item.
+   * \param addr the destination MAC address
+   * \param protocol the protocol number
+   * \param header the IPv6 header
+   */
+  Ipv6QueueDiscItem (Ptr<Packet> p, const Address & addr, uint16_t protocol, const Ipv6Header & header);
+
+  virtual ~Ipv6QueueDiscItem ();
+
+  /**
+   * \return the correct packet size (header plus payload).
+   */
+  virtual uint32_t GetPacketSize (void) const;
+
+  /**
+   * \return the header stored in this item..
+   */
+  const Ipv6Header & GetHeader (void) const;
+
+  /**
+   * \brief Add the header to the packet
+   */
+  virtual void AddHeader (void);
+
+  /**
+   * \brief Print the item contents.
+   * \param os output stream in which the data should be printed.
+   */
+  virtual void Print (std::ostream &os) const;
+
+private:
+  /**
+   * \brief Default constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Ipv6QueueDiscItem ();
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  Ipv6QueueDiscItem (const Ipv6QueueDiscItem &);
+  /**
+   * \brief Assignment operator
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  Ipv6QueueDiscItem &operator = (const Ipv6QueueDiscItem &);
+
+  Ipv6Header m_header;
+  bool m_headerAdded;
+};
+
+} // namespace ns3
+
+#endif /* IPV6_QUEUE_DISC_ITEM_H */
diff -Naur ns-3.24.1/src/internet/model/ipv6-raw-socket-impl.cc ns-3.25/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.24.1/src/internet/model/ipv6-raw-socket-impl.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-raw-socket-impl.cc	2016-03-23 21:36:53.000000000 -0700
@@ -134,11 +134,28 @@
   return 0;
 }
 
+int
+Ipv6RawSocketImpl::GetPeerName (Address& address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (m_dst.IsAny ())
+    {
+      m_err = ERROR_NOTCONN;
+      return -1;
+    }
+
+  address = Inet6SocketAddress (m_dst, 0);
+
+  return 0;
+}
+
 int Ipv6RawSocketImpl::Close ()
 {
   NS_LOG_FUNCTION_NOARGS ();
   Ptr<Ipv6L3Protocol> ipv6 = m_node->GetObject<Ipv6L3Protocol> ();
 
+  Ipv6LeaveGroup ();
   if (ipv6)
     {
       ipv6->DeleteRawSocket (this);
@@ -244,6 +261,7 @@
                 }
             }
 
+          uint32_t pktSize = p->GetSize ();
           if (m_src.IsAny ())
             {
               ipv6->Send (p, route->GetSource (), dst, m_protocol, route);
@@ -253,7 +271,9 @@
               ipv6->Send (p, m_src, dst, m_protocol, route);
             }
           // Return only payload size (as Linux does).
-          return p->GetSize () - hdr.GetSerializedSize ();
+          NotifyDataSent (pktSize);
+          NotifySend (GetTxAvailable ());
+          return pktSize;
         }
       else
         {
@@ -297,6 +317,50 @@
   return data.packet;
 }
 
+void
+Ipv6RawSocketImpl::Ipv6JoinGroup (Ipv6Address address, Socket::Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses)
+{
+  NS_LOG_FUNCTION (this << address << &filterMode << &sourceAddresses);
+
+  // We can join only one multicast group (or change its params)
+  NS_ASSERT_MSG ((m_ipv6MulticastGroupAddress == address || m_ipv6MulticastGroupAddress.IsAny ()), "Can join only one IPv6 multicast group.");
+
+  m_ipv6MulticastGroupAddress = address;
+
+  Ptr<Ipv6L3Protocol> ipv6l3 = m_node->GetObject <Ipv6L3Protocol> ();
+  if (ipv6l3)
+    {
+      if (filterMode == INCLUDE && sourceAddresses.empty ())
+        {
+          // it is a leave
+          if (m_boundnetdevice)
+            {
+              int32_t index = ipv6l3->GetInterfaceForDevice (m_boundnetdevice);
+              NS_ASSERT_MSG (index >= 0, "Interface without a valid index");
+              ipv6l3->RemoveMulticastAddress (address, index);
+            }
+          else
+            {
+              ipv6l3->RemoveMulticastAddress (address);
+            }
+        }
+      else
+        {
+          // it is a join or a modification
+          if (m_boundnetdevice)
+            {
+              int32_t index = ipv6l3->GetInterfaceForDevice (m_boundnetdevice);
+              NS_ASSERT_MSG (index >= 0, "Interface without a valid index");
+              ipv6l3->AddMulticastAddress (address, index);
+            }
+          else
+            {
+              ipv6l3->AddMulticastAddress (address);
+            }
+        }
+    }
+}
+
 uint32_t Ipv6RawSocketImpl::GetTxAvailable () const
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.24.1/src/internet/model/ipv6-raw-socket-impl.h ns-3.25/src/internet/model/ipv6-raw-socket-impl.h
--- ns-3.24.1/src/internet/model/ipv6-raw-socket-impl.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-raw-socket-impl.h	2016-03-23 21:36:53.000000000 -0700
@@ -95,6 +95,7 @@
   virtual int Bind6 ();
 
   virtual int GetSockName (Address& address) const;
+  virtual int GetPeerName (Address& address) const;
 
   virtual int Close ();
   virtual int ShutdownSend ();
@@ -107,6 +108,7 @@
   virtual int SendTo (Ptr<Packet> p, uint32_t flags, const Address& toAddress);
   virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags);
   virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags, Address& fromAddress);
+  virtual void Ipv6JoinGroup (Ipv6Address address, Socket::Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses);
 
   /**
    * \brief Set protocol field.
@@ -183,7 +185,7 @@
   /**
    * \brief Last error number.
    */
-  enum Socket::SocketErrno m_err;
+  mutable enum Socket::SocketErrno m_err;
 
   /**
    * \brief Node.
diff -Naur ns-3.24.1/src/internet/model/ipv6-static-routing.cc ns-3.25/src/internet/model/ipv6-static-routing.cc
--- ns-3.24.1/src/internet/model/ipv6-static-routing.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ipv6-static-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -85,8 +85,9 @@
   std::ostream* os = stream->GetStream ();
 
   *os << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
-      << " Time: " << Simulator::Now ().GetSeconds () << "s "
-      << "Ipv6StaticRouting table" << std::endl;
+      << ", Time: " << Now().As (Time::S)
+      << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+      << ", Ipv6StaticRouting table" << std::endl;
 
   if (GetNRoutes () > 0)
     {
@@ -125,6 +126,7 @@
           *os << std::endl;
         }
     }
+  *os << std::endl;
 }
 
 void Ipv6StaticRouting::AddHostRouteTo (Ipv6Address dst, Ipv6Address nextHop, uint32_t interface, Ipv6Address prefixToUse, uint32_t metric)
@@ -354,6 +356,10 @@
               rtentry->SetDestination (route->GetDest ());
               rtentry->SetGateway (route->GetGateway ());
               rtentry->SetOutputDevice (m_ipv6->GetNetDevice (interfaceIdx));
+              if (maskLen == 128)
+                {
+                  break;
+                }
             }
         }
     }
@@ -588,12 +594,14 @@
   uint32_t iif = m_ipv6->GetInterfaceForDevice (idev);
   Ipv6Address dst = header.GetDestinationAddress ();
 
+  // Multicast recognition; handle local delivery here
   if (dst.IsMulticast ())
     {
       NS_LOG_LOGIC ("Multicast destination");
       Ptr<Ipv6MulticastRoute> mrtentry = LookupStatic (header.GetSourceAddress (),
                                                        header.GetDestinationAddress (), m_ipv6->GetInterfaceForDevice (idev));
 
+      // \todo check if we want to forward up the packet
       if (mrtentry)
         {
           NS_LOG_LOGIC ("Multicast route found");
@@ -607,39 +615,14 @@
         }
     }
 
-  /// \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);
+      if (!ecb.IsNull ())
+        {
+          ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+        }
       return false;
     }
   // Next, try to find a route
diff -Naur ns-3.24.1/src/internet/model/ndisc-cache.cc ns-3.25/src/internet/model/ndisc-cache.cc
--- ns-3.24.1/src/internet/model/ndisc-cache.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ndisc-cache.cc	2016-03-23 21:36:53.000000000 -0700
@@ -187,10 +187,18 @@
         {
           *os << " PROBE\n";
         }
-      else
+      else if (i->second->IsStale ())
         {
           *os << " STALE\n";
         }
+      else if (i->second->IsPermanent ())
+	{
+	  *os << " PERMANENT\n";
+	}
+      else
+	{
+	  NS_FATAL_ERROR ("Test for possibly unreachable code-- please file a bug report, with a test case, if this is ever hit");
+	}
     }
 }
 
@@ -217,15 +225,15 @@
   return m_router;
 }
 
-void NdiscCache::Entry::AddWaitingPacket (Ptr<Packet> p)
+void NdiscCache::Entry::AddWaitingPacket (Ipv6PayloadHeaderPair p)
 {
-  NS_LOG_FUNCTION (this << p);
+  NS_LOG_FUNCTION (this << p.second << p.first);
 
   if (m_waiting.size () >= m_ndCache->GetUnresQlen ())
     {
       /* we store only m_unresQlen packet => first packet in first packet remove */
       /** \todo report packet as 'dropped' */
-      m_waiting.remove (0);
+      m_waiting.pop_front ();
     }
   m_waiting.push_back (p);
 }
@@ -276,13 +284,17 @@
     }
   else
     {
-      Ptr<Packet> malformedPacket = m_waiting.front ();
-      if (malformedPacket == 0)
+      Ipv6PayloadHeaderPair malformedPacket = m_waiting.front ();
+      if (malformedPacket.first == 0)
         {
-          malformedPacket = Create<Packet> ();
+          malformedPacket.first = Create<Packet> ();
+        }
+      else
+        {
+          malformedPacket.first->AddHeader (malformedPacket.second);
         }
 
-      icmpv6->SendErrorDestinationUnreachable (malformedPacket, addr, Icmpv6Header::ICMPV6_ADDR_UNREACHABLE);
+      icmpv6->SendErrorDestinationUnreachable (malformedPacket.first, addr, Icmpv6Header::ICMPV6_ADDR_UNREACHABLE);
 
       /* delete the entry */
       m_ndCache->Remove (this);
@@ -318,8 +330,9 @@
       return;
     }
 
-  Ptr<Packet> p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
-  m_ndCache->GetDevice ()->Send (p, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
+  Ipv6PayloadHeaderPair p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
+  p.first->AddHeader (p.second);
+  m_ndCache->GetDevice ()->Send (p.first, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
 
   m_nsRetransmit = 1;
   StartProbeTimer ();
@@ -358,8 +371,9 @@
         }
 
       /* icmpv6->SendNS (m_ndCache->GetInterface ()->GetLinkLocalAddress (), m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ()); */
-      Ptr<Packet> p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
-      m_ndCache->GetDevice ()->Send (p, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
+      Ipv6PayloadHeaderPair p = icmpv6->ForgeNS (addr, m_ipv6Address, m_ipv6Address, m_ndCache->GetDevice ()->GetAddress ());
+      p.first->AddHeader (p.second);
+      m_ndCache->GetDevice ()->Send (p.first, this->GetMacAddress (), Ipv6L3Protocol::PROT_NUMBER);
 
       /* arm the timer again */
       StartProbeTimer ();
@@ -444,18 +458,18 @@
   m_nsRetransmit = 0;
 }
 
-void NdiscCache::Entry::MarkIncomplete (Ptr<Packet> p)
+void NdiscCache::Entry::MarkIncomplete (Ipv6PayloadHeaderPair p)
 {
-  NS_LOG_FUNCTION (this << p);
+  NS_LOG_FUNCTION (this << p.second << p.first);
   m_state = INCOMPLETE;
 
-  if (p)
+  if (p.first)
     {
       m_waiting.push_back (p);
     }
 }
 
-std::list<Ptr<Packet> > NdiscCache::Entry::MarkReachable (Address mac)
+std::list<NdiscCache::Ipv6PayloadHeaderPair> NdiscCache::Entry::MarkReachable (Address mac)
 {
   NS_LOG_FUNCTION (this << mac);
   m_state = REACHABLE;
@@ -481,7 +495,7 @@
   m_state = REACHABLE;
 }
 
-std::list<Ptr<Packet> > NdiscCache::Entry::MarkStale (Address mac)
+std::list<NdiscCache::Ipv6PayloadHeaderPair> NdiscCache::Entry::MarkStale (Address mac)
 {
   NS_LOG_FUNCTION (this << mac);
   m_state = STALE;
@@ -495,6 +509,13 @@
   m_state = DELAY;
 }
 
+void NdiscCache::Entry::MarkPermanent ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  StopNudTimer ();
+  m_state = PERMANENT;
+}
+
 bool NdiscCache::Entry::IsStale () const
 {
   NS_LOG_FUNCTION_NOARGS ();
@@ -525,6 +546,12 @@
   return (m_state == PROBE);
 }
 
+bool NdiscCache::Entry::IsPermanent () const
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  return (m_state == PERMANENT);
+}
+
 Address NdiscCache::Entry::GetMacAddress () const
 {
   NS_LOG_FUNCTION_NOARGS ();
diff -Naur ns-3.24.1/src/internet/model/ndisc-cache.h ns-3.25/src/internet/model/ndisc-cache.h
--- ns-3.24.1/src/internet/model/ndisc-cache.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ndisc-cache.h	2016-03-23 21:36:53.000000000 -0700
@@ -38,6 +38,7 @@
 
 class NetDevice;
 class Ipv6Interface;
+class Ipv6Header;
 
 /**
  * \class NdiscCache
@@ -132,6 +133,11 @@
   void PrintNdiscCache (Ptr<OutputStreamWrapper> stream);
 
   /**
+   * \brief Pair of a packet and an Ipv4 header.
+   */
+  typedef std::pair<Ptr<Packet>, Ipv6Header> Ipv6PayloadHeaderPair;
+
+  /**
    * \class Entry
    * \brief A record that holds information about an NdiscCache entry.
    */
@@ -148,14 +154,14 @@
      * \brief Changes the state to this entry to INCOMPLETE.
      * \param p packet that wait to be sent
      */
-    void MarkIncomplete (Ptr<Packet> p);
+    void MarkIncomplete (Ipv6PayloadHeaderPair p);
 
     /**
      * \brief Changes the state to this entry to REACHABLE.
      * \param mac MAC address
      * \return the list of packet waiting
      */
-    std::list<Ptr<Packet> > MarkReachable (Address mac);
+    std::list<Ipv6PayloadHeaderPair> MarkReachable (Address mac);
 
     /**
      * \brief Changes the state to this entry to PROBE.
@@ -167,7 +173,7 @@
      * \param mac L2 address
      * \return the list of packet waiting
      */
-    std::list<Ptr<Packet> > MarkStale (Address mac);
+    std::list<Ipv6PayloadHeaderPair> MarkStale (Address mac);
 
     /**
      * \brief Changes the state to this entry to STALE.
@@ -185,10 +191,15 @@
     void MarkDelay ();
 
     /**
+     * \brief Change the state to this entry to PERMANENT.
+     */
+    void MarkPermanent ();
+
+    /**
      * \brief Add a packet (or replace old value) in the queue.
      * \param p packet to add
      */
-    void AddWaitingPacket (Ptr<Packet> p);
+    void AddWaitingPacket (Ipv6PayloadHeaderPair p);
 
     /**
      * \brief Clear the waiting packet list.
@@ -226,6 +237,12 @@
     bool IsProbe () const;
 
     /**
+     * \brief Is the entry PERMANENT
+     * \return true if the entry is in PERMANENT state, false otherwise
+     */
+    bool IsPermanent () const;
+
+    /**
      * \brief Get the MAC address of this entry.
      * \return the L2 address
      */
@@ -328,7 +345,8 @@
       REACHABLE, /**< Mapping exists between IPv6 and L2 addresses */
       STALE, /**< Mapping is stale */
       DELAY, /**< Try to wait contact from remote host */
-      PROBE /**< Try to contact IPv6 address to know again its L2 address */
+      PROBE, /**< Try to contact IPv6 address to know again its L2 address */
+      PERMANENT /**< Permanent Mapping exists between IPv6 and L2 addresses */
     };
 
     /**
@@ -349,7 +367,7 @@
     /**
      * \brief The list of packet waiting.
      */
-    std::list<Ptr<Packet> > m_waiting;
+    std::list<Ipv6PayloadHeaderPair> m_waiting;
 
     /**
      * \brief Type of node (router or host).
diff -Naur ns-3.24.1/src/internet/model/nsc-tcp-socket-impl.cc ns-3.25/src/internet/model/nsc-tcp-socket-impl.cc
--- ns-3.24.1/src/internet/model/nsc-tcp-socket-impl.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/nsc-tcp-socket-impl.cc	2016-03-23 21:36:53.000000000 -0700
@@ -119,7 +119,7 @@
     m_initialSsThresh (sock.m_initialSsThresh),
     m_lastMeasuredRtt (Seconds (0.0)),
     m_cnTimeout (sock.m_cnTimeout),
-    m_cnCount (sock.m_cnCount),
+    m_synRetries (sock.m_synRetries),
     m_rxAvailable (0),
     m_nscTcpSocket (0),
     m_sndBufSize (sock.m_sndBufSize)
@@ -480,6 +480,21 @@
   return 0;
 }
 
+int
+NscTcpSocketImpl::GetPeerName (Address &address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (!m_endPoint)
+    {
+      m_errno = ERROR_NOTCONN;
+      return -1;
+    }
+  address = InetSocketAddress (m_endPoint->GetPeerAddress (),
+                               m_endPoint->GetPeerPort ());
+  return 0;
+}
+
 uint32_t
 NscTcpSocketImpl::GetRxAvailable (void) const
 {
@@ -778,15 +793,15 @@
 }
 
 void 
-NscTcpSocketImpl::SetConnCount (uint32_t count)
+NscTcpSocketImpl::SetSynRetries (uint32_t count)
 {
-  m_cnCount = count;
+  m_synRetries = count;
 }
 
 uint32_t 
-NscTcpSocketImpl::GetConnCount (void) const
+NscTcpSocketImpl::GetSynRetries (void) const
 {
-  return m_cnCount;
+  return m_synRetries;
 }
 
 void 
@@ -795,6 +810,20 @@
   m_delAckTimeout = timeout;
 }
 
+void
+NscTcpSocketImpl::SetDataRetries (uint32_t retries)
+{
+  NS_LOG_FUNCTION (this << retries);
+  m_dataRetries = retries;
+}
+
+uint32_t
+NscTcpSocketImpl::GetDataRetries (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dataRetries;
+}
+
 Time
 NscTcpSocketImpl::GetDelAckTimeout (void) const
 {
diff -Naur ns-3.24.1/src/internet/model/nsc-tcp-socket-impl.h ns-3.25/src/internet/model/nsc-tcp-socket-impl.h
--- ns-3.24.1/src/internet/model/nsc-tcp-socket-impl.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/nsc-tcp-socket-impl.h	2016-03-23 21:36:53.000000000 -0700
@@ -85,6 +85,7 @@
 
   virtual enum SocketErrno GetErrno (void) const;
   virtual enum SocketType GetSocketType (void) const;
+  virtual int GetPeerName (Address &address) const;
   virtual Ptr<Node> GetNode (void) const;
   virtual int Bind (void);
   virtual int Bind6 (void);
@@ -193,8 +194,10 @@
   virtual uint32_t GetInitialCwnd (void) const;
   virtual void SetConnTimeout (Time timeout);
   virtual Time GetConnTimeout (void) const;
-  virtual void SetConnCount (uint32_t count);
-  virtual uint32_t GetConnCount (void) const;
+  virtual uint32_t GetSynRetries (void) const;
+  virtual void SetSynRetries (uint32_t count);
+  virtual void SetDataRetries (uint32_t retries);
+  virtual uint32_t GetDataRetries (void) const;
   virtual void SetDelAckTimeout (Time timeout);
   virtual Time GetDelAckTimeout (void) const;
   virtual void SetDelAckMaxCount (uint32_t count);
@@ -223,7 +226,7 @@
   Ipv4Address m_localAddress;   //!< local address
   uint16_t m_localPort;         //!< local port
   InetSocketAddress m_peerAddress; //!< peer IP and port
-  enum SocketErrno m_errno;     //!< last error number
+  mutable enum SocketErrno m_errno; //!< last error number
   bool m_shutdownSend;          //!< Send no longer allowed
   bool m_shutdownRecv;          //!< Receive no longer allowed
   bool m_connected;             //!< Connection established
@@ -250,7 +253,8 @@
 
   // Timer-related members
   Time              m_cnTimeout;       //!< Timeout for connection retry
-  uint32_t          m_cnCount;         //!< Count of remaining connection retries
+  uint32_t          m_synRetries;      //!< Count of remaining connection retries
+  uint32_t          m_dataRetries;     //!< Count of remaining data retransmission attempts
   Time              m_persistTimeout;  //!< Time between sending 1-byte probes
 
   // Temporary queue for delivering data to application
diff -Naur ns-3.24.1/src/internet/model/rip.cc ns-3.25/src/internet/model/rip.cc
--- ns-3.24.1/src/internet/model/rip.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/rip.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,1369 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 "rip.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/ipv4-route.h"
+#include "ns3/node.h"
+#include "ns3/names.h"
+#include "ns3/rip-header.h"
+#include "ns3/udp-header.h"
+#include "ns3/enum.h"
+#include "ns3/uinteger.h"
+#include "ns3/ipv4-packet-info-tag.h"
+#include "ns3/loopback-net-device.h"
+
+#define RIP_ALL_NODE "224.0.0.9"
+#define RIP_PORT 520
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("Rip");
+
+NS_OBJECT_ENSURE_REGISTERED (Rip);
+
+Rip::Rip ()
+  : m_ipv4 (0), m_splitHorizonStrategy (Rip::POISON_REVERSE), m_initialized (false)
+{
+  m_rng = CreateObject<UniformRandomVariable> ();
+}
+
+Rip::~Rip ()
+{
+}
+
+TypeId
+Rip::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::Rip")
+    .SetParent<Ipv4RoutingProtocol> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<Rip> ()
+    .AddAttribute ("UnsolicitedRoutingUpdate", "The time between two Unsolicited Routing Updates.",
+                   TimeValue (Seconds(30)),
+                   MakeTimeAccessor (&Rip::m_unsolicitedUpdate),
+                   MakeTimeChecker ())
+    .AddAttribute ("StartupDelay", "Maximum random delay for protocol startup (send route requests).",
+                   TimeValue (Seconds(1)),
+                   MakeTimeAccessor (&Rip::m_startupDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("TimeoutDelay", "The delay to invalidate a route.",
+                   TimeValue (Seconds(180)),
+                   MakeTimeAccessor (&Rip::m_timeoutDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("GarbageCollectionDelay", "The delay to delete an expired route.",
+                   TimeValue (Seconds(120)),
+                   MakeTimeAccessor (&Rip::m_garbageCollectionDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("MinTriggeredCooldown", "Min cooldown delay after a Triggered Update.",
+                   TimeValue (Seconds(1)),
+                   MakeTimeAccessor (&Rip::m_minTriggeredUpdateDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("MaxTriggeredCooldown", "Max cooldown delay after a Triggered Update.",
+                   TimeValue (Seconds(5)),
+                   MakeTimeAccessor (&Rip::m_maxTriggeredUpdateDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("SplitHorizon", "Split Horizon strategy.",
+                   EnumValue (Rip::POISON_REVERSE),
+                   MakeEnumAccessor (&Rip::m_splitHorizonStrategy),
+                   MakeEnumChecker (Rip::NO_SPLIT_HORIZON, "NoSplitHorizon",
+                                    Rip::SPLIT_HORIZON, "SplitHorizon",
+                                    Rip::POISON_REVERSE, "PoisonReverse"))
+    .AddAttribute ("LinkDownValue", "Value for link down in count to infinity.",
+                   UintegerValue (16),
+                   MakeUintegerAccessor (&Rip::m_linkDown),
+                   MakeUintegerChecker<uint32_t> ())
+    ;
+  return tid;
+}
+
+int64_t Rip::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+
+  m_rng->SetStream (stream);
+  return 1;
+}
+
+void Rip::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, &Rip::SendUnsolicitedRouteUpdate, this);
+
+
+  for (uint32_t i = 0 ; i < m_ipv4->GetNInterfaces (); i++)
+    {
+      Ptr<LoopbackNetDevice> check = DynamicCast<LoopbackNetDevice> (m_ipv4->GetNetDevice (i));
+      if (check)
+        {
+          continue;
+        }
+
+      bool activeInterface = false;
+      if (m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
+        {
+          activeInterface = true;
+          m_ipv4->SetForwarding (i, true);
+        }
+
+      for (uint32_t j = 0; j < m_ipv4->GetNAddresses (i); j++)
+        {
+          Ipv4InterfaceAddress address = m_ipv4->GetAddress (i, j);
+          if (address.GetScope() != Ipv4InterfaceAddress::HOST && activeInterface == true)
+            {
+              NS_LOG_LOGIC ("RIP: adding socket to " << address.GetLocal ());
+              TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+              Ptr<Node> theNode = GetObject<Node> ();
+              Ptr<Socket> socket = Socket::CreateSocket (theNode, tid);
+              InetSocketAddress local = InetSocketAddress (address.GetLocal (), RIP_PORT);
+              int ret = socket->Bind (local);
+              NS_ASSERT_MSG (ret == 0, "Bind unsuccessful");
+              socket->BindToNetDevice (m_ipv4->GetNetDevice (i));
+              socket->SetIpRecvTtl (true);
+              m_sendSocketList[socket] = i;
+            }
+          else if (m_ipv4->GetAddress (i, j).GetScope() == Ipv4InterfaceAddress::GLOBAL)
+            {
+              addedGlobal = true;
+            }
+        }
+    }
+
+  if (!m_recvSocket)
+    {
+      NS_LOG_LOGIC ("RIP: adding receiving socket");
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      Ptr<Node> theNode = GetObject<Node> ();
+      m_recvSocket = Socket::CreateSocket (theNode, tid);
+      InetSocketAddress local = InetSocketAddress (RIP_ALL_NODE, RIP_PORT);
+      m_recvSocket->Bind (local);
+      m_recvSocket->SetRecvCallback (MakeCallback (&Rip::Receive, this));
+      m_recvSocket->SetIpRecvTtl (true);
+      m_recvSocket->SetRecvPktInfo (true);
+    }
+
+
+  if (addedGlobal)
+    {
+      Time delay = Seconds (m_rng->GetValue (m_minTriggeredUpdateDelay.GetSeconds (), m_maxTriggeredUpdateDelay.GetSeconds ()));
+      m_nextTriggeredUpdate = Simulator::Schedule (delay, &Rip::DoSendRouteUpdate, this, false);
+    }
+
+  delay = Seconds (m_rng->GetValue (0.01, m_startupDelay.GetSeconds ()));
+  m_nextTriggeredUpdate = Simulator::Schedule (delay, &Rip::SendRouteRequest, this);
+
+  Ipv4RoutingProtocol::DoInitialize ();
+}
+
+Ptr<Ipv4Route> Rip::RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif, Socket::SocketErrno &sockerr)
+{
+  NS_LOG_FUNCTION (this << header << oif);
+
+  Ipv4Address destination = header.GetDestination ();
+  Ptr<Ipv4Route> 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 Rip::RouteInput (Ptr<const Packet> p, const Ipv4Header &header, Ptr<const NetDevice> idev,
+                        UnicastForwardCallback ucb, MulticastForwardCallback mcb,
+                        LocalDeliverCallback lcb, ErrorCallback ecb)
+{
+  NS_LOG_FUNCTION (this << p << header << header.GetSource () << header.GetDestination () << idev);
+
+  NS_ASSERT (m_ipv4 != 0);
+  // Check if input device supports IP
+  NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
+  uint32_t iif = m_ipv4->GetInterfaceForDevice (idev);
+  Ipv4Address dst = header.GetDestination ();
+
+    if (m_ipv4->IsDestinationAddress (header.GetDestination (), iif))
+    {
+      if (!lcb.IsNull ())
+        {
+          NS_LOG_LOGIC ("Local delivery to " << header.GetDestination ());
+          lcb (p, header, iif);
+          return true;
+        }
+      else
+        {
+          // The local delivery callback is null.  This may be a multicast
+          // or broadcast packet, so return false so that another
+          // multicast routing protocol can handle it.  It should be possible
+          // to extend this to explicitly check whether it is a unicast
+          // packet, and invoke the error callback if so
+          return false;
+        }
+    }
+
+    if (dst.IsMulticast ())
+      {
+        NS_LOG_LOGIC ("Multicast route not supported by RIP");
+        return false; // Let other routing protocols try to handle this
+      }
+
+  if (header.GetDestination ().IsBroadcast ())
+    {
+      NS_LOG_LOGIC ("Dropping packet not for me and with dst Broadcast");
+      if (!ecb.IsNull ())
+        {
+          ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+        }
+      return false;
+    }
+
+  // Check if input device supports IP forwarding
+  if (m_ipv4->IsForwarding (iif) == false)
+    {
+      NS_LOG_LOGIC ("Forwarding disabled for this interface");
+      if (!ecb.IsNull ())
+        {
+          ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+        }
+      return false;
+    }
+  // Next, try to find a route
+  NS_LOG_LOGIC ("Unicast destination");
+  Ptr<Ipv4Route> rtentry = Lookup (header.GetDestination ());
+
+  if (rtentry != 0)
+    {
+      NS_LOG_LOGIC ("Found unicast destination - calling unicast callback");
+      ucb (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 Rip::NotifyInterfaceUp (uint32_t i)
+{
+  NS_LOG_FUNCTION (this << i);
+
+  Ptr<LoopbackNetDevice> check = DynamicCast<LoopbackNetDevice> (m_ipv4->GetNetDevice (i));
+  if (check)
+    {
+      return;
+    }
+
+  for (uint32_t j = 0; j < m_ipv4->GetNAddresses (i); j++)
+    {
+      Ipv4InterfaceAddress address = m_ipv4->GetAddress (i, j);
+      Ipv4Mask networkMask = address.GetMask ();
+      Ipv4Address networkAddress = address.GetLocal ().CombineMask (networkMask);
+
+      if (address.GetScope () == Ipv4InterfaceAddress::GLOBAL)
+        {
+          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;
+      m_ipv4->SetForwarding (i, true);
+    }
+
+  for (uint32_t j = 0; j < m_ipv4->GetNAddresses (i); j++)
+    {
+      Ipv4InterfaceAddress address = m_ipv4->GetAddress (i, j);
+
+      if (address.GetScope() != Ipv4InterfaceAddress::HOST && sendSocketFound == false && activeInterface == true)
+        {
+          NS_LOG_LOGIC ("RIP: adding sending socket to " << address.GetLocal ());
+          TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+          Ptr<Node> theNode = GetObject<Node> ();
+          Ptr<Socket> socket = Socket::CreateSocket (theNode, tid);
+          InetSocketAddress local = InetSocketAddress (address.GetLocal (), RIP_PORT);
+          socket->Bind (local);
+          socket->BindToNetDevice (m_ipv4->GetNetDevice (i));
+          socket->SetIpRecvTtl (true);
+          m_sendSocketList[socket] = i;
+        }
+      if (address.GetScope () == Ipv4InterfaceAddress::GLOBAL)
+        {
+          SendTriggeredRouteUpdate ();
+        }
+    }
+
+  if (!m_recvSocket)
+    {
+      NS_LOG_LOGIC ("RIP: adding receiving socket");
+      TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
+      Ptr<Node> theNode = GetObject<Node> ();
+      m_recvSocket = Socket::CreateSocket (theNode, tid);
+      InetSocketAddress local = InetSocketAddress (RIP_ALL_NODE, RIP_PORT);
+      m_recvSocket->Bind (local);
+      m_recvSocket->SetRecvCallback (MakeCallback (&Rip::Receive, this));
+      m_recvSocket->SetIpRecvTtl (true);
+      m_recvSocket->SetRecvPktInfo (true);
+    }
+}
+
+void Rip::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 Rip::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)
+{
+  NS_LOG_FUNCTION (this << interface << address);
+
+  if (!m_ipv4->IsUp (interface))
+    {
+      return;
+    }
+
+  if (m_interfaceExclusions.find (interface) != m_interfaceExclusions.end ())
+    {
+      return;
+    }
+
+  Ipv4Address networkAddress = address.GetLocal ().CombineMask (address.GetMask ());
+  Ipv4Mask networkMask = address.GetMask ();
+
+  if (address.GetScope () == Ipv4InterfaceAddress::GLOBAL)
+    {
+      AddNetworkRouteTo (networkAddress, networkMask, interface);
+    }
+
+  SendTriggeredRouteUpdate ();
+}
+
+void Rip::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)
+{
+  NS_LOG_FUNCTION (this << interface << address);
+
+  if (!m_ipv4->IsUp (interface))
+    {
+      return;
+    }
+
+  if (address.GetScope() != Ipv4InterfaceAddress::GLOBAL)
+    {
+      return;
+    }
+
+  Ipv4Address networkAddress = address.GetLocal ().CombineMask (address.GetMask ());
+  Ipv4Mask networkMask = address.GetMask ();
+
+  // 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->GetDestNetworkMask () == networkMask)
+        {
+          InvalidateRoute (it->first);
+        }
+    }
+
+  if (m_interfaceExclusions.find (interface) == m_interfaceExclusions.end ())
+    {
+      SendTriggeredRouteUpdate ();
+    }
+
+}
+
+void Rip::SetIpv4 (Ptr<Ipv4> ipv4)
+{
+  NS_LOG_FUNCTION (this << ipv4);
+
+  NS_ASSERT (m_ipv4 == 0 && ipv4 != 0);
+  uint32_t i = 0;
+  m_ipv4 = ipv4;
+
+  for (i = 0; i < m_ipv4->GetNInterfaces (); i++)
+    {
+      if (m_ipv4->IsUp (i))
+        {
+          NotifyInterfaceUp (i);
+        }
+      else
+        {
+          NotifyInterfaceDown (i);
+        }
+    }
+}
+
+void Rip::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
+{
+  NS_LOG_FUNCTION (this << stream);
+
+  std::ostream* os = stream->GetStream ();
+
+  *os << "Node: " << m_ipv4->GetObject<Node> ()->GetId ()
+      << ", Time: " << Now().As (Time::S)
+      << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+      << ", IPv4 RIP table" << std::endl;
+
+  if (!m_routes.empty ())
+    {
+      *os << "Destination     Gateway         Genmask         Flags Metric Ref    Use Iface" << std::endl;
+      for (RoutesCI it = m_routes.begin (); it != m_routes.end (); it++)
+        {
+          RipRoutingTableEntry* route = it->first;
+          RipRoutingTableEntry::Status_e status = route->GetRouteStatus();
+
+          if (status == RipRoutingTableEntry::RIP_VALID)
+            {
+              std::ostringstream dest, gw, mask, flags;
+              dest << route->GetDest ();
+              *os << std::setiosflags (std::ios::left) << std::setw (16) << dest.str ();
+              gw << route->GetGateway ();
+              *os << std::setiosflags (std::ios::left) << std::setw (16) << gw.str ();
+              mask << route->GetDestNetworkMask ();
+              *os << std::setiosflags (std::ios::left) << std::setw (16) << mask.str ();
+              flags << "U";
+              if (route->IsHost ())
+                {
+                  flags << "HS";
+                }
+              else if (route->IsGateway ())
+                {
+                  flags << "GS";
+                }
+              *os << std::setiosflags (std::ios::left) << std::setw (6) << flags.str ();
+              *os << std::setiosflags (std::ios::left) << std::setw (7) << int(route->GetRouteMetric ());
+              // Ref ct not implemented
+              *os << "-" << "      ";
+              // Use not implemented
+              *os << "-" << "   ";
+              if (Names::FindName (m_ipv4->GetNetDevice (route->GetInterface ())) != "")
+                {
+                  *os << Names::FindName (m_ipv4->GetNetDevice (route->GetInterface ()));
+                }
+              else
+                {
+                  *os << route->GetInterface ();
+                }
+              *os << std::endl;
+            }
+        }
+    }
+  *os << std::endl;
+}
+
+void Rip::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_ipv4 = 0;
+
+  Ipv4RoutingProtocol::DoDispose ();
+}
+
+
+Ptr<Ipv4Route> Rip::Lookup (Ipv4Address dst, Ptr<NetDevice> interface)
+{
+  NS_LOG_FUNCTION (this << dst << interface);
+
+  Ptr<Ipv4Route> rtentry = 0;
+  uint16_t longestMask = 0;
+
+  /* when sending on local multicast, there have to be interface specified */
+  if (dst.IsLocalMulticast ())
+    {
+      NS_ASSERT_MSG (interface, "Try to send on local multicast address, and no interface index is given!");
+      rtentry = Create<Ipv4Route> ();
+      rtentry->SetSource (m_ipv4->SourceAddressSelection (m_ipv4->GetInterfaceForDevice (interface), dst));
+      rtentry->SetDestination (dst);
+      rtentry->SetGateway (Ipv4Address::GetZero ());
+      rtentry->SetOutputDevice (interface);
+      return rtentry;
+    }
+
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      RipRoutingTableEntry* j = it->first;
+
+      if (j->GetRouteStatus () == RipRoutingTableEntry::RIP_VALID)
+        {
+          Ipv4Mask mask = j->GetDestNetworkMask ();
+          uint16_t maskLen = mask.GetPrefixLength ();
+          Ipv4Address 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_ipv4->GetNetDevice (j->GetInterface ()))
+                {
+                  if (maskLen < longestMask)
+                    {
+                      NS_LOG_LOGIC ("Previous match longer, skipping");
+                      continue;
+                    }
+
+                  longestMask = maskLen;
+
+                  Ipv4RoutingTableEntry* route = j;
+                  uint32_t interfaceIdx = route->GetInterface ();
+                  rtentry = Create<Ipv4Route> ();
+
+                  if (route->GetDest ().IsAny ()) /* default route */
+                    {
+                      rtentry->SetSource (m_ipv4->SourceAddressSelection (interfaceIdx, route->GetGateway ()));
+                    }
+                  else
+                    {
+                      rtentry->SetSource (m_ipv4->SourceAddressSelection (interfaceIdx, route->GetDest ()));
+                    }
+
+                  rtentry->SetDestination (route->GetDest ());
+                  rtentry->SetGateway (route->GetGateway ());
+                  rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIdx));
+                }
+            }
+        }
+    }
+
+  if (rtentry)
+    {
+      NS_LOG_LOGIC ("Matching route via " << rtentry->GetDestination () << " (through " << rtentry->GetGateway () << ") at the end");
+    }
+  return rtentry;
+}
+
+void Rip::AddNetworkRouteTo (Ipv4Address network, Ipv4Mask networkPrefix, Ipv4Address nextHop, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << network << networkPrefix << nextHop << interface);
+
+  RipRoutingTableEntry* route = new RipRoutingTableEntry (network, networkPrefix, nextHop, interface);
+  route->SetRouteMetric (1);
+  route->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+  route->SetRouteChanged (true);
+
+  m_routes.push_back (std::make_pair (route, EventId ()));
+}
+
+void Rip::AddNetworkRouteTo (Ipv4Address network, Ipv4Mask networkPrefix, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << network << networkPrefix << interface);
+
+  RipRoutingTableEntry* route = new RipRoutingTableEntry (network, networkPrefix, interface);
+  route->SetRouteMetric (1);
+  route->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+  route->SetRouteChanged (true);
+
+  m_routes.push_back (std::make_pair (route, EventId ()));
+}
+
+void Rip::InvalidateRoute (RipRoutingTableEntry *route)
+{
+  NS_LOG_FUNCTION (this << *route);
+
+  for (RoutesI it = m_routes.begin (); it != m_routes.end (); it++)
+    {
+      if (it->first == route)
+        {
+          route->SetRouteStatus (RipRoutingTableEntry::RIP_INVALID);
+          route->SetRouteMetric (m_linkDown);
+          route->SetRouteChanged (true);
+          if (it->second.IsRunning ())
+            {
+              it->second.Cancel ();
+            }
+          it->second = Simulator::Schedule (m_garbageCollectionDelay, &Rip::DeleteRoute, this, route);
+          return;
+        }
+    }
+  NS_ABORT_MSG ("RIP::InvalidateRoute - cannot find the route to update");
+}
+
+void Rip::DeleteRoute (RipRoutingTableEntry *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 ("RIP::DeleteRoute - cannot find the route to delete");
+}
+
+
+void Rip::Receive (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+
+  Ptr<Packet> packet = socket->Recv ();
+  NS_LOG_INFO ("Received " << *packet);
+
+  Ipv4PacketInfoTag interfaceInfo;
+  if (!packet->RemovePacketTag (interfaceInfo))
+    {
+      NS_ABORT_MSG ("No incoming interface on RIP message, aborting.");
+    }
+  uint32_t incomingIf = interfaceInfo.GetRecvIf ();
+  Ptr<Node> node = this->GetObject<Node> ();
+  Ptr<NetDevice> dev = node->GetDevice (incomingIf);
+  uint32_t ipInterfaceIndex = m_ipv4->GetInterfaceForDevice (dev);
+
+  SocketIpTtlTag hoplimitTag;
+  if (!packet->RemovePacketTag (hoplimitTag))
+    {
+      NS_ABORT_MSG ("No incoming Hop Count on RIP message, aborting.");
+    }
+  uint8_t hopLimit = hoplimitTag.GetTtl ();
+
+  SocketAddressTag tag;
+  if (!packet->RemovePacketTag (tag))
+    {
+      NS_ABORT_MSG ("No incoming sender address on RIP message, aborting.");
+    }
+  Ipv4Address senderAddress = InetSocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv4 ();
+  uint16_t senderPort = InetSocketAddress::ConvertFrom (tag.GetAddress ()).GetPort ();
+
+  int32_t interfaceForAddress = m_ipv4->GetInterfaceForAddress (senderAddress);
+  if (interfaceForAddress != -1)
+    {
+      NS_LOG_LOGIC ("Ignoring a packet sent by myself.");
+      return;
+    }
+
+  RipHeader hdr;
+  packet->RemoveHeader (hdr);
+
+  if (hdr.GetCommand () == RipHeader::RESPONSE)
+    {
+      HandleResponses (hdr, senderAddress, ipInterfaceIndex, hopLimit);
+    }
+  else if (hdr.GetCommand () == RipHeader::REQUEST)
+    {
+      HandleRequests (hdr, senderAddress, senderPort, ipInterfaceIndex, hopLimit);
+    }
+  else
+    {
+      NS_LOG_LOGIC ("Ignoring message with unknown command: " << int (hdr.GetCommand ()));
+    }
+  return;
+}
+
+void Rip::HandleRequests (RipHeader requestHdr, Ipv4Address senderAddress, uint16_t senderPort, uint32_t incomingInterface, uint8_t hopLimit)
+{
+  NS_LOG_FUNCTION (this << senderAddress << int (senderPort) << incomingInterface << int (hopLimit) << requestHdr);
+
+  std::list<RipRte> rtes = requestHdr.GetRteList ();
+
+  if (rtes.empty ())
+    {
+      return;
+    }
+
+  // check if it's a request for the full table from a neighbor
+  if (rtes.size () == 1)
+    {
+      if (rtes.begin ()->GetPrefix () == Ipv4Address::GetAny () &&
+          rtes.begin ()->GetSubnetMask ().GetPrefixLength () == 0 &&
+          rtes.begin ()->GetRouteMetric () == m_linkDown)
+        {
+          // 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_ipv4->GetMtu (incomingInterface);
+              uint16_t maxRte = (mtu - Ipv4Header ().GetSerializedSize () - UdpHeader ().GetSerializedSize () - RipHeader ().GetSerializedSize ()) / RipRte ().GetSerializedSize ();
+
+              Ptr<Packet> p = Create<Packet> ();
+              SocketIpTtlTag tag;
+              p->RemovePacketTag (tag);
+              if (senderAddress == Ipv4Address(RIP_ALL_NODE))
+                {
+                  tag.SetTtl (1);
+                }
+              else
+                {
+                  tag.SetTtl (255);
+                }
+              p->AddPacketTag (tag);
+
+              RipHeader hdr;
+              hdr.SetCommand (RipHeader::RESPONSE);
+
+              for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+                {
+                  bool splitHorizoning = (rtIter->first->GetInterface () == incomingInterface);
+
+                  Ipv4InterfaceAddress rtDestAddr = Ipv4InterfaceAddress(rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkMask ());
+
+                  bool isGlobal = (rtDestAddr.GetScope () == Ipv4InterfaceAddress::GLOBAL);
+                  bool isDefaultRoute = ((rtIter->first->GetDestNetwork () == Ipv4Address::GetAny ()) &&
+                      (rtIter->first->GetDestNetworkMask () == Ipv4Mask::GetZero ()) &&
+                      (rtIter->first->GetInterface () != incomingInterface));
+
+                  if ((isGlobal || isDefaultRoute) &&
+                      (rtIter->first->GetRouteStatus () == RipRoutingTableEntry::RIP_VALID) )
+                    {
+                      RipRte rte;
+                      rte.SetPrefix (rtIter->first->GetDestNetwork ());
+                      rte.SetSubnetMask (rtIter->first->GetDestNetworkMask ());
+                      if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
+                        {
+                          rte.SetRouteMetric (m_linkDown);
+                        }
+                      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, InetSocketAddress (senderAddress, RIP_PORT));
+                      p->RemoveHeader (hdr);
+                      hdr.ClearRtes ();
+                    }
+                }
+              if (hdr.GetRteNumber () > 0)
+                {
+                  p->AddHeader (hdr);
+                  NS_LOG_DEBUG ("SendTo: " << *p);
+                  sendingSoket->SendTo (p, 0, InetSocketAddress (senderAddress, RIP_PORT));
+                }
+            }
+        }
+    }
+  else
+    {
+      // note: we got the request as a single packet, so no check is necessary for MTU limit
+
+      Ptr<Packet> p = Create<Packet> ();
+      SocketIpTtlTag tag;
+      p->RemovePacketTag (tag);
+      if (senderAddress == Ipv4Address(RIP_ALL_NODE))
+        {
+          tag.SetTtl (1);
+        }
+      else
+        {
+          tag.SetTtl (255);
+        }
+      p->AddPacketTag (tag);
+
+      RipHeader hdr;
+      hdr.SetCommand (RipHeader::RESPONSE);
+
+      for (std::list<RipRte>::iterator iter = rtes.begin ();
+          iter != rtes.end (); iter++)
+        {
+          bool found = false;
+          for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+            {
+
+              Ipv4InterfaceAddress rtDestAddr = Ipv4InterfaceAddress (rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkMask ());
+              if ((rtDestAddr.GetScope () == Ipv4InterfaceAddress::GLOBAL) &&
+                  (rtIter->first->GetRouteStatus () == RipRoutingTableEntry::RIP_VALID))
+                {
+                  Ipv4Address requestedAddress = iter->GetPrefix ();
+                  requestedAddress.CombineMask (iter->GetSubnetMask ());
+                  Ipv4Address rtAddress = rtIter->first->GetDestNetwork ();
+                  rtAddress.CombineMask (rtIter->first->GetDestNetworkMask ());
+
+                  if (requestedAddress == rtAddress)
+                    {
+                      iter->SetRouteMetric (rtIter->first->GetRouteMetric ());
+                      iter->SetRouteTag (rtIter->first->GetRouteTag ());
+                      hdr.AddRte (*iter);
+                      found = true;
+                      break;
+                    }
+                }
+            }
+          if (!found)
+            {
+              iter->SetRouteMetric (m_linkDown);
+              iter->SetRouteTag (0);
+              hdr.AddRte (*iter);
+            }
+        }
+      p->AddHeader (hdr);
+      NS_LOG_DEBUG ("SendTo: " << *p);
+      m_recvSocket->SendTo (p, 0, InetSocketAddress (senderAddress, senderPort));
+    }
+
+}
+
+void Rip::HandleResponses (RipHeader hdr, Ipv4Address 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;
+    }
+
+  std::list<RipRte> rtes = hdr.GetRteList ();
+
+  // validate the RTEs before processing
+  for (std::list<RipRte>::iterator iter = rtes.begin ();
+      iter != rtes.end (); iter++)
+    {
+      if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > m_linkDown)
+        {
+          NS_LOG_LOGIC ("Ignoring an update message with malformed metric: " << int (iter->GetRouteMetric ()));
+          return;
+        }
+      if (iter->GetPrefix ().IsLocalhost () ||
+          iter->GetPrefix ().IsBroadcast () ||
+          iter->GetPrefix ().IsMulticast ())
+        {
+          NS_LOG_LOGIC ("Ignoring an update message with wrong prefixes: " << iter->GetPrefix ());
+          return;
+        }
+    }
+
+  bool changed = false;
+
+  for (std::list<RipRte>::iterator iter = rtes.begin ();
+      iter != rtes.end (); iter++)
+    {
+      Ipv4Mask rtePrefixMask = iter->GetSubnetMask ();
+      Ipv4Address rteAddr = iter->GetPrefix ().CombineMask (rtePrefixMask);
+
+      NS_LOG_LOGIC ("Processing RTE " << *iter);
+
+      uint32_t interfaceMetric = 1;
+      if (m_interfaceMetrics.find (incomingInterface) != m_interfaceMetrics.end ())
+        {
+          interfaceMetric = m_interfaceMetrics[incomingInterface];
+        }
+      uint64_t rteMetric = iter->GetRouteMetric () + interfaceMetric;
+      if (rteMetric > m_linkDown)
+        {
+          rteMetric = m_linkDown;
+        }
+
+      RoutesI it;
+      bool found = false;
+      for (it = m_routes.begin (); it != m_routes.end (); it++)
+        {
+          if (it->first->GetDestNetwork () == rteAddr &&
+              it->first->GetDestNetworkMask () == rtePrefixMask)
+            {
+              found = true;
+              if (rteMetric < it->first->GetRouteMetric ())
+                {
+                  if (senderAddress != it->first->GetGateway ())
+                    {
+                      RipRoutingTableEntry* route = new RipRoutingTableEntry (rteAddr, rtePrefixMask, senderAddress, incomingInterface);
+                      delete it->first;
+                      it->first = route;
+                    }
+                  it->first->SetRouteMetric (rteMetric);
+                  it->first->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+                  it->first->SetRouteTag (iter->GetRouteTag ());
+                  it->first->SetRouteChanged (true);
+                  it->second.Cancel ();
+                  it->second = Simulator::Schedule (m_timeoutDelay, &Rip::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, &Rip::InvalidateRoute, this, it->first);
+                    }
+                  else
+                    {
+                      if (Simulator::GetDelayLeft (it->second) < m_timeoutDelay/2)
+                        {
+                          RipRoutingTableEntry* route = new RipRoutingTableEntry (rteAddr, rtePrefixMask, senderAddress, incomingInterface);
+                          route->SetRouteMetric (rteMetric);
+                          route->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+                          route->SetRouteTag (iter->GetRouteTag ());
+                          route->SetRouteChanged (true);
+                          delete it->first;
+                          it->first = route;
+                          it->second.Cancel ();
+                          it->second = Simulator::Schedule (m_timeoutDelay, &Rip::InvalidateRoute, this, route);
+                          changed = true;
+                        }
+                    }
+                }
+              else if (rteMetric > it->first->GetRouteMetric () && senderAddress == it->first->GetGateway ())
+                {
+                  it->second.Cancel ();
+                  if (rteMetric < m_linkDown)
+                    {
+                      it->first->SetRouteMetric (rteMetric);
+                      it->first->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+                      it->first->SetRouteTag (iter->GetRouteTag ());
+                      it->first->SetRouteChanged (true);
+                      it->second.Cancel ();
+                      it->second = Simulator::Schedule (m_timeoutDelay, &Rip::InvalidateRoute, this, it->first);
+                    }
+                  else
+                    {
+                      InvalidateRoute (it->first);
+                    }
+                  changed = true;
+                }
+            }
+        }
+      if (!found && rteMetric != m_linkDown)
+        {
+          NS_LOG_LOGIC ("Received a RTE with new route, adding.");
+
+          RipRoutingTableEntry* route = new RipRoutingTableEntry (rteAddr, rtePrefixMask, senderAddress, incomingInterface);
+          route->SetRouteMetric (rteMetric);
+          route->SetRouteStatus (RipRoutingTableEntry::RIP_VALID);
+          route->SetRouteChanged (true);
+          m_routes.push_front (std::make_pair (route, EventId ()));
+          EventId invalidateEvent = Simulator::Schedule (m_timeoutDelay, &Rip::InvalidateRoute, this, route);
+          (m_routes.begin ())->second = invalidateEvent;
+          changed = true;
+        }
+    }
+
+  if (changed)
+    {
+      SendTriggeredRouteUpdate ();
+    }
+}
+
+void Rip::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_ipv4->GetMtu (interface);
+          uint16_t maxRte = (mtu - Ipv4Header ().GetSerializedSize () - UdpHeader ().GetSerializedSize () - RipHeader ().GetSerializedSize ()) / RipRte ().GetSerializedSize ();
+
+          Ptr<Packet> p = Create<Packet> ();
+          SocketIpTtlTag tag;
+          tag.SetTtl (1);
+          p->AddPacketTag (tag);
+
+          RipHeader hdr;
+          hdr.SetCommand (RipHeader::RESPONSE);
+
+          for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+            {
+              bool splitHorizoning = (rtIter->first->GetInterface () == interface);
+              Ipv4InterfaceAddress rtDestAddr = Ipv4InterfaceAddress(rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkMask ());
+
+              NS_LOG_DEBUG ("Processing RT " << rtDestAddr << " " << int(rtIter->first->IsRouteChanged ()));
+
+              bool isGlobal = (rtDestAddr.GetScope () == Ipv4InterfaceAddress::GLOBAL);
+              bool isDefaultRoute = ((rtIter->first->GetDestNetwork () == Ipv4Address::GetAny ()) &&
+                  (rtIter->first->GetDestNetworkMask () == Ipv4Mask::GetZero ()) &&
+                  (rtIter->first->GetInterface () != interface));
+
+              bool sameNetwork = false;
+              for (uint32_t index = 0; index < m_ipv4->GetNAddresses (interface); index++)
+                {
+                  Ipv4InterfaceAddress addr = m_ipv4->GetAddress (interface, index);
+                  if (addr.GetLocal ().CombineMask (addr.GetMask ()) == rtIter->first->GetDestNetwork ())
+                    {
+                      sameNetwork = true;
+                    }
+                }
+
+              if ((isGlobal || isDefaultRoute) &&
+                  (periodic || rtIter->first->IsRouteChanged ()) &&
+                  !sameNetwork)
+                {
+                  RipRte rte;
+                  rte.SetPrefix (rtIter->first->GetDestNetwork ());
+                  rte.SetSubnetMask (rtIter->first->GetDestNetworkMask ());
+                  if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
+                    {
+                      rte.SetRouteMetric (m_linkDown);
+                    }
+                  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, InetSocketAddress (RIP_ALL_NODE, RIP_PORT));
+                  p->RemoveHeader (hdr);
+                  hdr.ClearRtes ();
+                }
+            }
+          if (hdr.GetRteNumber () > 0)
+            {
+              p->AddHeader (hdr);
+              NS_LOG_DEBUG ("SendTo: " << *p);
+              iter->first->SendTo (p, 0, InetSocketAddress (RIP_ALL_NODE, RIP_PORT));
+            }
+        }
+    }
+  for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
+    {
+      rtIter->first->SetRouteChanged (false);
+    }
+}
+
+void Rip::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, &Rip::DoSendRouteUpdate, this, false);
+}
+
+void Rip::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, &Rip::SendUnsolicitedRouteUpdate, this);
+}
+
+std::set<uint32_t> Rip::GetInterfaceExclusions () const
+{
+  return m_interfaceExclusions;
+}
+
+void Rip::SetInterfaceExclusions (std::set<uint32_t> exceptions)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_interfaceExclusions = exceptions;
+}
+
+uint8_t Rip::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 Rip::SetInterfaceMetric (uint32_t interface, uint8_t metric)
+{
+  NS_LOG_FUNCTION (this << interface << int (metric));
+
+  if (metric < m_linkDown)
+    {
+      m_interfaceMetrics[interface] = metric;
+    }
+}
+
+void Rip::SendRouteRequest ()
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<Packet> p = Create<Packet> ();
+  SocketIpTtlTag tag;
+  p->RemovePacketTag (tag);
+  tag.SetTtl (1);
+  p->AddPacketTag (tag);
+
+  RipHeader hdr;
+  hdr.SetCommand (RipHeader::REQUEST);
+
+  RipRte rte;
+  rte.SetPrefix (Ipv4Address::GetAny ());
+  rte.SetSubnetMask (Ipv4Mask::GetZero ());
+  rte.SetRouteMetric (m_linkDown);
+
+  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, InetSocketAddress (RIP_ALL_NODE, RIP_PORT));
+        }
+    }
+}
+
+void Rip::AddDefaultRouteTo (Ipv4Address nextHop, uint32_t interface)
+{
+  NS_LOG_FUNCTION (this << interface);
+
+  AddNetworkRouteTo (Ipv4Address ("0.0.0.0"), Ipv4Mask::GetZero (), nextHop, interface);
+}
+
+
+/*
+ * RipRoutingTableEntry
+ */
+
+RipRoutingTableEntry::RipRoutingTableEntry ()
+  : m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
+{
+}
+
+RipRoutingTableEntry::RipRoutingTableEntry (Ipv4Address network, Ipv4Mask networkPrefix, Ipv4Address nextHop, uint32_t interface)
+  : Ipv4RoutingTableEntry ( Ipv4RoutingTableEntry::CreateNetworkRouteTo (network, networkPrefix, nextHop, interface) ),
+    m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
+{
+}
+
+RipRoutingTableEntry::RipRoutingTableEntry (Ipv4Address network, Ipv4Mask networkPrefix, uint32_t interface)
+  : Ipv4RoutingTableEntry ( Ipv4RoutingTableEntry::CreateNetworkRouteTo (network, networkPrefix, interface) ),
+    m_tag (0), m_metric (0), m_status (RIP_INVALID), m_changed (false)
+{
+}
+
+RipRoutingTableEntry::~RipRoutingTableEntry ()
+{
+}
+
+
+void RipRoutingTableEntry::SetRouteTag (uint16_t routeTag)
+{
+  if (m_tag != routeTag)
+    {
+      m_tag = routeTag;
+      m_changed = true;
+    }
+}
+
+uint16_t RipRoutingTableEntry::GetRouteTag () const
+{
+  return m_tag;
+}
+
+void RipRoutingTableEntry::SetRouteMetric (uint8_t routeMetric)
+{
+  if (m_metric != routeMetric)
+    {
+      m_metric = routeMetric;
+      m_changed = true;
+    }
+}
+
+uint8_t RipRoutingTableEntry::GetRouteMetric () const
+{
+  return m_metric;
+}
+
+void RipRoutingTableEntry::SetRouteStatus (Status_e status)
+{
+  if (m_status != status)
+    {
+      m_status = status;
+      m_changed = true;
+    }
+}
+
+RipRoutingTableEntry::Status_e RipRoutingTableEntry::GetRouteStatus (void) const
+{
+  return m_status;
+}
+
+void RipRoutingTableEntry::SetRouteChanged (bool changed)
+{
+  m_changed = changed;
+}
+
+bool RipRoutingTableEntry::IsRouteChanged (void) const
+{
+  return m_changed;
+}
+
+
+std::ostream & operator << (std::ostream& os, const RipRoutingTableEntry& rte)
+{
+  os << static_cast<const Ipv4RoutingTableEntry &>(rte);
+  os << ", metric: " << int (rte.GetRouteMetric ()) << ", tag: " << int (rte.GetRouteTag ());
+
+  return os;
+}
+
+
+}
+
diff -Naur ns-3.24.1/src/internet/model/rip.h ns-3.25/src/internet/model/rip.h
--- ns-3.24.1/src/internet/model/rip.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/rip.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,409 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 RIP_H
+#define RIP_H
+
+#include <list>
+
+#include "ns3/ipv4-routing-protocol.h"
+#include "ns3/ipv4-interface.h"
+#include "ns3/inet-socket-address.h"
+#include "ns3/ipv4-l3-protocol.h"
+#include "ns3/ipv4-routing-table-entry.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/rip-header.h"
+
+namespace ns3 {
+
+/**
+ * \defgroup rip RIP
+ *
+ * The RIP protocol (\RFC{2453}) is a unicast-only IPv4 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.
+ *
+ * RIP 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 RIP 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 rip
+ * \brief Rip Routing Table Entry
+ */
+class RipRoutingTableEntry : public Ipv4RoutingTableEntry
+{
+public:
+
+  /**
+   * Route status
+   */
+  enum Status_e {
+    RIP_VALID,
+    RIP_INVALID,
+  };
+
+  RipRoutingTableEntry (void);
+
+  /**
+   * \brief Constructor
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param nextHop next hop address to route the packet
+   * \param interface interface index
+   */
+  RipRoutingTableEntry (Ipv4Address network, Ipv4Mask networkPrefix, Ipv4Address nextHop, uint32_t interface);
+
+  /**
+   * \brief Constructor
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param interface interface index
+   */
+  RipRoutingTableEntry (Ipv4Address network, Ipv4Mask networkPrefix, uint32_t interface);
+
+  virtual ~RipRoutingTableEntry ();
+
+  /**
+   * \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 changed 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 Ipv4 routing table entry
+ * \returns the reference to the output stream
+ */
+std::ostream& operator<< (std::ostream& os, RipRoutingTableEntry const& route);
+
+
+
+/**
+ * \ingroup rip
+ *
+ * \brief RIP Routing Protocol, defined in \RFC{2453}.
+ */
+class Rip : public Ipv4RoutingProtocol
+{
+public:
+  // /< C-tor
+  Rip ();
+  virtual ~Rip ();
+
+  /**
+   * \brief Get the type ID
+   * \return type ID
+   */
+  static TypeId GetTypeId (void);
+
+  // From Ipv4RoutingProtocol
+  Ptr<Ipv4Route> RouteOutput (Ptr<Packet> p, const Ipv4Header &header, Ptr<NetDevice> oif,
+                              Socket::SocketErrno &sockerr);
+  bool RouteInput (Ptr<const Packet> p, const Ipv4Header &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, Ipv4InterfaceAddress address);
+  virtual void NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address);
+  virtual void SetIpv4 (Ptr<Ipv4> ipv4);
+  virtual void PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const;
+
+  /**
+   * Split Horizon strategy type. See \RFC{2453}.
+   */
+  enum SplitHorizonType_e {
+    NO_SPLIT_HORIZON,//!< No Split Horizon
+    SPLIT_HORIZON,   //!< Split Horizon
+    POISON_REVERSE,  //!< Poison Reverse Split Horizon
+  };
+
+  /**
+   * 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 (Ipv4Address nextHop, uint32_t interface);
+
+protected:
+  /**
+   * \brief Dispose this object.
+   */
+  virtual void DoDispose ();
+
+  /**
+   * Start protocol operation
+   */
+  void DoInitialize ();
+
+private:
+  /// Container for the network routes - pair RipRoutingTableEntry *, EventId (update event)
+  typedef std::list<std::pair <RipRoutingTableEntry *, EventId> > Routes;
+
+  /// Const Iterator for container for the network routes
+  typedef std::list<std::pair <RipRoutingTableEntry *, EventId> >::const_iterator RoutesCI;
+
+  /// Iterator for container for the network routes
+  typedef std::list<std::pair <RipRoutingTableEntry *, EventId> >::iterator RoutesI;
+
+
+  /**
+   * \brief Receive RIP packets.
+   *
+   * \param socket the socket the packet was received to.
+   */
+  void Receive (Ptr<Socket> socket);
+
+  /**
+   * \brief Handle RIP 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 (RipHeader hdr, Ipv4Address senderAddress, uint16_t senderPort, uint32_t incomingInterface, uint8_t hopLimit);
+
+  /**
+   * \brief Handle RIP responses.
+   *
+   * \param hdr message header (including RTEs)
+   * \param senderAddress sender address
+   * \param incomingInterface incoming interface
+   * \param hopLimit packet's hop limit
+   */
+  void HandleResponses (RipHeader hdr, Ipv4Address 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 Ipv4Route to route the packet to reach dest address
+   */
+  Ptr<Ipv4Route> Lookup (Ipv4Address dest, Ptr<NetDevice> = 0);
+
+  /**
+   * Receive and process unicast packet
+   * \param socket socket where packet is arrived
+   */
+  void RecvUnicastRip (Ptr<Socket> socket);
+  /**
+   * Receive and process multicast packet
+   * \param socket socket where packet is arrived
+   */
+  void RecvMulticastRip (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
+   */
+  void AddNetworkRouteTo (Ipv4Address network, Ipv4Mask networkPrefix, Ipv4Address nextHop, uint32_t interface);
+
+  /**
+   * \brief Add route to network.
+   * \param network network address
+   * \param networkPrefix network prefix
+   * \param interface interface index
+   */
+  void AddNetworkRouteTo (Ipv4Address network, Ipv4Mask 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 (RipRoutingTableEntry *route);
+
+  /**
+   * \brief Delete a route.
+   * \param route the route to be removed
+   */
+  void DeleteRoute (RipRoutingTableEntry *route);
+
+  Routes m_routes; //!<  the forwarding table for network.
+  Ptr<Ipv4> m_ipv4; //!< IPv4 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; //!< receive socket
+
+  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.
+  uint32_t m_linkDown; //!< Link down value.
+};
+
+} // namespace ns3
+#endif /* RIP_H */
+
diff -Naur ns-3.24.1/src/internet/model/rip-header.cc ns-3.25/src/internet/model/rip-header.cc
--- ns-3.24.1/src/internet/model/rip-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/rip-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,278 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 "rip-header.h"
+
+namespace ns3 {
+
+/*
+ * RipRte
+ */
+NS_OBJECT_ENSURE_REGISTERED (RipRte);
+
+
+RipRte::RipRte ()
+  : m_tag (0), m_prefix ("127.0.0.1"), m_subnetMask ("0.0.0.0"), m_nextHop ("0.0.0.0"), m_metric (16)
+{
+}
+
+TypeId RipRte::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RipRte")
+    .SetParent<Header> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<RipRte> ();
+  return tid;
+}
+
+TypeId RipRte::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void RipRte::Print (std::ostream & os) const
+{
+  os << "prefix " << m_prefix << "/" << m_subnetMask.GetPrefixLength () << " Metric " << int(m_metric);
+  os << " Tag " << int(m_tag) << " Next Hop " << m_nextHop;
+}
+
+uint32_t RipRte::GetSerializedSize () const
+{
+  return 20;
+}
+
+void RipRte::Serialize (Buffer::Iterator i) const
+{
+  i.WriteHtonU16 (2);
+  i.WriteHtonU16 (m_tag);
+
+  i.WriteHtonU32 (m_prefix.Get ());
+  i.WriteHtonU32 (m_subnetMask.Get ());
+  i.WriteHtonU32 (m_nextHop.Get ());
+  i.WriteHtonU32 (m_metric);
+}
+
+uint32_t RipRte::Deserialize (Buffer::Iterator i)
+{
+  uint16_t tmp;
+
+  tmp = i.ReadNtohU16 ();
+  if (tmp != 2)
+    {
+      return 0;
+    }
+
+  m_tag = i.ReadNtohU16 ();
+  m_prefix.Set (i.ReadNtohU32 ());
+  m_subnetMask.Set (i.ReadNtohU32 ());
+  m_nextHop.Set (i.ReadNtohU32 ());
+
+  m_metric = i.ReadNtohU32 ();
+
+  return GetSerializedSize ();
+}
+
+void RipRte::SetPrefix (Ipv4Address prefix)
+{
+  m_prefix = prefix;
+}
+
+Ipv4Address RipRte::GetPrefix () const
+{
+  return m_prefix;
+}
+
+void RipRte::SetSubnetMask (Ipv4Mask subnetMask)
+{
+  m_subnetMask = subnetMask;
+}
+
+Ipv4Mask RipRte::GetSubnetMask () const
+{
+  return m_subnetMask;
+}
+
+void RipRte::SetRouteTag (uint16_t routeTag)
+{
+  m_tag = routeTag;
+}
+
+uint16_t RipRte::GetRouteTag () const
+{
+  return m_tag;
+}
+
+void RipRte::SetRouteMetric (uint32_t routeMetric)
+{
+  m_metric = routeMetric;
+}
+
+uint32_t RipRte::GetRouteMetric () const
+{
+  return m_metric;
+}
+
+void RipRte::SetNextHop (Ipv4Address nextHop)
+{
+  m_nextHop = nextHop;
+}
+
+Ipv4Address RipRte::GetNextHop () const
+{
+  return m_nextHop;
+}
+
+
+std::ostream & operator << (std::ostream & os, const RipRte & h)
+{
+  h.Print (os);
+  return os;
+}
+
+/*
+ * RipHeader
+ */
+NS_OBJECT_ENSURE_REGISTERED (RipHeader)
+  ;
+
+RipHeader::RipHeader ()
+  : m_command (0)
+{
+}
+
+TypeId RipHeader::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RipHeader")
+    .SetParent<Header> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<RipHeader> ();
+  return tid;
+}
+
+TypeId RipHeader::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+void RipHeader::Print (std::ostream & os) const
+{
+  os << "command " << int(m_command);
+  for (std::list<RipRte>::const_iterator iter = m_rteList.begin ();
+      iter != m_rteList.end (); iter ++)
+    {
+      os << " | ";
+      iter->Print (os);
+    }
+}
+
+uint32_t RipHeader::GetSerializedSize () const
+{
+  RipRte rte;
+  return 4 + m_rteList.size () * rte.GetSerializedSize ();
+}
+
+void RipHeader::Serialize (Buffer::Iterator start) const
+{
+  Buffer::Iterator i = start;
+
+  i.WriteU8 (uint8_t (m_command));
+  i.WriteU8 (1);
+  i.WriteU16 (0);
+
+  for (std::list<RipRte>::const_iterator iter = m_rteList.begin ();
+      iter != m_rteList.end (); iter ++)
+    {
+      iter->Serialize (i);
+      i.Next(iter->GetSerializedSize ());
+    }
+}
+
+uint32_t RipHeader::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, "RIP received a message with mismatch version, aborting.");
+
+  uint16_t temp16 = i.ReadU16 ();
+  NS_ASSERT_MSG (temp16 == 0, "RIP received a message with invalid filled flags, aborting.");
+
+  uint8_t rteNumber = (i.GetSize () - 4)/20;
+  for (uint8_t n=0; n<rteNumber; n++)
+    {
+      RipRte rte;
+      i.Next (rte.Deserialize (i));
+      m_rteList.push_back (rte);
+    }
+
+  return GetSerializedSize ();
+}
+
+void RipHeader::SetCommand (RipHeader::Command_e command)
+{
+  m_command = command;
+}
+
+RipHeader::Command_e RipHeader::GetCommand () const
+{
+  return RipHeader::Command_e (m_command);
+}
+
+void RipHeader::AddRte (RipRte rte)
+{
+  m_rteList.push_back (rte);
+}
+
+void RipHeader::ClearRtes ()
+{
+  m_rteList.clear ();
+}
+
+uint16_t RipHeader::GetRteNumber (void) const
+{
+  return m_rteList.size ();
+}
+
+std::list<RipRte> RipHeader::GetRteList (void) const
+{
+  return m_rteList;
+}
+
+
+std::ostream & operator << (std::ostream & os, const RipHeader & h)
+{
+  h.Print (os);
+  return os;
+}
+
+
+}
+
diff -Naur ns-3.24.1/src/internet/model/rip-header.h ns-3.25/src/internet/model/rip-header.h
--- ns-3.24.1/src/internet/model/rip-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/rip-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,256 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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 RIP_HEADER_H
+#define RIP_HEADER_H
+
+#include <list>
+#include "ns3/header.h"
+#include "ns3/ipv4-address.h"
+#include "ns3/packet.h"
+#include "ns3/ipv4-header.h"
+
+
+namespace ns3 {
+
+/**
+ * \ingroup rip
+ * \brief Rip v2 Routing Table Entry (RTE) - see \RFC{2453}.
+ */
+class RipRte : public Header
+{
+public:
+  RipRte (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 (Ipv4Address prefix);
+
+  /**
+   * \brief Get the prefix.
+   * \returns The prefix.
+   */
+  Ipv4Address GetPrefix (void) const;
+
+  /**
+   * \brief Set the subnet mask.
+   * \param subnetMask The subnet mask.
+   */
+  void SetSubnetMask (Ipv4Mask subnetMask);
+
+  /**
+   * \brief Get the subnet mask.
+   * \returns The subnet mask.
+   */
+  Ipv4Mask GetSubnetMask (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 (uint32_t routeMetric);
+
+  /**
+   * \brief Get the route metric.
+   * \returns The route metric.
+   */
+  uint32_t GetRouteMetric (void) const;
+
+  /**
+   * \brief Set the route metric.
+   * \param routeMetric The route metric.
+   */
+  void SetNextHop (Ipv4Address nextHop);
+
+  /**
+   * \brief Get the route metric.
+   * \returns The route metric.
+   */
+  Ipv4Address GetNextHop (void) const;
+
+
+private:
+  uint16_t m_tag; //!< Route tag.
+  Ipv4Address m_prefix; //!< Advertised prefix.
+  Ipv4Mask m_subnetMask; //!< Subnet mask.
+  Ipv4Address m_nextHop; //!< Next hop.
+  uint32_t m_metric; //!< Route metric.
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param h the Routing Table Entry
+ * \returns the reference to the output stream
+ */
+std::ostream & operator << (std::ostream & os, const RipRte & h);
+
+/**
+ * \ingroup rip
+ * \brief RipHeader - see \RFC{2453}
+ */
+class RipHeader : public Header
+{
+public:
+  RipHeader (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 Rip 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 (RipRte 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<RipRte> GetRteList (void) const;
+
+private:
+  uint8_t m_command; //!< command type
+  std::list<RipRte> m_rteList; //!< list of the RTEs in the message
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the reference to the output stream
+ * \param h the Rip header
+ * \returns the reference to the output stream
+ */
+std::ostream & operator << (std::ostream & os, const RipHeader & h);
+
+}
+
+#endif /* Rip_HEADER_H */
+
diff -Naur ns-3.24.1/src/internet/model/ripng.cc ns-3.25/src/internet/model/ripng.cc
--- ns-3.24.1/src/internet/model/ripng.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ripng.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,6 +31,7 @@
 #include "ns3/ripng-header.h"
 #include "ns3/udp-header.h"
 #include "ns3/enum.h"
+#include "ns3/uinteger.h"
 #include "ns3/ipv6-packet-info-tag.h"
 
 #define RIPNG_ALL_NODE "ff02::9"
@@ -89,7 +90,11 @@
                    MakeEnumChecker (RipNg::NO_SPLIT_HORIZON, "NoSplitHorizon",
                                     RipNg::SPLIT_HORIZON, "SplitHorizon",
                                     RipNg::POISON_REVERSE, "PoisonReverse"))
-  ;
+    .AddAttribute ("LinkDownValue", "Value for link down in count to infinity.",
+                   UintegerValue (16),
+                   MakeUintegerAccessor (&RipNg::m_linkDown),
+                   MakeUintegerChecker<uint8_t> ())
+    ;
   return tid;
 }
 
@@ -119,6 +124,7 @@
       if (m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
         {
           activeInterface = true;
+          m_ipv6->SetForwarding (i, true);
         }
 
       for (uint32_t j = 0; j < m_ipv6->GetNAddresses (i); j++)
@@ -219,40 +225,14 @@
       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");
-        }
-    }
-
   if (header.GetDestinationAddress ().IsLinkLocal () ||
       header.GetSourceAddress ().IsLinkLocal ())
     {
       NS_LOG_LOGIC ("Dropping packet not for me and with src or dst LinkLocal");
-      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+      if (!ecb.IsNull ())
+        {
+          ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+        }
       return false;
     }
 
@@ -260,7 +240,10 @@
   if (m_ipv6->IsForwarding (iif) == false)
     {
       NS_LOG_LOGIC ("Forwarding disabled for this interface");
-      ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+      if (!ecb.IsNull ())
+        {
+          ecb (p, header, Socket::ERROR_NOROUTETOHOST);
+        }
       return false;
     }
   // Next, try to find a route
@@ -290,7 +273,7 @@
       Ipv6Prefix networkMask = address.GetPrefix ();
       Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (networkMask);
 
-      if (address != Ipv6Address () && networkMask != Ipv6Prefix ())
+      if (address.GetScope () == Ipv6InterfaceAddress::GLOBAL)
         {
           AddNetworkRouteTo (networkAddress, networkMask, i);
         }
@@ -316,6 +299,7 @@
   if (m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
     {
       activeInterface = true;
+      m_ipv6->SetForwarding (i, true);
     }
 
   for (uint32_t j = 0; j < m_ipv6->GetNAddresses (i); j++)
@@ -403,7 +387,7 @@
   Ipv6Address networkAddress = address.GetAddress ().CombinePrefix (address.GetPrefix ());
   Ipv6Prefix networkMask = address.GetPrefix ();
 
-  if (address.GetAddress () != Ipv6Address () && address.GetPrefix () != Ipv6Prefix ())
+  if (address.GetScope () == Ipv6InterfaceAddress::GLOBAL)
     {
       AddNetworkRouteTo (networkAddress, networkMask, interface);
     }
@@ -488,8 +472,9 @@
   std::ostream* os = stream->GetStream ();
 
   *os << "Node: " << m_ipv6->GetObject<Node> ()->GetId ()
-      << " Time: " << Simulator::Now ().GetSeconds () << "s "
-      << "Ipv6 RIPng table" << std::endl;
+      << ", Time: " << Now().As (Time::S)
+      << ", Local time: " << GetObject<Node> ()->GetLocalTime ().As (Time::S)
+      << ", IPv6 RIPng table" << std::endl;
 
   if (!m_routes.empty ())
     {
@@ -534,6 +519,7 @@
             }
         }
     }
+  *os << std::endl;
 }
 
 void RipNg::DoDispose ()
@@ -682,7 +668,7 @@
       if (it->first == route)
         {
           route->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_INVALID);
-          route->SetRouteMetric (16);
+          route->SetRouteMetric (m_linkDown);
           route->SetRouteChanged (true);
           if (it->second.IsRunning ())
             {
@@ -785,7 +771,7 @@
     {
       if (rtes.begin ()->GetPrefix () == Ipv6Address::GetAny () &&
           rtes.begin ()->GetPrefixLen () == 0 &&
-          rtes.begin ()->GetRouteMetric () == 16)
+          rtes.begin ()->GetRouteMetric () == m_linkDown)
         {
           // Output whole thing. Use Split Horizon
           if (m_interfaceExclusions.find (incomingInterface) == m_interfaceExclusions.end ())
@@ -818,7 +804,7 @@
                 {
                   bool splitHorizoning = (rtIter->first->GetInterface () == incomingInterface);
 
-                  Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+                  Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress (rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkPrefix ());
 
                   bool isGlobal = (rtDestAddr.GetScope () == Ipv6InterfaceAddress::GLOBAL);
                   bool isDefaultRoute = ((rtIter->first->GetDestNetwork () == Ipv6Address::GetAny ()) &&
@@ -833,7 +819,7 @@
                       rte.SetPrefixLen (rtIter->first->GetDestNetworkPrefix ().GetPrefixLength ());
                       if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
                         {
-                          rte.SetRouteMetric (16);
+                          rte.SetRouteMetric (m_linkDown);
                         }
                       else
                         {
@@ -901,7 +887,7 @@
           bool found = false;
           for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
             {
-              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkPrefix ());
               if ((rtDestAddr.GetScope () == Ipv6InterfaceAddress::GLOBAL) &&
                   (rtIter->first->GetRouteStatus () == RipNgRoutingTableEntry::RIPNG_VALID))
                 {
@@ -922,7 +908,7 @@
             }
           if (!found)
             {
-              iter->SetRouteMetric (16);
+              iter->SetRouteMetric (m_linkDown);
               iter->SetRouteTag (0);
               hdr.AddRte (*iter);
             }
@@ -962,7 +948,7 @@
   for (std::list<RipNgRte>::iterator iter = rtes.begin ();
       iter != rtes.end (); iter++)
     {
-      if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > 16)
+      if (iter->GetRouteMetric () == 0 || iter->GetRouteMetric () > m_linkDown)
         {
           NS_LOG_LOGIC ("Ignoring an update message with malformed metric: " << int (iter->GetRouteMetric ()));
           return;
@@ -996,7 +982,11 @@
         {
           interfaceMetric = m_interfaceMetrics[incomingInterface];
         }
-      uint8_t rteMetric = std::min (iter->GetRouteMetric () + interfaceMetric, 16);
+      uint16_t rteMetric = iter->GetRouteMetric () + interfaceMetric;
+      if (rteMetric > m_linkDown)
+        {
+          rteMetric = m_linkDown;
+        }
       RoutesI it;
       bool found = false;
       for (it = m_routes.begin (); it != m_routes.end (); it++)
@@ -1048,7 +1038,7 @@
               else if (rteMetric > it->first->GetRouteMetric () && senderAddress == it->first->GetGateway ())
                 {
                   it->second.Cancel ();
-                  if (rteMetric < 16)
+                  if (rteMetric < m_linkDown)
                     {
                       it->first->SetRouteMetric (rteMetric);
                       it->first->SetRouteStatus (RipNgRoutingTableEntry::RIPNG_VALID);
@@ -1065,7 +1055,7 @@
                 }
             }
         }
-      if (!found && rteMetric != 16)
+      if (!found && rteMetric != m_linkDown)
         {
           NS_LOG_LOGIC ("Received a RTE with new route, adding.");
 
@@ -1110,7 +1100,7 @@
           for (RoutesI rtIter = m_routes.begin (); rtIter != m_routes.end (); rtIter++)
             {
               bool splitHorizoning = (rtIter->first->GetInterface () == interface);
-              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork ());
+              Ipv6InterfaceAddress rtDestAddr = Ipv6InterfaceAddress(rtIter->first->GetDestNetwork (), rtIter->first->GetDestNetworkPrefix ());
 
               NS_LOG_DEBUG ("Processing RT " << rtDestAddr << " " << int(rtIter->first->IsRouteChanged ()));
 
@@ -1127,7 +1117,7 @@
                   rte.SetPrefixLen (rtIter->first->GetDestNetworkPrefix ().GetPrefixLength ());
                   if (m_splitHorizonStrategy == POISON_REVERSE && splitHorizoning)
                     {
-                      rte.SetRouteMetric (16);
+                      rte.SetRouteMetric (m_linkDown);
                     }
                   else
                     {
@@ -1239,7 +1229,7 @@
 {
   NS_LOG_FUNCTION (this << interface << int (metric));
 
-  if (metric < 16)
+  if (metric < m_linkDown)
     {
       m_interfaceMetrics[interface] = metric;
     }
@@ -1261,7 +1251,7 @@
   RipNgRte rte;
   rte.SetPrefix (Ipv6Address::GetAny ());
   rte.SetPrefixLen (0);
-  rte.SetRouteMetric (16);
+  rte.SetRouteMetric (m_linkDown);
 
   hdr.AddRte (rte);
   p->AddHeader (hdr);
@@ -1291,19 +1281,19 @@
  */
 
 RipNgRoutingTableEntry::RipNgRoutingTableEntry ()
-  : m_tag (0), m_metric (16), m_status (RIPNG_INVALID), m_changed (false)
+  : m_tag (0), m_metric (0), 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)
+    m_tag (0), m_metric (0), 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)
+    m_tag (0), m_metric (0), m_status (RIPNG_INVALID), m_changed (false)
 {
 }
 
diff -Naur ns-3.24.1/src/internet/model/ripng.h ns-3.25/src/internet/model/ripng.h
--- ns-3.24.1/src/internet/model/ripng.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/ripng.h	2016-03-23 21:36:53.000000000 -0700
@@ -407,6 +407,7 @@
   SplitHorizonType_e m_splitHorizonStrategy; //!< Split Horizon strategy
 
   bool m_initialized; //!< flag to allow socket's late-creation.
+  uint8_t m_linkDown; //!< Link down value.
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-congestion-ops.cc ns-3.25/src/internet/model/tcp-congestion-ops.cc
--- ns-3.24.1/src/internet/model/tcp-congestion-ops.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-congestion-ops.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,219 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "tcp-congestion-ops.h"
+#include "tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpCongestionOps");
+
+NS_OBJECT_ENSURE_REGISTERED (TcpCongestionOps);
+
+TypeId
+TcpCongestionOps::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpCongestionOps")
+    .SetParent<Object> ()
+    .SetGroupName ("Internet")
+  ;
+  return tid;
+}
+
+TcpCongestionOps::TcpCongestionOps () : Object ()
+{
+}
+
+TcpCongestionOps::TcpCongestionOps (const TcpCongestionOps &other) : Object (other)
+{
+}
+
+TcpCongestionOps::~TcpCongestionOps ()
+{
+}
+
+
+// RENO
+
+NS_OBJECT_ENSURE_REGISTERED (TcpNewReno);
+
+TypeId
+TcpNewReno::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpNewReno")
+    .SetParent<TcpCongestionOps> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<TcpNewReno> ()
+  ;
+  return tid;
+}
+
+TcpNewReno::TcpNewReno (void) : TcpCongestionOps ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpNewReno::TcpNewReno (const TcpNewReno& sock)
+  : TcpCongestionOps (sock)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpNewReno::~TcpNewReno (void)
+{
+}
+
+/**
+ * \brief Tcp NewReno slow start algorithm
+ *
+ * Defined in RFC 5681 as
+ *
+ * > During slow start, a TCP increments cwnd by at most SMSS bytes for
+ * > each ACK received that cumulatively acknowledges new data.  Slow
+ * > start ends when cwnd exceeds ssthresh (or, optionally, when it
+ * > reaches it, as noted above) or when congestion is observed.  While
+ * > traditionally TCP implementations have increased cwnd by precisely
+ * > SMSS bytes upon receipt of an ACK covering new data, we RECOMMEND
+ * > that TCP implementations increase cwnd, per:
+ * >
+ * >    cwnd += min (N, SMSS)                      (2)
+ * >
+ * > where N is the number of previously unacknowledged bytes acknowledged
+ * > in the incoming ACK.
+ *
+ * The ns-3 implementation respect the RFC definition. Linux does something
+ * different:
+ * \verbatim
+u32 tcp_slow_start(struct tcp_sock *tp, u32 acked)
+  {
+    u32 cwnd = tp->snd_cwnd + acked;
+
+    if (cwnd > tp->snd_ssthresh)
+      cwnd = tp->snd_ssthresh + 1;
+    acked -= cwnd - tp->snd_cwnd;
+    tp->snd_cwnd = min(cwnd, tp->snd_cwnd_clamp);
+
+    return acked;
+  }
+  \endverbatim
+ *
+ * As stated, we want to avoid the case when a cumulative ACK increases cWnd more
+ * than a segment size, but we keep count of how many segments we have ignored,
+ * and return them.
+ *
+ * \param tcb internal congestion state
+ * \param segmentsAcked count of segments acked
+ * \return the number of segments not considered for increasing the cWnd
+ */
+uint32_t
+TcpNewReno::SlowStart (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (segmentsAcked >= 1)
+    {
+      tcb->m_cWnd += tcb->m_segmentSize;
+      NS_LOG_INFO ("In SlowStart, updated to cwnd " << tcb->m_cWnd << " ssthresh " << tcb->m_ssThresh);
+      return segmentsAcked - 1;
+    }
+
+  return 0;
+}
+
+/**
+ * \brief NewReno congestion avoidance
+ *
+ * During congestion avoidance, cwnd is incremented by roughly 1 full-sized
+ * segment per round-trip time (RTT).
+ *
+ * \param tcb internal congestion state
+ * \param segmentsAcked count of segments acked
+ */
+void
+TcpNewReno::CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (segmentsAcked > 0)
+    {
+      double adder = static_cast<double> (tcb->m_segmentSize * tcb->m_segmentSize) / tcb->m_cWnd.Get ();
+      adder = std::max (1.0, adder);
+      tcb->m_cWnd += static_cast<uint32_t> (adder);
+      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh);
+    }
+}
+
+/**
+ * \brief Try to increase the cWnd following the NewReno specification
+ *
+ * \see SlowStart
+ * \see CongestionAvoidance
+ *
+ * \param tcb internal congestion state
+ * \param segmentsAcked count of segments acked
+ */
+void
+TcpNewReno::IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  if (tcb->m_cWnd < tcb->m_ssThresh)
+    {
+      segmentsAcked = SlowStart (tcb, segmentsAcked);
+    }
+
+  if (tcb->m_cWnd >= tcb->m_ssThresh)
+    {
+      CongestionAvoidance (tcb, segmentsAcked);
+    }
+
+  /* At this point, we could have segmentsAcked != 0. This because RFC says
+   * that in slow start, we should increase cWnd by min (N, SMSS); if in
+   * slow start we receive a cumulative ACK, it counts only for 1 SMSS of
+   * increase, wasting the others.
+   *
+   * // Uncorrect assert, I am sorry
+   * NS_ASSERT (segmentsAcked == 0);
+   */
+}
+
+std::string
+TcpNewReno::GetName () const
+{
+  return "TcpNewReno";
+}
+
+uint32_t
+TcpNewReno::GetSsThresh (Ptr<const TcpSocketState> state,
+                         uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << state << bytesInFlight);
+
+  return std::max (2 * state->m_segmentSize, bytesInFlight / 2);
+}
+
+Ptr<TcpCongestionOps>
+TcpNewReno::Fork ()
+{
+  return CopyObject<TcpNewReno> (this);
+}
+
+} // namespace ns3
+
diff -Naur ns-3.24.1/src/internet/model/tcp-congestion-ops.h ns-3.25/src/internet/model/tcp-congestion-ops.h
--- ns-3.24.1/src/internet/model/tcp-congestion-ops.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-congestion-ops.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,168 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPCONGESTIONOPS_H
+#define TCPCONGESTIONOPS_H
+
+#include "ns3/object.h"
+#include "ns3/timer.h"
+
+namespace ns3 {
+
+class TcpSocketState;
+class TcpSocketBase;
+
+/**
+ * \brief Congestion control abstract class
+ *
+ * The design is inspired on what Linux v4.0 does (but it has been
+ * in place since years). The congestion control is splitted from the main
+ * socket code, and it is a pluggable component. An interface has been defined;
+ * variables are maintained in the TcpSocketState class, while subclasses of
+ * TcpCongestionOps operate over an instance of that class.
+ *
+ * Only three methods has been utilized right now; however, Linux has many others,
+ * which can be added later in ns-3.
+ *
+ * \see IncreaseWindow
+ * \see PktsAcked
+ */
+class TcpCongestionOps : public Object
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  TcpCongestionOps ();
+  TcpCongestionOps (const TcpCongestionOps &other);
+
+  virtual ~TcpCongestionOps ();
+
+  /**
+   * \brief Get the name of the congestion control algorithm
+   *
+   * \return A string identifying the name
+   */
+  virtual std::string GetName () const = 0;
+
+  /**
+   * \brief Get the slow start threshold after a loss event
+   *
+   * Is guaranteed that the congestion control state (TcpAckState_t) is
+   * changed BEFORE the invocation of this method.
+   * The implementator should return the slow start threshold (and not change
+   * it directly) because, in the future, the TCP implementation may require to
+   * instantly recover from a loss event (e.g. when there is a network with an high
+   * reordering factor).
+   *
+   * \param tcb internal congestion state
+   * \param bytesInFlight total bytes in flight
+   * \return Slow start threshold
+   */
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight) = 0;
+
+  /**
+   * \brief Congestion avoidance algorithm implementation
+   *
+   * Mimic the function cong_avoid in Linux. New segments have been ACKed,
+   * and the congestion control duty is to set
+   *
+   * The function is allowed to change directly cWnd and/or ssThresh.
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments acked
+   */
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked) = 0;
+
+  /**
+   * \brief Timing information on received ACK
+   *
+   * The function is called every time an ACK is received (only one time
+   * also for cumulative ACKs) and contains timing information. It is
+   * optional (congestion controls can not implement it) and the default
+   * implementation does nothing.
+   *
+   * \param tcb internal congestion state
+   * \param segmentsAcked count of segments acked
+   * \param rtt last rtt
+   */
+  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                          const Time& rtt) { }
+
+  // Present in Linux but not in ns-3 yet:
+  /* call before changing ca_state (optional) */
+  // void (*set_state)(struct sock *sk, u8 new_state);
+  /* call when cwnd event occurs (optional) */
+  // void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev);
+  /* call when ack arrives (optional) */
+  // void (*in_ack_event)(struct sock *sk, u32 flags);
+  /* new value of cwnd after loss (optional) */
+  // u32  (*undo_cwnd)(struct sock *sk);
+  /* hook for packet ack accounting (optional) */
+  // void (*pkts_acked)(struct sock *sk, u32 num_acked, s32 rtt_us);
+
+  /**
+   * \brief Copy the congestion control algorithm across socket
+   *
+   * \return a pointer of the copied object
+   */
+  virtual Ptr<TcpCongestionOps> Fork () = 0;
+};
+
+/**
+ * \brief The NewReno implementation
+ *
+ * New Reno introduces partial ACKs inside the well-established Reno algorithm.
+ * This and other modifications are described in RFC 6582.
+ *
+ * \see IncreaseWindow
+ */
+class TcpNewReno : public TcpCongestionOps
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  TcpNewReno ();
+  TcpNewReno (const TcpNewReno& sock);
+
+  ~TcpNewReno ();
+
+  std::string GetName () const;
+
+  virtual void IncreaseWindow (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+  virtual uint32_t SlowStart (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+  virtual void CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+};
+
+} // namespace ns3
+
+#endif // TCPCONGESTIONOPS_H
diff -Naur ns-3.24.1/src/internet/model/tcp-header.cc ns-3.25/src/internet/model/tcp-header.cc
--- ns-3.24.1/src/internet/model/tcp-header.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -69,7 +69,7 @@
     {
       if (flags & (1 << i))
         {
-          if (flagsDescription.length() > 0) 
+          if (flagsDescription.length () > 0)
             {
               flagsDescription += delimiter;
             }
@@ -158,6 +158,18 @@
 }
 
 uint8_t
+TcpHeader::GetOptionLength () const
+{
+  return m_optionsLen;
+}
+
+uint8_t
+TcpHeader::GetMaxOptionLength () const
+{
+  return m_maxOptionsLen;
+}
+
+uint8_t
 TcpHeader::GetFlags () const
 {
   return m_flags;
@@ -175,7 +187,7 @@
   return m_urgentPointer;
 }
 
-void 
+void
 TcpHeader::InitializeChecksum (const Ipv4Address &source,
                                const Ipv4Address &destination,
                                uint8_t protocol)
@@ -185,7 +197,7 @@
   m_protocol = protocol;
 }
 
-void 
+void
 TcpHeader::InitializeChecksum (const Ipv6Address &source,
                                const Ipv6Address &destination,
                                uint8_t protocol)
@@ -195,7 +207,7 @@
   m_protocol = protocol;
 }
 
-void 
+void
 TcpHeader::InitializeChecksum (const Address &source,
                                const Address &destination,
                                uint8_t protocol)
@@ -254,7 +266,7 @@
   return m_goodChecksum;
 }
 
-TypeId 
+TypeId
 TcpHeader::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::TcpHeader")
@@ -265,7 +277,7 @@
   return tid;
 }
 
-TypeId 
+TypeId
 TcpHeader::GetInstanceTypeId (void) const
 {
   return GetTypeId ();
@@ -278,10 +290,10 @@
 
   if (m_flags != 0)
     {
-      os<<" [" << FlagsToString(m_flags) <<"]";
+      os << " [" << FlagsToString (m_flags) << "]";
     }
 
-  os<<" Seq="<<m_sequenceNumber<<" Ack="<<m_ackNumber<<" Win="<<m_windowSize;
+  os << " Seq=" << m_sequenceNumber << " Ack=" << m_ackNumber << " Win=" << m_windowSize;
 
   TcpOptionList::const_iterator op;
 
@@ -326,13 +338,13 @@
 
   // padding to word alignment; add ENDs and/or pad values (they are the same)
   while (optionLen % 4)
-  {
-    i.WriteU8 (TcpOption::END);
-    ++optionLen;
-  }
+    {
+      i.WriteU8 (TcpOption::END);
+      ++optionLen;
+    }
 
   // Make checksum
-  if(m_calcChecksum)
+  if (m_calcChecksum)
     {
       uint16_t headerChecksum = CalculateHeaderChecksum (start.GetSize ());
       i = start;
@@ -354,7 +366,7 @@
   m_ackNumber = i.ReadNtohU32 ();
   uint16_t field = i.ReadNtohU16 ();
   m_flags = field & 0x3F;
-  m_length = field>>12;
+  m_length = field >> 12;
   m_windowSize = i.ReadNtohU16 ();
   i.Next (2);
   m_urgentPointer = i.ReadNtohU16 ();
@@ -362,7 +374,7 @@
   // Deserialize options if they exist
   m_options.clear ();
   uint32_t optionLen = (m_length - 5) * 4;
-  if (optionLen > 40)
+  if (optionLen > m_maxOptionsLen)
     {
       NS_LOG_ERROR ("Illegal TCP option length " << optionLen << "; options discarded");
       return 20;
@@ -376,7 +388,7 @@
         {
           op = TcpOption::CreateOption (kind);
         }
-      else 
+      else
         {
           op = TcpOption::CreateOption (TcpOption::UNKNOWN);
           NS_LOG_WARN ("Option kind " << static_cast<int> (kind) << " unknown, skipping.");
@@ -415,7 +427,7 @@
     }
 
   // Do checksum
-  if(m_calcChecksum)
+  if (m_calcChecksum)
     {
       uint16_t headerChecksum = CalculateHeaderChecksum (start.GetSize ());
       i = start;
@@ -506,14 +518,14 @@
 operator== (const TcpHeader &lhs, const TcpHeader &rhs)
 {
   return (
-    lhs.m_sourcePort      == rhs.m_sourcePort      &&
-    lhs.m_destinationPort == rhs.m_destinationPort &&
-    lhs.m_sequenceNumber  == rhs.m_sequenceNumber  &&
-    lhs.m_ackNumber       == rhs.m_ackNumber       &&
-    lhs.m_flags           == rhs.m_flags           &&
-    lhs.m_windowSize      == rhs.m_windowSize      &&
-    lhs.m_urgentPointer   == rhs.m_urgentPointer
-    );
+           lhs.m_sourcePort      == rhs.m_sourcePort
+           && lhs.m_destinationPort == rhs.m_destinationPort
+           && lhs.m_sequenceNumber  == rhs.m_sequenceNumber
+           && lhs.m_ackNumber       == rhs.m_ackNumber
+           && lhs.m_flags           == rhs.m_flags
+           && lhs.m_windowSize      == rhs.m_windowSize
+           && lhs.m_urgentPointer   == rhs.m_urgentPointer
+           );
 }
 
 std::ostream&
diff -Naur ns-3.24.1/src/internet/model/tcp-header.h ns-3.25/src/internet/model/tcp-header.h
--- ns-3.24.1/src/internet/model/tcp-header.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -54,7 +54,7 @@
    * \param tc TCP header to print
    * \return The ostream passed as first argument
    */
-  friend std::ostream& operator<<(std::ostream& os, TcpHeader const & tc);
+  friend std::ostream& operator<< (std::ostream& os, TcpHeader const & tc);
 
   /**
    * \brief Converts an integer into a human readable list of Tcp flags
@@ -186,6 +186,18 @@
   Ptr<TcpOption> GetOption (uint8_t kind) const;
 
   /**
+   * \brief Get the total length of appended options
+   * \return the total length of options appended to this TcpHeader
+   */
+  uint8_t GetOptionLength () const;
+
+  /**
+   * \brief Get maximum option length
+   * \return the maximum option length
+   */
+  uint8_t GetMaxOptionLength () const;
+
+  /**
    * \brief Check if the header has the option specified
    * \param kind Option to check for
    * \return true if the header has the option, false otherwise
@@ -328,11 +340,10 @@
   bool m_calcChecksum;    //!< Flag to calculate checksum
   bool m_goodChecksum;    //!< Flag to indicate that checksum is correct
 
-
+  static const uint8_t m_maxOptionsLen = 40;         //!< Maximum options length
   typedef std::list< Ptr<TcpOption> > TcpOptionList; //!< List of TcpOption
-  TcpOptionList m_options; //!< TcpOption present in the header
-  uint8_t m_optionsLen; //!< Tcp options length.
-  static const uint8_t m_maxOptionsLen = 40; //!< Maximum options length
+  TcpOptionList m_options;     //!< TcpOption present in the header
+  uint8_t m_optionsLen;        //!< Tcp options length.
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-highspeed.cc ns-3.25/src/internet/model/tcp-highspeed.cc
--- ns-3.24.1/src/internet/model/tcp-highspeed.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-highspeed.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,758 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Natale Patriciello, <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-highspeed.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHighSpeed");
+NS_OBJECT_ENSURE_REGISTERED (TcpHighSpeed);
+
+TypeId
+TcpHighSpeed::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpHighSpeed")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpHighSpeed> ()
+    .SetGroupName ("Internet")
+  ;
+  return tid;
+}
+
+TcpHighSpeed::TcpHighSpeed (void)
+  : TcpNewReno (),
+  m_ackCnt (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHighSpeed::TcpHighSpeed (const TcpHighSpeed& sock)
+  : TcpNewReno (sock),
+  m_ackCnt (sock.m_ackCnt)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHighSpeed::~TcpHighSpeed (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<TcpCongestionOps>
+TcpHighSpeed::Fork (void)
+{
+  return CopyObject<TcpHighSpeed> (this);
+}
+
+/**
+ * \brief Congestion avoidance of TcpHighSpeed
+ *
+ * As implementation choice, we increment cWnd only by MSS, when the right
+ * number of ACK has been received. At this point, the important question is:
+ * what is the "right number of ACK" ?
+ *
+ * As you can recall from RFC, Highspeed works this way:
+ *
+ *               w = w + a(w)/w
+ *
+ * Let's start when a(w) is 1 (so it is classical NewReno). The formula then is
+ * the classical text-book version for NewReno:
+ *
+ *               w = w + 1 / w
+ *
+ * So, for each segment acked, we increase the window by the quantity 1/w. Or,
+ * instead of adding the 1/w quantity for each segment acked, we can track the
+ * number of segments acked (m_ackCnt) and increment by 1 MSS when m_ackCnt
+ * reaches w.
+ *
+ * When a(w) > 1, it means that each segment acked has a different "weight".
+ * For instance, when it is equal to 2, we need to increase the window by the
+ * quantity 2/w. But, this means that one segment acked is equivalent (from
+ * the point of view of incrementing cWnd) to two segments acked in NewReno
+ * (1/w + 1/w). That a coefficent is, in other word, the weight of each segment
+ * acked. More weight, less ACK are necessary to increment cWnd, which is
+ * exactly the Highspeed principle.
+ *
+ * \param tcb internal congestion state
+ * \param segmentsAcked count of segments acked
+ */
+void
+TcpHighSpeed::CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  uint32_t segCwnd = tcb->GetCwndInSegments ();
+  uint32_t oldCwnd = segCwnd;
+
+  if (segmentsAcked > 0)
+    {
+      uint32_t coeffA = TableLookupA (segCwnd);
+      m_ackCnt += segmentsAcked * coeffA;
+    }
+
+  while (m_ackCnt >= segCwnd)
+    {
+      m_ackCnt -= segCwnd;
+      segCwnd += 1;
+    }
+
+  if (segCwnd != oldCwnd)
+    {
+      tcb->m_cWnd = segCwnd * tcb->m_segmentSize;
+      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh);
+    }
+}
+
+std::string
+TcpHighSpeed::GetName () const
+{
+  return "TcpHighSpeed";
+}
+
+/**
+ * \brief Get slow start threshold following HighSpeed principles
+ *
+ * \param tcb internal congestion state
+ * \param bytesInFlight Bytes in flight
+ *
+ * \return the slow start threshold value
+ */
+uint32_t
+TcpHighSpeed::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                           uint32_t bytesInFlight)
+{
+  NS_LOG_FUNCTION (this << tcb << bytesInFlight);
+
+  uint32_t segCwnd = bytesInFlight / tcb->m_segmentSize;
+
+  double b = 1.0 - TableLookupB (segCwnd);
+  uint32_t ssThresh = std::max (2.0, segCwnd * b);
+
+  NS_LOG_DEBUG ("Calculated b(w) = " << b <<
+                " resulting (in segment) ssThresh=" << ssThresh);
+
+  return ssThresh * tcb->m_segmentSize;
+}
+
+uint32_t
+TcpHighSpeed::TableLookupA (uint32_t w)
+{
+  if (w <= 38)
+    {
+      return 1;
+    }
+  else if (w <= 118)
+    {
+      return 2;
+    }
+  else if (w <= 221)
+    {
+      return 3;
+    }
+  else if (w <= 347)
+    {
+      return 4;
+    }
+  else if (w <= 495)
+    {
+      return 5;
+    }
+  else if (w <= 663)
+    {
+      return 6;
+    }
+  else if (w <= 851)
+    {
+      return 7;
+    }
+  else if (w <= 1058)
+    {
+      return 8;
+    }
+  else if (w <= 1284)
+    {
+      return 9;
+    }
+  else if (w <= 1529)
+    {
+      return 10;
+    }
+  else if (w <= 1793)
+    {
+      return 11;
+    }
+  else if (w <= 2076)
+    {
+      return 12;
+    }
+  else if (w <= 2378)
+    {
+      return 13;
+    }
+  else if (w <= 2699)
+    {
+      return 14;
+    }
+  else if (w <= 3039)
+    {
+      return 15;
+    }
+  else if (w <= 3399)
+    {
+      return 16;
+    }
+  else if (w <= 3778)
+    {
+      return 17;
+    }
+  else if (w <= 4177)
+    {
+      return 18;
+    }
+  else if (w <= 4596)
+    {
+      return 19;
+    }
+  else if (w <= 5036)
+    {
+      return 20;
+    }
+  else if (w <= 5497)
+    {
+      return 21;
+    }
+  else if (w <= 5979)
+    {
+      return 22;
+    }
+  else if (w <= 6483)
+    {
+      return 23;
+    }
+  else if (w <= 7009)
+    {
+      return 24;
+    }
+  else if (w <= 7558)
+    {
+      return 25;
+    }
+  else if (w <= 8130)
+    {
+      return 26;
+    }
+  else if (w <= 8726)
+    {
+      return 27;
+    }
+  else if (w <= 9346)
+    {
+      return 28;
+    }
+  else if (w <= 9991)
+    {
+      return 29;
+    }
+  else if (w <= 10661)
+    {
+      return 30;
+    }
+  else if (w <= 11358)
+    {
+      return 31;
+    }
+  else if (w <= 12082)
+    {
+      return 32;
+    }
+  else if (w <= 12834)
+    {
+      return 33;
+    }
+  else if (w <= 13614)
+    {
+      return 34;
+    }
+  else if (w <= 14424)
+    {
+      return 35;
+    }
+  else if (w <= 15265)
+    {
+      return 36;
+    }
+  else if (w <= 16137)
+    {
+      return 37;
+    }
+  else if (w <= 17042)
+    {
+      return 38;
+    }
+  else if (w <= 17981)
+    {
+      return 39;
+    }
+  else if (w <= 18955)
+    {
+      return 40;
+    }
+  else if (w <= 19965)
+    {
+      return 41;
+    }
+  else if (w <= 21013)
+    {
+      return 42;
+    }
+  else if (w <= 22101)
+    {
+      return 43;
+    }
+  else if (w <= 23230)
+    {
+      return 44;
+    }
+  else if (w <= 24402)
+    {
+      return 45;
+    }
+  else if (w <= 25618)
+    {
+      return 46;
+    }
+  else if (w <= 26881)
+    {
+      return 47;
+    }
+  else if (w <= 28193)
+    {
+      return 48;
+    }
+  else if (w <= 29557)
+    {
+      return 49;
+    }
+  else if (w <= 30975)
+    {
+      return 50;
+    }
+  else if (w <= 32450)
+    {
+      return 51;
+    }
+  else if (w <= 33986)
+    {
+      return 52;
+    }
+  else if (w <= 35586)
+    {
+      return 53;
+    }
+  else if (w <= 37253)
+    {
+      return 54;
+    }
+  else if (w <= 38992)
+    {
+      return 55;
+    }
+  else if (w <= 40808)
+    {
+      return 56;
+    }
+  else if (w <= 42707)
+    {
+      return 57;
+    }
+  else if (w <= 44694)
+    {
+      return 58;
+    }
+  else if (w <= 46776)
+    {
+      return 59;
+    }
+  else if (w <= 48961)
+    {
+      return 60;
+    }
+  else if (w <= 51258)
+    {
+      return 61;
+    }
+  else if (w <= 53667)
+    {
+      return 62;
+    }
+  else if (w <= 56230)
+    {
+      return 63;
+    }
+  else if (w <= 58932)
+    {
+      return 64;
+    }
+  else if (w <= 61799)
+    {
+      return 65;
+    }
+  else if (w <= 64851)
+    {
+      return 66;
+    }
+  else if (w <= 68113)
+    {
+      return 67;
+    }
+  else if (w <= 71617)
+    {
+      return 68;
+    }
+  else if (w <= 75401)
+    {
+      return 69;
+    }
+  else if (w <= 79517)
+    {
+      return 70;
+    }
+  else if (w <= 84035)
+    {
+      return 71;
+    }
+  else if (w <= 89053)
+    {
+      return 72;
+    }
+  else if (w <= 94717)
+    {
+      return 73;
+    }
+  else
+    {
+      return 73;
+    }
+}
+
+double
+TcpHighSpeed::TableLookupB (uint32_t w)
+{
+  if (w <= 38)
+    {
+      return 0.50;
+    }
+  else if (w <= 118)
+    {
+      return 0.44;
+    }
+  else if (w <= 221)
+    {
+      return 0.41;
+    }
+  else if (w <= 347)
+    {
+      return 0.38;
+    }
+  else if (w <= 495)
+    {
+      return 0.37;
+    }
+  else if (w <= 663)
+    {
+      return 0.35;
+    }
+  else if (w <= 851)
+    {
+      return 0.34;
+    }
+  else if (w <= 1058)
+    {
+      return 0.33;
+    }
+  else if (w <= 1284)
+    {
+      return 0.32;
+    }
+  else if (w <= 1529)
+    {
+      return 0.31;
+    }
+  else if (w <= 1793)
+    {
+      return 0.30;
+    }
+  else if (w <= 2076)
+    {
+      return 0.29;
+    }
+  else if (w <= 2378)
+    {
+      return 0.28;
+    }
+  else if (w <= 2699)
+    {
+      return 0.28;
+    }
+  else if (w <= 3039)
+    {
+      return 0.27;
+    }
+  else if (w <= 3399)
+    {
+      return 0.27;
+    }
+  else if (w <= 3778)
+    {
+      return 0.26;
+    }
+  else if (w <= 4177)
+    {
+      return 0.26;
+    }
+  else if (w <= 4596)
+    {
+      return 0.25;
+    }
+  else if (w <= 5036)
+    {
+      return 0.25;
+    }
+  else if (w <= 5497)
+    {
+      return 0.24;
+    }
+  else if (w <= 5979)
+    {
+      return 0.24;
+    }
+  else if (w <= 6483)
+    {
+      return 0.23;
+    }
+  else if (w <= 7009)
+    {
+      return 0.23;
+    }
+  else if (w <= 7558)
+    {
+      return 0.22;
+    }
+  else if (w <= 8130)
+    {
+      return 0.22;
+    }
+  else if (w <= 8726)
+    {
+      return 0.22;
+    }
+  else if (w <= 9346)
+    {
+      return 0.21;
+    }
+  else if (w <= 9991)
+    {
+      return 0.21;
+    }
+  else if (w <= 10661)
+    {
+      return 0.21;
+    }
+  else if (w <= 11358)
+    {
+      return 0.20;
+    }
+  else if (w <= 12082)
+    {
+      return 0.20;
+    }
+  else if (w <= 12834)
+    {
+      return 0.20;
+    }
+  else if (w <= 13614)
+    {
+      return 0.19;
+    }
+  else if (w <= 14424)
+    {
+      return 0.19;
+    }
+  else if (w <= 15265)
+    {
+      return 0.19;
+    }
+  else if (w <= 16137)
+    {
+      return 0.19;
+    }
+  else if (w <= 17042)
+    {
+      return 0.18;
+    }
+  else if (w <= 17981)
+    {
+      return 0.18;
+    }
+  else if (w <= 18955)
+    {
+      return 0.18;
+    }
+  else if (w <= 19965)
+    {
+      return 0.17;
+    }
+  else if (w <= 21013)
+    {
+      return 0.17;
+    }
+  else if (w <= 22101)
+    {
+      return 0.17;
+    }
+  else if (w <= 23230)
+    {
+      return 0.17;
+    }
+  else if (w <= 24402)
+    {
+      return 0.16;
+    }
+  else if (w <= 25618)
+    {
+      return 0.16;
+    }
+  else if (w <= 26881)
+    {
+      return 0.16;
+    }
+  else if (w <= 28193)
+    {
+      return 0.16;
+    }
+  else if (w <= 29557)
+    {
+      return 0.15;
+    }
+  else if (w <= 30975)
+    {
+      return 0.15;
+    }
+  else if (w <= 32450)
+    {
+      return 0.15;
+    }
+  else if (w <= 33986)
+    {
+      return 0.15;
+    }
+  else if (w <= 35586)
+    {
+      return 0.14;
+    }
+  else if (w <= 37253)
+    {
+      return 0.14;
+    }
+  else if (w <= 38992)
+    {
+      return 0.14;
+    }
+  else if (w <= 40808)
+    {
+      return 0.14;
+    }
+  else if (w <= 42707)
+    {
+      return 0.13;
+    }
+  else if (w <= 44694)
+    {
+      return 0.13;
+    }
+  else if (w <= 46776)
+    {
+      return 0.13;
+    }
+  else if (w <= 48961)
+    {
+      return 0.13;
+    }
+  else if (w <= 51258)
+    {
+      return 0.13;
+    }
+  else if (w <= 53667)
+    {
+      return 0.12;
+    }
+  else if (w <= 56230)
+    {
+      return 0.12;
+    }
+  else if (w <= 58932)
+    {
+      return 0.12;
+    }
+  else if (w <= 61799)
+    {
+      return 0.12;
+    }
+  else if (w <= 64851)
+    {
+      return 0.11;
+    }
+  else if (w <= 68113)
+    {
+      return 0.11;
+    }
+  else if (w <= 71617)
+    {
+      return 0.11;
+    }
+  else if (w <= 75401)
+    {
+      return 0.10;
+    }
+  else if (w <= 79517)
+    {
+      return 0.10;
+    }
+  else if (w <= 84035)
+    {
+      return 0.10;
+    }
+  else if (w <= 89053)
+    {
+      return 0.10;
+    }
+  else if (w <= 94717)
+    {
+      return 0.09;
+    }
+  else
+    {
+      return 0.09;
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-highspeed.h ns-3.25/src/internet/model/tcp-highspeed.h
--- ns-3.24.1/src/internet/model/tcp-highspeed.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-highspeed.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,102 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Natale Patriciello, <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#ifndef TCPHIGHSPEED_H
+#define TCPHIGHSPEED_H
+
+#include "ns3/tcp-congestion-ops.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup tcp
+ *
+ * \brief An implementation of TCP HighSpeed
+ *
+ * TCP HighSpeed is designed for high-capacity channels or, in general, for
+ * TCP connections with large congestion windows.
+ * Conceptually, with respect to the standard TCP, HighSpeed makes the
+ * cWnd grow faster during the probing phases and accelerates the
+ * cWnd recovery from losses.
+ * This behavior is executed only when the window grows beyond a
+ * certain threshold, which allows TCP Highspeed to be friendly with standard
+ * TCP in environments with heavy congestion, without introducing new dangers
+ * of congestion collapse.
+ * At the core of TCP HighSpeed there are two functions, a(w) and b(w), which respectively
+ * specify the cWnd growth addendum and the cWnd reduction factor when
+ * given an actual cWnd value w.
+ *
+ * More information: http://dl.acm.org/citation.cfm?id=2756518
+ */
+class TcpHighSpeed : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpHighSpeed (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpHighSpeed (const TcpHighSpeed& sock);
+  virtual ~TcpHighSpeed (void);
+
+  virtual std::string GetName () const;
+
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+  /**
+   * \brief Lookup table for the coefficent a (from RFC 3649)
+   *
+   * \param w Window value (in packets)
+   *
+   * \return the coefficent a
+   */
+  static uint32_t  TableLookupA (uint32_t w);
+
+  /**
+   * \brief Lookup table for the coefficent b (from RFC 3649)
+   *
+   * \param w Window value (in packets)
+   *
+   * \return the coefficent b
+   */
+  static double    TableLookupB (uint32_t w);
+
+protected:
+  virtual void CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+private:
+  uint32_t m_ackCnt; //!< Number of received ACK, corrected with the coefficent a
+};
+
+} // namespace ns3
+
+#endif // TCPHIGHSPEED_H
diff -Naur ns-3.24.1/src/internet/model/tcp-hybla.cc ns-3.25/src/internet/model/tcp-hybla.cc
--- ns-3.24.1/src/internet/model/tcp-hybla.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-hybla.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,181 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-hybla.h"
+#include "ns3/log.h"
+#include "ns3/tcp-socket-base.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHybla");
+NS_OBJECT_ENSURE_REGISTERED (TcpHybla);
+
+TypeId
+TcpHybla::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpHybla")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<TcpHybla> ()
+    .SetGroupName ("Internet")
+    .AddAttribute ("RRTT", "Reference RTT",
+                   TimeValue (MilliSeconds (50)),
+                   MakeTimeAccessor (&TcpHybla::m_rRtt),
+                   MakeTimeChecker ())
+    .AddTraceSource ("Rho",
+                     "Rho parameter of Hybla",
+                     MakeTraceSourceAccessor (&TcpHybla::m_rho),
+                     "ns3::TracedValue::DoubleCallback")
+  ;
+  return tid;
+}
+
+TcpHybla::TcpHybla ()
+  : TcpNewReno (),
+  m_rho (1.0),
+  m_minRtt (Time::Max ()),
+  m_cWndCnt (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHybla::TcpHybla (const TcpHybla &sock)
+  : TcpNewReno (sock),
+  m_rho (sock.m_rho),
+  m_minRtt (sock.m_minRtt),
+  m_cWndCnt (sock.m_cWndCnt)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+TcpHybla::~TcpHybla ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+TcpHybla::RecalcParam (Ptr<TcpSocketState> tcb, const Time &rtt)
+{
+  NS_LOG_FUNCTION (this << rtt);
+
+  m_rho = std::max ((double) rtt.GetMilliSeconds () / m_rRtt.GetMilliSeconds (), 1.0);
+
+  NS_ASSERT (m_rho > 0.0);
+  NS_LOG_DEBUG ("Calculated rho=" << m_rho);
+}
+
+void
+TcpHybla::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                     const Time &rtt)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked << rtt);
+
+  if (rtt < m_minRtt)
+    {
+      RecalcParam (tcb, rtt);
+      m_minRtt = rtt;
+      NS_LOG_DEBUG ("Updated m_minRtt=" << m_minRtt);
+    }
+}
+
+uint32_t
+TcpHybla::SlowStart (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  NS_ASSERT (tcb->m_cWnd <= tcb->m_ssThresh);
+
+  if (segmentsAcked >= 1)
+    {
+      /*
+       * slow start
+       * INC = 2^RHO - 1
+       */
+
+      double increment = std::pow (2, m_rho) - 1.0;
+      NS_LOG_INFO ("Slow start: inc=" << increment);
+
+      tcb->m_cWnd = std::min (tcb->m_cWnd + (increment * tcb->m_segmentSize),
+                              tcb->m_ssThresh);
+
+      NS_LOG_INFO ("In SlowStart, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh <<
+                   " with an increment of " << increment * tcb->m_segmentSize);
+
+      return segmentsAcked - 1;
+    }
+
+  return 0;
+}
+
+void
+TcpHybla::CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked)
+{
+  NS_LOG_FUNCTION (this << tcb << segmentsAcked);
+
+  uint32_t segCwnd;
+  double increment;
+
+  while (segmentsAcked > 0)
+    {
+      /*
+       * congestion avoidance
+       * INC = RHO^2 / W
+       */
+      segCwnd = tcb->GetCwndInSegments ();
+      increment = std::pow (m_rho, 2) / ((double) segCwnd);
+
+      m_cWndCnt += increment;
+      segmentsAcked -= 1;
+    }
+
+  if (m_cWndCnt >= 1.0)
+    {
+      // double to int truncates everytime.
+      uint32_t inc = (uint32_t) m_cWndCnt;
+      m_cWndCnt -= inc;
+
+      NS_ASSERT (m_cWndCnt >= 0.0);
+
+      /* This leaves space for a tcp pacing implementation; it would be easy
+         to setup a limit on the maximum increment of the cWnd per ACK received.
+         The remaining increment is leaved for the next ACK. */
+
+      tcb->m_cWnd += inc * tcb->m_segmentSize;
+
+
+      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << tcb->m_cWnd <<
+                   " ssthresh " << tcb->m_ssThresh <<
+                   " with an increment of " << inc * tcb->m_segmentSize);
+    }
+}
+
+Ptr<TcpCongestionOps>
+TcpHybla::Fork (void)
+{
+  return CopyObject<TcpHybla> (this);
+}
+
+std::string
+TcpHybla::GetName () const
+{
+  return "TcpHybla";
+}
+
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-hybla.h ns-3.25/src/internet/model/tcp-hybla.h
--- ns-3.24.1/src/internet/model/tcp-hybla.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/model/tcp-hybla.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,90 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPHYBLA_H
+#define TCPHYBLA_H
+
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/traced-value.h"
+
+namespace ns3 {
+
+/**
+ * \brief Implementation of the TCP Hybla algorithm
+ *
+ * The key idea behind TCP Hybla is to obtain for long RTT connections the same
+ * instantaneous transmission rate of a reference TCP connection with lower RTT.
+ * With analytical steps, it is shown that this goal can be achieved by
+ * modifying the time scale, in order for the throughput to be independent from
+ * the RTT. This independence is obtained through the use of a coefficient rho.
+ *
+ * This coefficient is used to calculate both the slow start threshold
+ * and the congestion window when in slow start and in congestion avoidance,
+ * respectively.
+ *
+ * More information: http://dl.acm.org/citation.cfm?id=2756518
+ */
+class TcpHybla : public TcpNewReno
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * Create an unbound tcp socket.
+   */
+  TcpHybla (void);
+
+  /**
+   * \brief Copy constructor
+   * \param sock the object to copy
+   */
+  TcpHybla (const TcpHybla& sock);
+
+  virtual ~TcpHybla (void);
+
+  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                          const Time& rtt);
+
+  virtual std::string GetName () const;
+
+  virtual Ptr<TcpCongestionOps> Fork ();
+
+protected:
+  virtual uint32_t SlowStart (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+  virtual void CongestionAvoidance (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked);
+
+private:
+  TracedValue<double> m_rho;         //!< Rho parameter
+  Time                m_minRtt;      //!< Minimum smoothed round trip time value seen
+  Time                m_rRtt;        //!< Reference RTT
+  double              m_cWndCnt;     //!< cWnd integer-to-float counter
+
+private:
+  /**
+   * \brief Recalculate algorithm paramenters
+   */
+  void RecalcParam (Ptr<TcpSocketState> tcb, const Time& rtt);
+};
+
+} // namespace ns3
+
+#endif // TCPHYBLA_H
diff -Naur ns-3.24.1/src/internet/model/tcp-l4-protocol.cc ns-3.25/src/internet/model/tcp-l4-protocol.cc
--- ns-3.24.1/src/internet/model/tcp-l4-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-l4-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -40,7 +40,7 @@
 #include "ipv6-l3-protocol.h"
 #include "ipv6-routing-protocol.h"
 #include "tcp-socket-factory-impl.h"
-#include "tcp-newreno.h"
+#include "tcp-socket-base.h"
 #include "rtt-estimator.h"
 
 #include <vector>
@@ -57,7 +57,7 @@
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                   \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
+  if (m_node) { std::clog << " [node " << m_node->GetId () << "] "; }
 
 /* see http://www.iana.org/assignments/protocol-numbers */
 const uint8_t TcpL4Protocol::PROT_NUMBER = 6;
@@ -77,7 +77,7 @@
     .AddAttribute ("SocketType",
                    "Socket type of TCP objects.",
                    TypeIdValue (TcpNewReno::GetTypeId ()),
-                   MakeTypeIdAccessor (&TcpL4Protocol::m_socketTypeId),
+                   MakeTypeIdAccessor (&TcpL4Protocol::m_congestionTypeId),
                    MakeTypeIdChecker ())
     .AddAttribute ("SocketList", "The list of sockets associated to this protocol.",
                    ObjectVectorValue (),
@@ -96,21 +96,23 @@
 
 TcpL4Protocol::~TcpL4Protocol ()
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
 }
 
 void
 TcpL4Protocol::SetNode (Ptr<Node> node)
 {
+  NS_LOG_FUNCTION (this);
   m_node = node;
 }
 
 void
 TcpL4Protocol::NotifyNewAggregate ()
 {
+  NS_LOG_FUNCTION (this);
   Ptr<Node> node = this->GetObject<Node> ();
   Ptr<Ipv4> ipv4 = this->GetObject<Ipv4> ();
-  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+  Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
 
   if (m_node == 0)
     {
@@ -136,7 +138,7 @@
   if (ipv6 != 0 && m_downTarget6.IsNull ())
     {
       ipv6->Insert (this);
-      this->SetDownTarget6 (MakeCallback (&Ipv6L3Protocol::Send, ipv6));
+      this->SetDownTarget6 (MakeCallback (&Ipv6::Send, ipv6));
     }
   IpL4Protocol::NotifyNewAggregate ();
 }
@@ -150,7 +152,7 @@
 void
 TcpL4Protocol::DoDispose (void)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this);
   m_sockets.clear ();
 
   if (m_endPoints != 0)
@@ -172,18 +174,23 @@
 }
 
 Ptr<Socket>
-TcpL4Protocol::CreateSocket (TypeId socketTypeId)
+TcpL4Protocol::CreateSocket (TypeId congestionTypeId)
 {
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_LOG_FUNCTION (this << congestionTypeId.GetName ());
   ObjectFactory rttFactory;
-  ObjectFactory socketFactory;
+  ObjectFactory congestionAlgorithmFactory;
   rttFactory.SetTypeId (m_rttTypeId);
-  socketFactory.SetTypeId (socketTypeId);
+  congestionAlgorithmFactory.SetTypeId (congestionTypeId);
+
   Ptr<RttEstimator> rtt = rttFactory.Create<RttEstimator> ();
-  Ptr<TcpSocketBase> socket = socketFactory.Create<TcpSocketBase> ();
+  Ptr<TcpSocketBase> socket = CreateObject<TcpSocketBase> ();
+  Ptr<TcpCongestionOps> algo = congestionAlgorithmFactory.Create<TcpCongestionOps> ();
+
   socket->SetNode (m_node);
   socket->SetTcp (this);
   socket->SetRtt (rtt);
+  socket->SetCongestionControlAlgorithm (algo);
+
   m_sockets.push_back (socket);
   return socket;
 }
@@ -191,7 +198,7 @@
 Ptr<Socket>
 TcpL4Protocol::CreateSocket (void)
 {
-  return CreateSocket (m_socketTypeId);
+  return CreateSocket (m_congestionTypeId);
 }
 
 Ipv4EndPoint *
@@ -340,6 +347,7 @@
 TcpL4Protocol::PacketReceived (Ptr<Packet> packet, TcpHeader &incomingTcpHeader,
                                const Address &source, const Address &destination)
 {
+  NS_LOG_FUNCTION (this << packet << incomingTcpHeader << source << destination);
 
   if (Node::ChecksumEnabled ())
     {
@@ -369,6 +377,8 @@
                                  const Address &incomingSAddr,
                                  const Address &incomingDAddr)
 {
+  NS_LOG_FUNCTION (this << incomingHeader << incomingSAddr << incomingDAddr);
+
   if (!(incomingHeader.GetFlags () & TcpHeader::RST))
     {
       // build a RST packet and send
@@ -418,8 +428,6 @@
       return checksumControl;
     }
 
-  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet");
-
   Ipv4EndPointDemux::EndPoints endPoints;
   endPoints = m_endPoints->Lookup (incomingIpHeader.GetDestination (),
                                    incomingTcpHeader.GetDestinationPort (),
@@ -443,7 +451,8 @@
           return (this->Receive (packet, ipv6Header, fakeInterface));
         }
 
-      NS_LOG_LOGIC ("No endpoints matched on TcpL4Protocol "<< this <<
+      NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet but"
+                    " no endpoints matched." <<
                     " destination IP: " << incomingIpHeader.GetDestination () <<
                     " destination port: "<< incomingTcpHeader.GetDestinationPort () <<
                     " source IP: " << incomingIpHeader.GetSource () <<
@@ -457,7 +466,8 @@
     }
 
   NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
-  NS_LOG_LOGIC ("TcpL4Protocol " << this << " forwarding up to endpoint/socket");
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet and"
+                " now forwarding it up to endpoint/socket");
 
   (*endPoints.begin ())->ForwardUp (packet, incomingIpHeader,
                                     incomingTcpHeader.GetSourcePort (),
@@ -490,7 +500,6 @@
       return checksumControl;
     }
 
-  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet");
   Ipv6EndPointDemux::EndPoints endPoints =
     m_endPoints6->Lookup (incomingIpHeader.GetDestinationAddress (),
                           incomingTcpHeader.GetDestinationPort (),
@@ -498,7 +507,8 @@
                           incomingTcpHeader.GetSourcePort (), interface);
   if (endPoints.empty ())
     {
-      NS_LOG_LOGIC ("No endpoints matched on TcpL4Protocol "<< this <<
+      NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet but"
+                    " no endpoints matched." <<
                     " destination IP: " << incomingIpHeader.GetDestinationAddress () <<
                     " destination port: "<< incomingTcpHeader.GetDestinationPort () <<
                     " source IP: " << incomingIpHeader.GetSourceAddress () <<
@@ -511,7 +521,8 @@
     }
 
   NS_ASSERT_MSG (endPoints.size () == 1, "Demux returned more than one endpoint");
-  NS_LOG_LOGIC ("TcpL4Protocol " << this << " forwarding up to endpoint/socket");
+  NS_LOG_LOGIC ("TcpL4Protocol " << this << " received a packet and"
+                " now forwarding it up to endpoint/socket");
 
   (*endPoints.begin ())->ForwardUp (packet, incomingIpHeader,
                                     incomingTcpHeader.GetSourcePort (), interface);
@@ -524,12 +535,12 @@
                              const Ipv4Address &saddr, const Ipv4Address &daddr,
                              Ptr<NetDevice> oif) const
 {
+  NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   NS_LOG_LOGIC ("TcpL4Protocol " << this
                                  << " sending seq " << outgoing.GetSequenceNumber ()
                                  << " ack " << outgoing.GetAckNumber ()
                                  << " flags " << TcpHeader::FlagsToString (outgoing.GetFlags ())
                                  << " data size " << packet->GetSize ());
-  NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   // XXX outgoingHeader cannot be logged
 
   TcpHeader outgoingHeader = outgoing;
@@ -575,12 +586,12 @@
                              const Ipv6Address &saddr, const Ipv6Address &daddr,
                              Ptr<NetDevice> oif) const
 {
+  NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   NS_LOG_LOGIC ("TcpL4Protocol " << this
                                  << " sending seq " << outgoing.GetSequenceNumber ()
                                  << " ack " << outgoing.GetAckNumber ()
                                  << " flags " << TcpHeader::FlagsToString (outgoing.GetFlags ())
                                  << " data size " << packet->GetSize ());
-  NS_LOG_FUNCTION (this << packet << saddr << daddr << oif);
   // XXX outgoingHeader cannot be logged
 
   if (daddr.IsIpv4MappedAddress ())
@@ -629,6 +640,7 @@
                            const Address &saddr, const Address &daddr,
                            Ptr<NetDevice> oif) const
 {
+  NS_LOG_FUNCTION (this << pkt << outgoing << saddr << daddr << oif);
   if (Ipv4Address::IsMatchingType (saddr))
     {
       NS_ASSERT (Ipv4Address::IsMatchingType (daddr));
@@ -672,6 +684,7 @@
 void
 TcpL4Protocol::AddSocket (Ptr<TcpSocketBase> socket)
 {
+  NS_LOG_FUNCTION (this << socket);
   std::vector<Ptr<TcpSocketBase> >::iterator it = m_sockets.begin ();
 
   while (it != m_sockets.end ())
@@ -690,6 +703,7 @@
 bool
 TcpL4Protocol::RemoveSocket (Ptr<TcpSocketBase> socket)
 {
+  NS_LOG_FUNCTION (this << socket);
   std::vector<Ptr<TcpSocketBase> >::iterator it = m_sockets.begin ();
 
   while (it != m_sockets.end ())
diff -Naur ns-3.24.1/src/internet/model/tcp-l4-protocol.h ns-3.25/src/internet/model/tcp-l4-protocol.h
--- ns-3.24.1/src/internet/model/tcp-l4-protocol.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-l4-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -98,7 +98,7 @@
    *
    * \param socketTypeId the socket TypeId
    */
-  Ptr<Socket> CreateSocket (TypeId socketTypeId);
+  Ptr<Socket> CreateSocket (TypeId congestionTypeId);
 
   /**
    * \brief Allocate an IPv4 Endpoint
@@ -282,7 +282,7 @@
   Ipv4EndPointDemux *m_endPoints;  //!< A list of IPv4 end points.
   Ipv6EndPointDemux *m_endPoints6; //!< A list of IPv6 end points.
   TypeId m_rttTypeId;              //!< The RTT Estimator TypeId
-  TypeId m_socketTypeId;           //!< The socket TypeId
+  TypeId m_congestionTypeId;       //!< The socket TypeId
   std::vector<Ptr<TcpSocketBase> > m_sockets;      //!< list of sockets
   IpL4Protocol::DownTargetCallback m_downTarget;   //!< Callback to send packets over IPv4
   IpL4Protocol::DownTargetCallback6 m_downTarget6; //!< Callback to send packets over IPv6
diff -Naur ns-3.24.1/src/internet/model/tcp-newreno.cc ns-3.25/src/internet/model/tcp-newreno.cc
--- ns-3.24.1/src/internet/model/tcp-newreno.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-newreno.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,185 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#define NS_LOG_APPEND_CONTEXT \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
-
-#include "tcp-newreno.h"
-#include "ns3/log.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/simulator.h"
-#include "ns3/abort.h"
-#include "ns3/node.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("TcpNewReno");
-
-NS_OBJECT_ENSURE_REGISTERED (TcpNewReno);
-
-TypeId
-TcpNewReno::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::TcpNewReno")
-    .SetParent<TcpSocketBase> ()
-    .SetGroupName ("Internet")
-    .AddConstructor<TcpNewReno> ()
-    .AddAttribute ("ReTxThreshold", "Threshold for fast retransmit",
-                    UintegerValue (3),
-                    MakeUintegerAccessor (&TcpNewReno::m_retxThresh),
-                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("LimitedTransmit", "Enable limited transmit",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&TcpNewReno::m_limitedTx),
-                   MakeBooleanChecker ())
- ;
-  return tid;
-}
-
-TcpNewReno::TcpNewReno (void)
-  : m_retxThresh (3), // mute valgrind, actual value set by the attribute system
-    m_inFastRec (false),
-    m_limitedTx (false) // mute valgrind, actual value set by the attribute system
-{
-  NS_LOG_FUNCTION (this);
-}
-
-TcpNewReno::TcpNewReno (const TcpNewReno& sock)
-  : TcpSocketBase (sock),
-    m_retxThresh (sock.m_retxThresh),
-    m_inFastRec (false),
-    m_limitedTx (sock.m_limitedTx)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("Invoked the copy constructor");
-}
-
-TcpNewReno::~TcpNewReno (void)
-{
-}
-
-Ptr<TcpSocketBase>
-TcpNewReno::Fork (void)
-{
-  return CopyObject<TcpNewReno> (this);
-}
-
-/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
-void
-TcpNewReno::NewAck (const SequenceNumber32& seq)
-{
-  NS_LOG_FUNCTION (this << seq);
-  NS_LOG_LOGIC ("TcpNewReno received ACK for seq " << seq <<
-                " cwnd " << m_cWnd <<
-                " ssthresh " << m_ssThresh);
-
-  // Check for exit condition of fast recovery
-  if (m_inFastRec && seq < m_recover)
-    { // Partial ACK, partial window deflation (RFC2582 sec.3 bullet #5 paragraph 3)
-      m_cWnd += m_segmentSize - (seq - m_txBuffer->HeadSequence ());
-      NS_LOG_INFO ("Partial ACK for seq " << seq << " in fast recovery: cwnd set to " << m_cWnd);
-      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)
-    { // Full ACK (RFC2582 sec.3 bullet #5 paragraph 2, option 1)
-      m_cWnd = std::min (m_ssThresh.Get (), BytesInFlight () + m_segmentSize);
-      m_inFastRec = false;
-      NS_LOG_INFO ("Received full ACK for seq " << seq <<". Leaving fast recovery with cwnd set to " << m_cWnd);
-    }
-
-  // Increase of cwnd based on current phase (slow start or congestion avoidance)
-  if (m_cWnd < m_ssThresh)
-    { // Slow start mode, add one segSize to cWnd. Default m_ssThresh is 65535. (RFC2001, sec.1)
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("In SlowStart, ACK of seq " << seq << "; update cwnd to " << m_cWnd << "; ssthresh " << m_ssThresh);
-    }
-  else
-    { // Congestion avoidance mode, increase by (segSize*segSize)/cwnd. (RFC2581, sec.3.1)
-      // To increase cwnd for one segSize per RTT, it should be (ackBytes*segSize)/cwnd
-      double adder = static_cast<double> (m_segmentSize * m_segmentSize) / m_cWnd.Get ();
-      adder = std::max (1.0, adder);
-      m_cWnd += static_cast<uint32_t> (adder);
-      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-
-  // Complete newAck processing
-  TcpSocketBase::NewAck (seq);
-}
-
-/* Cut cwnd and enter fast recovery mode upon triple dupack */
-void
-TcpNewReno::DupAck (const TcpHeader& t, uint32_t count)
-{
-  NS_LOG_FUNCTION (this << count);
-  if (count == m_retxThresh && !m_inFastRec)
-    { // triple duplicate ack triggers fast retransmit (RFC2582 sec.3 bullet #1)
-      m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
-      m_cWnd = m_ssThresh + 3 * m_segmentSize;
-      m_recover = m_highTxMark;
-      m_inFastRec = true;
-      NS_LOG_INFO ("Triple dupack. Enter fast recovery mode. Reset cwnd to " << m_cWnd <<
-                   ", ssthresh to " << m_ssThresh << " at fast recovery seqnum " << m_recover);
-      DoRetransmit ();
-    }
-  else if (m_inFastRec)
-    { // Increase cwnd for every additional dupack (RFC2582, sec.3 bullet #3)
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("Dupack in fast recovery mode. Increase cwnd to " << m_cWnd);
-      if (!m_sendPendingDataEvent.IsRunning ())
-        {
-          SendPendingData (m_connected);
-        }
-    }
-  else if (!m_inFastRec && m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
-    { // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
-      NS_LOG_INFO ("Limited transmit");
-      uint32_t sz = SendDataPacket (m_nextTxSequence, m_segmentSize, true);
-      m_nextTxSequence += sz;                    // Advance next tx sequence
-    };
-}
-
-/* Retransmit timeout */
-void
-TcpNewReno::Retransmit (void)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC (this << " ReTxTimeout Expired at time " << Simulator::Now ().GetSeconds ());
-  m_inFastRec = false;
-
-  // If erroneous timeout in closed/timed-wait state, just return
-  if (m_state == CLOSED || m_state == TIME_WAIT) return;
-  // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
-
-  // According to RFC2581 sec.3.1, upon RTO, ssthresh is set to half of flight
-  // size and cwnd is set to 1*MSS, then the lost packet is retransmitted and
-  // TCP back to slow start
-  m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
-  m_cWnd = m_segmentSize;
-  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
-  NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
-               ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
-  DoRetransmit ();                          // Retransmit the packet
-}
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-newreno.h ns-3.25/src/internet/model/tcp-newreno.h
--- ns-3.24.1/src/internet/model/tcp-newreno.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-newreno.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,70 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#ifndef TCP_NEWRENO_H
-#define TCP_NEWRENO_H
-
-#include "tcp-socket-base.h"
-
-namespace ns3 {
-
-/**
- * \ingroup socket
- * \ingroup tcp
- *
- * \brief An implementation of a stream socket using TCP.
- *
- * This class contains the NewReno implementation of TCP, as of \RFC{2582}.
- */
-class TcpNewReno : public TcpSocketBase
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-  /**
-   * Create an unbound tcp socket.
-   */
-  TcpNewReno (void);
-  /**
-   * \brief Copy constructor
-   * \param sock the object to copy
-   */
-  TcpNewReno (const TcpNewReno& sock);
-  virtual ~TcpNewReno (void);
-
-protected:
-  virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpNewReno> to clone me
-  virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
-  virtual void DupAck (const TcpHeader& t, uint32_t count);  // Halving cwnd and reset nextTxSequence
-  virtual void Retransmit (void); // Exit fast recovery upon retransmit timeout
-
-protected:
-  SequenceNumber32       m_recover;      //!< Previous highest Tx seqnum for fast recovery
-  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
-  bool                   m_inFastRec;    //!< currently in fast recovery
-  bool                   m_limitedTx;    //!< perform limited transmit
-};
-
-} // namespace ns3
-
-#endif /* TCP_NEWRENO_H */
diff -Naur ns-3.24.1/src/internet/model/tcp-reno.cc ns-3.25/src/internet/model/tcp-reno.cc
--- ns-3.24.1/src/internet/model/tcp-reno.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-reno.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,160 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#define NS_LOG_APPEND_CONTEXT \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
-
-#include "tcp-reno.h"
-#include "ns3/log.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/simulator.h"
-#include "ns3/abort.h"
-#include "ns3/node.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("TcpReno");
-
-NS_OBJECT_ENSURE_REGISTERED (TcpReno);
-
-TypeId
-TcpReno::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::TcpReno")
-    .SetParent<TcpSocketBase> ()
-    .SetGroupName ("Internet")
-    .AddConstructor<TcpReno> ()
-    .AddAttribute ("ReTxThreshold", "Threshold for fast retransmit",
-                    UintegerValue (3),
-                    MakeUintegerAccessor (&TcpReno::m_retxThresh),
-                    MakeUintegerChecker<uint32_t> ())
-  ;
-  return tid;
-}
-
-TcpReno::TcpReno (void) : m_retxThresh (3), m_inFastRec (false)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-TcpReno::TcpReno (const TcpReno& sock)
-  : TcpSocketBase (sock),
-    m_retxThresh (sock.m_retxThresh),
-    m_inFastRec (false)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("Invoked the copy constructor");
-}
-
-TcpReno::~TcpReno (void)
-{
-}
-
-Ptr<TcpSocketBase>
-TcpReno::Fork (void)
-{
-  return CopyObject<TcpReno> (this);
-}
-
-/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
-void
-TcpReno::NewAck (const SequenceNumber32& seq)
-{
-  NS_LOG_FUNCTION (this << seq);
-  NS_LOG_LOGIC ("TcpReno receieved ACK for seq " << seq <<
-                " cwnd " << m_cWnd <<
-                " ssthresh " << m_ssThresh);
-
-  // Check for exit condition of fast recovery
-  if (m_inFastRec)
-    { // RFC2001, sec.4; RFC2581, sec.3.2
-      // First new ACK after fast recovery: reset cwnd
-      m_cWnd = m_ssThresh;
-      m_inFastRec = false;
-      NS_LOG_INFO ("Reset cwnd to " << m_cWnd);
-    };
-
-  // Increase of cwnd based on current phase (slow start or congestion avoidance)
-  if (m_cWnd < m_ssThresh)
-    { // Slow start mode, add one segSize to cWnd. Default m_ssThresh is 65535. (RFC2001, sec.1)
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-  else
-    { // Congestion avoidance mode, increase by (segSize*segSize)/cwnd. (RFC2581, sec.3.1)
-      // To increase cwnd for one segSize per RTT, it should be (ackBytes*segSize)/cwnd
-      double adder = static_cast<double> (m_segmentSize * m_segmentSize) / m_cWnd.Get ();
-      adder = std::max (1.0, adder);
-      m_cWnd += static_cast<uint32_t> (adder);
-      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-
-  // Complete newAck processing
-  TcpSocketBase::NewAck (seq);
-}
-
-// Fast recovery and fast retransmit
-void
-TcpReno::DupAck (const TcpHeader& t, uint32_t count)
-{
-  NS_LOG_FUNCTION (this << "t " << count);
-  if (count == m_retxThresh && !m_inFastRec)
-    { // triple duplicate ack triggers fast retransmit (RFC2581, sec.3.2)
-      m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
-      m_cWnd = m_ssThresh + 3 * m_segmentSize;
-      m_inFastRec = true;
-      NS_LOG_INFO ("Triple dupack. Reset cwnd to " << m_cWnd << ", ssthresh to " << m_ssThresh);
-      DoRetransmit ();
-    }
-  else if (m_inFastRec)
-    { // In fast recovery, inc cwnd for every additional dupack (RFC2581, sec.3.2)
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("Increased cwnd to " << m_cWnd);
-      if (!m_sendPendingDataEvent.IsRunning ())
-        {
-          SendPendingData (m_connected);
-        }
-    };
-}
-
-// Retransmit timeout
-void TcpReno::Retransmit (void)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC (this << " ReTxTimeout Expired at time " << Simulator::Now ().GetSeconds ());
-  m_inFastRec = false;
-
-  // If erroneous timeout in closed/timed-wait state, just return
-  if (m_state == CLOSED || m_state == TIME_WAIT) return;
-  // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
-
-  // According to RFC2581 sec.3.1, upon RTO, ssthresh is set to half of flight
-  // size and cwnd is set to 1*MSS, then the lost packet is retransmitted and
-  // TCP back to slow start
-  m_ssThresh = std::max (2 * m_segmentSize, BytesInFlight () / 2);
-  m_cWnd = m_segmentSize;
-  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
-  NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
-               ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
-  DoRetransmit ();                          // Retransmit the packet
-}
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-reno.h ns-3.25/src/internet/model/tcp-reno.h
--- ns-3.24.1/src/internet/model/tcp-reno.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-reno.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,70 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#ifndef TCP_RENO_H
-#define TCP_RENO_H
-
-#include "tcp-socket-base.h"
-
-namespace ns3 {
-
-/**
- * \ingroup socket
- * \ingroup tcp
- *
- * \brief An implementation of a stream socket using TCP.
- *
- * This class contains the Reno implementation of TCP, according to \RFC{2581},
- * except sec.4.1 "re-starting idle connections", which we do not detect for
- * idleness and thus no slow start upon resumption.
- */
-class TcpReno : public TcpSocketBase
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-  /**
-   * Create an unbound tcp socket.
-   */
-  TcpReno (void);
-  /**
-   * \brief Copy constructor
-   * \param sock the object to copy
-   */
-  TcpReno (const TcpReno& sock);
-  virtual ~TcpReno (void);
-
-protected:
-  virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpReno> to clone me
-  virtual void NewAck (const SequenceNumber32& seq); // Inc cwnd and call NewAck() of parent
-  virtual void DupAck (const TcpHeader& t, uint32_t count);  // Fast retransmit
-  virtual void Retransmit (void); // Retransmit timeout
-
-protected:
-  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
-  bool                   m_inFastRec;    //!< currently in fast recovery
-};
-
-} // namespace ns3
-
-#endif /* TCP_RENO_H */
diff -Naur ns-3.24.1/src/internet/model/tcp-rfc793.cc ns-3.25/src/internet/model/tcp-rfc793.cc
--- ns-3.24.1/src/internet/model/tcp-rfc793.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-rfc793.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,107 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#include "tcp-rfc793.h"
-#include "ns3/log.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("TcpRfc793");
-
-NS_OBJECT_ENSURE_REGISTERED (TcpRfc793);
-
-TypeId
-TcpRfc793::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::TcpRfc793")
-    .SetParent<TcpSocketBase> ()
-    .SetGroupName ("Internet")
-    .AddConstructor<TcpRfc793> ()
-  ;
-  return tid;
-}
-
-TcpRfc793::TcpRfc793 (void)
-{
-  NS_LOG_FUNCTION (this);
-  SetDelAckMaxCount (0);  // Delayed ACK is not in RFC793
-}
-
-TcpRfc793::TcpRfc793 (const TcpRfc793& sock) : TcpSocketBase (sock)
-{
-}
-
-TcpRfc793::~TcpRfc793 (void)
-{
-}
-
-Ptr<TcpSocketBase>
-TcpRfc793::Fork (void)
-{
-  return CopyObject<TcpRfc793> (this);
-}
-
-void
-TcpRfc793::DupAck (const TcpHeader& t, uint32_t count)
-{
-}
-
-void
-TcpRfc793::SetInitialSSThresh (uint32_t threshold)
-{
-  NS_LOG_WARN ("DoD TCP does not perform slow start");
-}
-
-uint32_t
-TcpRfc793::GetInitialSSThresh (void) const
-{
-  NS_LOG_WARN ("DoD TCP does not perform slow start");
-  return 0;
-}
-
-void
-TcpRfc793::SetInitialCwnd (uint32_t cwnd)
-{
-  NS_LOG_WARN ("DoD TCP does not have congestion window");
-}
-
-uint32_t
-TcpRfc793::GetInitialCwnd (void) const
-{
-  NS_LOG_WARN ("DoD TCP does not have congestion window");
-  return 0;
-}
-
-uint32_t
-TcpRfc793::Window ()
-{
-  NS_LOG_FUNCTION (this);
-  return m_rWnd;
-}
-
-void
-TcpRfc793::ScaleSsThresh (uint8_t scaleFactor)
-{
-  NS_LOG_WARN ("DoD TCP does not perform slow start");
-  return;
-}
-
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-rfc793.h ns-3.25/src/internet/model/tcp-rfc793.h
--- ns-3.24.1/src/internet/model/tcp-rfc793.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-rfc793.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,73 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#ifndef TCP_RFC793_H
-#define TCP_RFC793_H
-
-#include "tcp-socket-base.h"
-
-namespace ns3 {
-
-/**
- * \ingroup socket
- * \ingroup tcp
- *
- * \brief An implementation of a stream socket using TCP.
- *
- * This class contains an \RFC{793} implementation of TCP, as well as a sockets
- * interface for talking to TCP.  This serves as a base for other TCP functions
- * where the sliding window mechanism is handled here.  This class provides
- * connection orientation and sliding window flow control.
- */
-class TcpRfc793 : public TcpSocketBase
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-  /**
-   * Create an unbound tcp socket.
-   */
-  TcpRfc793 (void);
-  /**
-   * \brief Copy constructor
-   * \param sock the object to copy
-   */
-  TcpRfc793 (const TcpRfc793& sock);
-  virtual ~TcpRfc793 (void);
-
-protected:
-  virtual Ptr<TcpSocketBase> Fork (); // Call CopyObject<TcpRfc793> to clone me
-  virtual void DupAck (const TcpHeader& t, uint32_t count);
-  virtual void     SetInitialSSThresh (uint32_t threshold);
-  virtual uint32_t GetInitialSSThresh (void) const;
-  virtual void     SetInitialCwnd (uint32_t cwnd);
-  virtual uint32_t GetInitialCwnd (void) const;
-
-  virtual uint32_t Window (void);
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-
-};
-
-} // namespace ns3
-
-#endif /* TCP_RFC793_H */
diff -Naur ns-3.24.1/src/internet/model/tcp-rx-buffer.h ns-3.25/src/internet/model/tcp-rx-buffer.h
--- ns-3.24.1/src/internet/model/tcp-rx-buffer.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-rx-buffer.h	2016-03-23 21:36:53.000000000 -0700
@@ -124,7 +124,8 @@
    * \returns a packet
    */
   Ptr<Packet> Extract (uint32_t maxSize);
-public:
+
+private:
   /// container for data stored in the buffer
   typedef std::map<SequenceNumber32, Ptr<Packet> >::iterator BufIterator;
   TracedValue<SequenceNumber32> m_nextRxSeq; //!< Seqnum of the first missing byte in data (RCV.NXT)
diff -Naur ns-3.24.1/src/internet/model/tcp-socket-base.cc ns-3.25/src/internet/model/tcp-socket-base.cc
--- ns-3.24.1/src/internet/model/tcp-socket-base.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-socket-base.cc	2016-03-23 21:36:53.000000000 -0700
@@ -20,7 +20,7 @@
  */
 
 #define NS_LOG_APPEND_CONTEXT \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
+  if (m_node) { std::clog << " [node " << m_node->GetId () << "] "; }
 
 #include "ns3/abort.h"
 #include "ns3/node.h"
@@ -66,6 +66,7 @@
   static TypeId tid = TypeId ("ns3::TcpSocketBase")
     .SetParent<TcpSocket> ()
     .SetGroupName ("Internet")
+    .AddConstructor<TcpSocketBase> ()
 //    .AddAttribute ("TcpState", "State in TCP state machine",
 //                   TypeId::ATTR_GET,
 //                   EnumValue (CLOSED),
@@ -98,26 +99,35 @@
                    MakeBooleanChecker ())
     .AddAttribute ("MinRto",
                    "Minimum retransmit timeout value",
-                   TimeValue (Seconds (1.0)), // RFC 6298 says min RTO=1 sec, but Linux uses 200ms. See http://www.postel.org/pipermail/end2end-interest/2004-November/004402.html
+                   TimeValue (Seconds (1.0)), // RFC 6298 says min RTO=1 sec, but Linux uses 200ms.
+                   // See http://www.postel.org/pipermail/end2end-interest/2004-November/004402.html
                    MakeTimeAccessor (&TcpSocketBase::SetMinRto,
                                      &TcpSocketBase::GetMinRto),
-                                     MakeTimeChecker ())
+                   MakeTimeChecker ())
     .AddAttribute ("ClockGranularity",
                    "Clock Granularity used in RTO calculations",
                    TimeValue (MilliSeconds (1)), // RFC6298 suggest to use fine clock granularity
                    MakeTimeAccessor (&TcpSocketBase::SetClockGranularity,
                                      &TcpSocketBase::GetClockGranularity),
-                                     MakeTimeChecker ())
+                   MakeTimeChecker ())
     .AddAttribute ("TxBuffer",
                    "TCP Tx buffer",
                    PointerValue (),
                    MakePointerAccessor (&TcpSocketBase::GetTxBuffer),
-                                       MakePointerChecker<TcpTxBuffer> ())
+                   MakePointerChecker<TcpTxBuffer> ())
     .AddAttribute ("RxBuffer",
                    "TCP Rx buffer",
                    PointerValue (),
                    MakePointerAccessor (&TcpSocketBase::GetRxBuffer),
                    MakePointerChecker<TcpRxBuffer> ())
+    .AddAttribute ("ReTxThreshold", "Threshold for fast retransmit",
+                   UintegerValue (3),
+                   MakeUintegerAccessor (&TcpSocketBase::m_retxThresh),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("LimitedTransmit", "Enable limited transmit",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&TcpSocketBase::m_limitedTx),
+                   MakeBooleanChecker ())
     .AddTraceSource ("RTO",
                      "Retransmission timeout",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_rto),
@@ -138,10 +148,18 @@
                      "TCP state",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_state),
                      "ns3::TcpStatesTracedValueCallback")
+    .AddTraceSource ("CongState",
+                     "TCP Congestion machine state",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_congStateTrace),
+                     "ns3::TcpSocketState::TcpCongStatesTracedValueCallback")
     .AddTraceSource ("RWND",
                      "Remote side's flow control window",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_rWnd),
                      "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("BytesInFlight",
+                     "Socket estimation of bytes in flight",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_bytesInFlight),
+                     "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("HighestRxSequence",
                      "Highest sequence number received from peer",
                      MakeTraceSourceAccessor (&TcpSocketBase::m_highRxMark),
@@ -152,29 +170,111 @@
                      "ns3::SequenceNumber32TracedValueCallback")
     .AddTraceSource ("CongestionWindow",
                      "The TCP connection's congestion window",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_cWnd),
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_cWndTrace),
                      "ns3::TracedValueCallback::Uint32")
     .AddTraceSource ("SlowStartThreshold",
                      "TCP slow start threshold (bytes)",
-                     MakeTraceSourceAccessor (&TcpSocketBase::m_ssThresh),
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_ssThTrace),
                      "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("Tx",
+                     "Send tcp packet to IP protocol",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_txTrace),
+                     "ns3::TcpSocketBase::TcpTxRxTracedCallback")
+    .AddTraceSource ("Rx",
+                     "Receive tcp packet from IP protocol",
+                     MakeTraceSourceAccessor (&TcpSocketBase::m_rxTrace),
+                     "ns3::TcpSocketBase::TcpTxRxTracedCallback")
   ;
   return tid;
 }
 
+TypeId
+TcpSocketBase::GetInstanceTypeId () const
+{
+  return TcpSocketBase::GetTypeId ();
+}
+
+
+TypeId
+TcpSocketState::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpSocketState")
+    .SetParent<Object> ()
+    .SetGroupName ("Internet")
+    .AddConstructor <TcpSocketState> ()
+    .AddTraceSource ("CongestionWindow",
+                     "The TCP connection's congestion window",
+                     MakeTraceSourceAccessor (&TcpSocketState::m_cWnd),
+                     "ns3::TracedValue::Uint32Callback")
+    .AddTraceSource ("SlowStartThreshold",
+                     "TCP slow start threshold (bytes)",
+                     MakeTraceSourceAccessor (&TcpSocketState::m_ssThresh),
+                     "ns3::TracedValue::Uint32Callback")
+    .AddTraceSource ("CongState",
+                     "TCP Congestion machine state",
+                     MakeTraceSourceAccessor (&TcpSocketState::m_congState),
+                     "ns3::TracedValue::TcpCongStatesTracedValueCallback")
+  ;
+  return tid;
+}
+
+TcpSocketState::TcpSocketState (void)
+  : Object (),
+    m_cWnd (0),
+    m_ssThresh (0),
+    m_initialCWnd (0),
+    m_initialSsThresh (0),
+    m_segmentSize (0),
+    m_congState (CA_OPEN)
+{
+}
+
+TcpSocketState::TcpSocketState (const TcpSocketState &other)
+  : Object (other),
+    m_cWnd (other.m_cWnd),
+    m_ssThresh (other.m_ssThresh),
+    m_initialCWnd (other.m_initialCWnd),
+    m_initialSsThresh (other.m_initialSsThresh),
+    m_segmentSize (other.m_segmentSize),
+    m_congState (other.m_congState)
+{
+}
+
+const char* const
+TcpSocketState::TcpCongStateName[TcpSocketState::CA_LAST_STATE] =
+{
+  "CA_OPEN", "CA_DISORDER", "CA_CWR", "CA_RECOVERY", "CA_LOSS"
+};
+
 TcpSocketBase::TcpSocketBase (void)
-  : m_dupAckCount (0),
+  : TcpSocket (),
+    m_retxEvent (),
+    m_lastAckEvent (),
+    m_delAckEvent (),
+    m_persistEvent (),
+    m_timewaitEvent (),
+    m_dupAckCount (0),
     m_delAckCount (0),
+    m_delAckMaxCount (0),
+    m_noDelay (false),
+    m_synCount (0),
+    m_synRetries (0),
+    m_dataRetrCount (0),
+    m_dataRetries (0),
+    m_rto (Seconds (0.0)),
+    m_minRto (Time::Max ()),
+    m_clockGranularity (Seconds (0.001)),
+    m_lastRtt (Seconds (0.0)),
+    m_delAckTimeout (Seconds (0.0)),
+    m_persistTimeout (Seconds (0.0)),
+    m_cnTimeout (Seconds (0.0)),
     m_endPoint (0),
     m_endPoint6 (0),
     m_node (0),
     m_tcp (0),
     m_rtt (0),
-    m_nextTxSequence (0),
-    // Change this for non-zero initial sequence number
+    m_nextTxSequence (0), // Change this for non-zero initial sequence number
     m_highTxMark (0),
-    m_rxBuffer (0),
-    m_txBuffer (0),
     m_state (CLOSED),
     m_errno (ERROR_NOTERROR),
     m_closeNotified (false),
@@ -182,20 +282,45 @@
     m_shutdownSend (false),
     m_shutdownRecv (false),
     m_connected (false),
-    m_segmentSize (0),
-    // For attribute initialization consistency (quiet valgrind)
+    m_msl (0),
+    m_maxWinSize (0),
     m_rWnd (0),
     m_highRxMark (0),
+    m_highTxAck (0),
     m_highRxAckMark (0),
-    m_sndScaleFactor (0),
-    m_rcvScaleFactor (0),
+    m_bytesAckedNotProcessed (0),
+    m_bytesInFlight (0),
+    m_winScalingEnabled (false),
+    m_rcvWindShift (0),
+    m_sndWindShift (0),
     m_timestampEnabled (true),
-    m_timestampToEcho (0)
-
+    m_timestampToEcho (0),
+    m_sendPendingDataEvent (),
+    m_recover (0), // Set to the initial sequence number
+    m_retxThresh (3),
+    m_limitedTx (false),
+    m_retransOut (0),
+    m_congestionControl (0),
+    m_isFirstPartialAck (true)
 {
   NS_LOG_FUNCTION (this);
   m_rxBuffer = CreateObject<TcpRxBuffer> ();
   m_txBuffer = CreateObject<TcpTxBuffer> ();
+  m_tcb      = CreateObject<TcpSocketState> ();
+
+  bool ok;
+
+  ok = m_tcb->TraceConnectWithoutContext ("CongestionWindow",
+                                          MakeCallback (&TcpSocketBase::UpdateCwnd, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("SlowStartThreshold",
+                                          MakeCallback (&TcpSocketBase::UpdateSsThresh, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("CongState",
+                                          MakeCallback (&TcpSocketBase::UpdateCongState, this));
+  NS_ASSERT (ok == true);
 }
 
 TcpSocketBase::TcpSocketBase (const TcpSocketBase& sock)
@@ -205,7 +330,14 @@
     m_delAckCount (0),
     m_delAckMaxCount (sock.m_delAckMaxCount),
     m_noDelay (sock.m_noDelay),
-    m_cnRetries (sock.m_cnRetries),
+    m_synCount (sock.m_synCount),
+    m_synRetries (sock.m_synRetries),
+    m_dataRetrCount (sock.m_dataRetrCount),
+    m_dataRetries (sock.m_dataRetries),
+    m_rto (sock.m_rto),
+    m_minRto (sock.m_minRto),
+    m_clockGranularity (sock.m_clockGranularity),
+    m_lastRtt (sock.m_lastRtt),
     m_delAckTimeout (sock.m_delAckTimeout),
     m_persistTimeout (sock.m_persistTimeout),
     m_cnTimeout (sock.m_cnTimeout),
@@ -213,7 +345,6 @@
     m_endPoint6 (0),
     m_node (sock.m_node),
     m_tcp (sock.m_tcp),
-    m_rtt (0),
     m_nextTxSequence (sock.m_nextTxSequence),
     m_highTxMark (sock.m_highTxMark),
     m_state (sock.m_state),
@@ -224,21 +355,24 @@
     m_shutdownRecv (sock.m_shutdownRecv),
     m_connected (sock.m_connected),
     m_msl (sock.m_msl),
-    m_segmentSize (sock.m_segmentSize),
     m_maxWinSize (sock.m_maxWinSize),
     m_rWnd (sock.m_rWnd),
     m_highRxMark (sock.m_highRxMark),
     m_highRxAckMark (sock.m_highRxAckMark),
-    m_cWnd (sock.m_cWnd),
-    m_ssThresh (sock.m_ssThresh),
-    m_initialCWnd (sock.m_initialCWnd),
-    m_initialSsThresh (sock.m_initialSsThresh),
+    m_bytesAckedNotProcessed (sock.m_bytesAckedNotProcessed),
+    m_bytesInFlight (sock.m_bytesInFlight),
     m_winScalingEnabled (sock.m_winScalingEnabled),
-    m_sndScaleFactor (sock.m_sndScaleFactor),
-    m_rcvScaleFactor (sock.m_rcvScaleFactor),
+    m_rcvWindShift (sock.m_rcvWindShift),
+    m_sndWindShift (sock.m_sndWindShift),
     m_timestampEnabled (sock.m_timestampEnabled),
-    m_timestampToEcho (sock.m_timestampToEcho)
-
+    m_timestampToEcho (sock.m_timestampToEcho),
+    m_recover (sock.m_recover),
+    m_retxThresh (sock.m_retxThresh),
+    m_limitedTx (sock.m_limitedTx),
+    m_retransOut (sock.m_retransOut),
+    m_isFirstPartialAck (sock.m_isFirstPartialAck),
+    m_txTrace (sock.m_txTrace),
+    m_rxTrace (sock.m_rxTrace)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_LOGIC ("Invoked the copy constructor");
@@ -257,6 +391,25 @@
   SetRecvCallback (vPS);
   m_txBuffer = CopyObject (sock.m_txBuffer);
   m_rxBuffer = CopyObject (sock.m_rxBuffer);
+  m_tcb = CopyObject (sock.m_tcb);
+  if (sock.m_congestionControl)
+    {
+      m_congestionControl = sock.m_congestionControl->Fork ();
+    }
+
+  bool ok;
+
+  ok = m_tcb->TraceConnectWithoutContext ("CongestionWindow",
+                                          MakeCallback (&TcpSocketBase::UpdateCwnd, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("SlowStartThreshold",
+                                          MakeCallback (&TcpSocketBase::UpdateSsThresh, this));
+  NS_ASSERT (ok == true);
+
+  ok = m_tcb->TraceConnectWithoutContext ("CongState",
+                                          MakeCallback (&TcpSocketBase::UpdateCongState, this));
+  NS_ASSERT (ok == true);
 }
 
 TcpSocketBase::~TcpSocketBase (void)
@@ -343,7 +496,7 @@
       return -1;
     }
 
-  m_tcp->AddSocket(this);
+  m_tcp->AddSocket (this);
 
   return SetupCallback ();
 }
@@ -359,7 +512,7 @@
       return -1;
     }
 
-  m_tcp->AddSocket(this);
+  m_tcp->AddSocket (this);
 
   return SetupCallback ();
 }
@@ -429,7 +582,7 @@
       return -1;
     }
 
-  m_tcp->AddSocket(this);
+  m_tcp->AddSocket (this);
 
   NS_LOG_LOGIC ("TcpSocketBase " << this << " got an endpoint: " << m_endPoint);
 
@@ -437,46 +590,33 @@
 }
 
 void
-TcpSocketBase::InitializeCwnd (void)
-{
-  m_cWnd = m_initialCWnd * m_segmentSize;
-  m_ssThresh = m_initialSsThresh;
-}
-
-void
 TcpSocketBase::SetInitialSSThresh (uint32_t threshold)
 {
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED,
-    "TcpSocketBase::SetSSThresh() cannot change initial ssThresh after connection started.");
+  NS_ABORT_MSG_UNLESS ( (m_state == CLOSED) || threshold == m_tcb->m_initialSsThresh,
+                        "TcpSocketBase::SetSSThresh() cannot change initial ssThresh after connection started.");
 
-  m_initialSsThresh = threshold;
+  m_tcb->m_initialSsThresh = threshold;
 }
 
 uint32_t
 TcpSocketBase::GetInitialSSThresh (void) const
 {
-  return m_initialSsThresh;
+  return m_tcb->m_initialSsThresh;
 }
 
 void
 TcpSocketBase::SetInitialCwnd (uint32_t cwnd)
 {
-  NS_ABORT_MSG_UNLESS (m_state == CLOSED,
-    "TcpSocketBase::SetInitialCwnd() cannot change initial cwnd after connection started.");
+  NS_ABORT_MSG_UNLESS ( (m_state == CLOSED) || cwnd == m_tcb->m_initialCWnd,
+                        "TcpSocketBase::SetInitialCwnd() cannot change initial cwnd after connection started.");
 
-  m_initialCWnd = cwnd;
+  m_tcb->m_initialCWnd = cwnd;
 }
 
 uint32_t
 TcpSocketBase::GetInitialCwnd (void) const
 {
-  return m_initialCWnd;
-}
-
-void
-TcpSocketBase::ScaleSsThresh (uint8_t scaleFactor)
-{
-  m_ssThresh <<= scaleFactor;
+  return m_tcb->m_initialCWnd;
 }
 
 /* Inherit from Socket class: Initiate connection to a remote address:port */
@@ -485,8 +625,6 @@
 {
   NS_LOG_FUNCTION (this << address);
 
-  InitializeCwnd ();
-
   // If haven't do so, Bind() this socket first
   if (InetSocketAddress::IsMatchingType (address) && m_endPoint6 == 0)
     {
@@ -505,7 +643,8 @@
 
       // Get the appropriate local address and port number from the routing protocol and set up endpoint
       if (SetupEndpoint () != 0)
-        { // Route to destination does not exist
+        {
+          NS_LOG_ERROR ("Route to destination does not exist ?!");
           return -1;
         }
     }
@@ -547,7 +686,8 @@
 
   // Re-initialize parameters in case this socket is being reused after CLOSE
   m_rtt->Reset ();
-  m_cnCount = m_cnRetries;
+  m_synCount = m_synRetries;
+  m_dataRetrCount = m_dataRetries;
 
   // DoConnect() will do state-checking and send a SYN packet
   return DoConnect ();
@@ -559,8 +699,6 @@
 {
   NS_LOG_FUNCTION (this);
 
-  InitializeCwnd ();
-
   // Linux quits EINVAL if we're not in CLOSED state, so match what they do
   if (m_state != CLOSED)
     {
@@ -568,7 +706,7 @@
       return -1;
     }
   // In other cases, set the state to LISTEN and done
-  NS_LOG_INFO ("CLOSED -> LISTEN");
+  NS_LOG_DEBUG ("CLOSED -> LISTEN");
   m_state = LISTEN;
   return 0;
 }
@@ -583,11 +721,12 @@
   /// \bugid{426} claims we should send reset in this case.
   if (m_rxBuffer->Size () != 0)
     {
-      NS_LOG_INFO ("Socket " << this << " << unread rx data during close.  Sending reset");
+      NS_LOG_WARN ("Socket " << this << " << unread rx data during close.  Sending reset." <<
+                   "This is probably due to a bad sink application; check its code");
       SendRST ();
       return 0;
     }
- 
+
   if (m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
     { // App close with pending data must wait until all data transmitted
       if (m_closeOnEmpty == false)
@@ -605,7 +744,7 @@
 TcpSocketBase::ShutdownSend (void)
 {
   NS_LOG_FUNCTION (this);
-  
+
   //this prevents data from being added to the buffer
   m_shutdownSend = true;
   m_closeOnEmpty = true;
@@ -615,22 +754,22 @@
     {
       if (m_state == ESTABLISHED || m_state == CLOSE_WAIT)
         {
-          NS_LOG_INFO("Emtpy tx buffer, send fin");
-          SendEmptyPacket (TcpHeader::FIN);  
+          NS_LOG_INFO ("Emtpy tx buffer, send fin");
+          SendEmptyPacket (TcpHeader::FIN);
 
           if (m_state == ESTABLISHED)
             { // On active close: I am the first one to send FIN
-              NS_LOG_INFO ("ESTABLISHED -> FIN_WAIT_1");
+              NS_LOG_DEBUG ("ESTABLISHED -> FIN_WAIT_1");
               m_state = FIN_WAIT_1;
             }
           else
             { // On passive close: Peer sent me FIN already
-              NS_LOG_INFO ("CLOSE_WAIT -> LAST_ACK");
+              NS_LOG_DEBUG ("CLOSE_WAIT -> LAST_ACK");
               m_state = LAST_ACK;
-            }  
+            }
         }
     }
- 
+
   return 0;
 }
 
@@ -669,7 +808,9 @@
         { // Try to send the data out
           if (!m_sendPendingDataEvent.IsRunning ())
             {
-              m_sendPendingDataEvent = Simulator::Schedule ( TimeStep (1), &TcpSocketBase::SendPendingData, this, m_connected);
+              m_sendPendingDataEvent = Simulator::Schedule (TimeStep (1),
+                                                            &TcpSocketBase::SendPendingData,
+                                                            this, m_connected);
             }
         }
       return p->GetSize ();
@@ -779,6 +920,35 @@
   return 0;
 }
 
+int
+TcpSocketBase::GetPeerName (Address &address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (!m_endPoint && !m_endPoint6)
+    {
+      m_errno = ERROR_NOTCONN;
+      return -1;
+    }
+
+  if (m_endPoint)
+    {
+      address = InetSocketAddress (m_endPoint->GetPeerAddress (),
+                                   m_endPoint->GetPeerPort ());
+    }
+  else if (m_endPoint6)
+    {
+      address = Inet6SocketAddress (m_endPoint6->GetPeerAddress (),
+                                    m_endPoint6->GetPeerPort ());
+    }
+  else
+    {
+      NS_ASSERT (false);
+    }
+
+  return 0;
+}
+
 /* Inherit from Socket class: Bind this socket to the specified NetDevice */
 void
 TcpSocketBase::BindToNetDevice (Ptr<NetDevice> netdevice)
@@ -846,7 +1016,7 @@
   if (m_state == CLOSED || m_state == LISTEN || m_state == SYN_SENT || m_state == LAST_ACK || m_state == CLOSE_WAIT)
     { // send a SYN packet and change state into SYN_SENT
       SendEmptyPacket (TcpHeader::SYN);
-      NS_LOG_INFO (TcpStateName[m_state] << " -> SYN_SENT");
+      NS_LOG_DEBUG (TcpStateName[m_state] << " -> SYN_SENT");
       m_state = SYN_SENT;
     }
   else if (m_state != TIME_WAIT)
@@ -870,13 +1040,13 @@
     case ESTABLISHED:
       // send FIN to close the peer
       SendEmptyPacket (TcpHeader::FIN);
-      NS_LOG_INFO ("ESTABLISHED -> FIN_WAIT_1");
+      NS_LOG_DEBUG ("ESTABLISHED -> FIN_WAIT_1");
       m_state = FIN_WAIT_1;
       break;
     case CLOSE_WAIT:
       // send FIN+ACK to close the peer
       SendEmptyPacket (TcpHeader::FIN | TcpHeader::ACK);
-      NS_LOG_INFO ("CLOSE_WAIT -> LAST_ACK");
+      NS_LOG_DEBUG ("CLOSE_WAIT -> LAST_ACK");
       m_state = LAST_ACK;
       break;
     case SYN_SENT:
@@ -913,9 +1083,9 @@
       m_closeNotified = true;
     }
 
-  NS_LOG_INFO (TcpStateName[m_state] << " -> CLOSED");
+  NS_LOG_DEBUG (TcpStateName[m_state] << " -> CLOSED");
   m_state = CLOSED;
-  DeallocateEndPoint ();  
+  DeallocateEndPoint ();
 }
 
 
@@ -990,8 +1160,8 @@
 
 void
 TcpSocketBase::ForwardIcmp6 (Ipv6Address icmpSource, uint8_t icmpTtl,
-                            uint8_t icmpType, uint8_t icmpCode,
-                            uint32_t icmpInfo)
+                             uint8_t icmpType, uint8_t icmpCode,
+                             uint32_t icmpInfo)
 {
   NS_LOG_FUNCTION (this << icmpSource << (uint32_t)icmpTtl << (uint32_t)icmpType <<
                    (uint32_t)icmpCode << icmpInfo);
@@ -1008,26 +1178,18 @@
   // Peel off TCP header and do validity checking
   TcpHeader tcpHeader;
   uint32_t bytesRemoved = packet->RemoveHeader (tcpHeader);
+  SequenceNumber32 seq = tcpHeader.GetSequenceNumber ();
   if (bytesRemoved == 0 || bytesRemoved > 60)
     {
       NS_LOG_ERROR ("Bytes removed: " << bytesRemoved << " invalid");
       return; // Discard invalid packet
     }
-
-  ReadOptions (tcpHeader);
-
-  if (tcpHeader.GetFlags () & TcpHeader::ACK)
-    {
-      EstimateRtt (tcpHeader);
-    }
-
-  // Discard fully out of range data packets
-  if (packet->GetSize ()
-      && OutOfRange (tcpHeader.GetSequenceNumber (), tcpHeader.GetSequenceNumber () + packet->GetSize ()))
+  else if (packet->GetSize () > 0 && OutOfRange (seq, seq + packet->GetSize ()))
     {
+      // Discard fully out of range data packets
       NS_LOG_LOGIC ("At state " << TcpStateName[m_state] <<
-                    " received packet of seq [" << tcpHeader.GetSequenceNumber () <<
-                    ":" << tcpHeader.GetSequenceNumber () + packet->GetSize () <<
+                    " received packet of seq [" << seq <<
+                    ":" << seq + packet->GetSize () <<
                     ") out of range [" << m_rxBuffer->NextRxSequence () << ":" <<
                     m_rxBuffer->MaxRxSequence () << ")");
       // Acknowledgement should be sent for all unacceptable packets (RFC793, p.69)
@@ -1038,23 +1200,83 @@
       return;
     }
 
-  // Update Rx window size, i.e. the flow control window
-  if (m_rWnd.Get () == 0 && tcpHeader.GetWindowSize () != 0 && m_persistEvent.IsRunning ())
-    { // persist probes end
-      NS_LOG_LOGIC (this << " Leaving zerowindow persist state");
-      m_persistEvent.Cancel ();
-    }
-  if (tcpHeader.GetFlags () & TcpHeader::ACK)
-    {
-      UpdateWindowSize (tcpHeader);
-    }
-  else if (tcpHeader.GetFlags () & TcpHeader::SYN)
+  m_rxTrace (packet, tcpHeader, this);
+
+  if (tcpHeader.GetFlags () & TcpHeader::SYN)
     {
       /* The window field in a segment where the SYN bit is set (i.e., a <SYN>
        * or <SYN,ACK>) MUST NOT be scaled (from RFC 7323 page 9). But should be
        * saved anyway..
        */
       m_rWnd = tcpHeader.GetWindowSize ();
+
+      if (tcpHeader.HasOption (TcpOption::WINSCALE) && m_winScalingEnabled)
+        {
+          ProcessOptionWScale (tcpHeader.GetOption (TcpOption::WINSCALE));
+        }
+      else
+        {
+          m_winScalingEnabled = false;
+        }
+
+      // When receiving a <SYN> or <SYN-ACK> we should adapt TS to the other end
+      if (tcpHeader.HasOption (TcpOption::TS) && m_timestampEnabled)
+        {
+          ProcessOptionTimestamp (tcpHeader.GetOption (TcpOption::TS),
+                                  tcpHeader.GetSequenceNumber ());
+        }
+      else
+        {
+          m_timestampEnabled = false;
+        }
+
+      // Initialize cWnd and ssThresh
+      m_tcb->m_cWnd = GetInitialCwnd () * GetSegSize ();
+      m_tcb->m_ssThresh = GetInitialSSThresh ();
+
+      if (tcpHeader.GetFlags () & TcpHeader::ACK)
+        {
+          EstimateRtt (tcpHeader);
+          m_highRxAckMark = tcpHeader.GetAckNumber ();
+        }
+    }
+  else if (tcpHeader.GetFlags () & TcpHeader::ACK)
+    {
+      NS_ASSERT (!(tcpHeader.GetFlags () & TcpHeader::SYN));
+      if (m_timestampEnabled)
+        {
+          if (!tcpHeader.HasOption (TcpOption::TS))
+            {
+              // Ignoring segment without TS, RFC 7323
+              NS_LOG_LOGIC ("At state " << TcpStateName[m_state] <<
+                            " received packet of seq [" << seq <<
+                            ":" << seq + packet->GetSize () <<
+                            ") without TS option. Silently discard it");
+              return;
+            }
+          else
+            {
+              ProcessOptionTimestamp (tcpHeader.GetOption (TcpOption::TS),
+                                      tcpHeader.GetSequenceNumber ());
+            }
+        }
+
+      EstimateRtt (tcpHeader);
+      UpdateWindowSize (tcpHeader);
+    }
+
+
+  if (m_rWnd.Get () == 0 && m_persistEvent.IsExpired ())
+    { // Zero window: Enter persist state to send 1 byte to probe
+      NS_LOG_LOGIC (this << " Enter zerowindow persist state");
+      NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
+                    (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
+      m_retxEvent.Cancel ();
+      NS_LOG_LOGIC ("Schedule persist timeout at time " <<
+                    Simulator::Now ().GetSeconds () << " to expire at time " <<
+                    (Simulator::Now () + m_persistTimeout).GetSeconds ());
+      m_persistEvent = Simulator::Schedule (m_persistTimeout, &TcpSocketBase::PersistTimeout, this);
+      NS_ASSERT (m_persistTimeout == Simulator::GetDelayLeft (m_persistEvent));
     }
 
   // TCP state machine code in different process functions
@@ -1075,6 +1297,7 @@
       if ((tcpHeader.GetFlags () & ~(TcpHeader::PSH | TcpHeader::URG)) != TcpHeader::RST)
         { // Since m_endPoint is not configured yet, we cannot use SendRST here
           TcpHeader h;
+          Ptr<Packet> p = Create<Packet> ();
           h.SetFlags (TcpHeader::RST);
           h.SetSequenceNumber (m_nextTxSequence);
           h.SetAckNumber (m_rxBuffer->NextRxSequence ());
@@ -1082,7 +1305,8 @@
           h.SetDestinationPort (tcpHeader.GetSourcePort ());
           h.SetWindowSize (AdvertisedWindowSize ());
           AddOptions (h);
-          m_tcp->SendPacket (Create<Packet> (), h, toAddress, fromAddress, m_boundnetdevice);
+          m_txTrace (p, h, this);
+          m_tcp->SendPacket (p, h, toAddress, fromAddress, m_boundnetdevice);
         }
       break;
     case SYN_SENT:
@@ -1105,6 +1329,21 @@
     default: // mute compiler
       break;
     }
+
+  if (m_rWnd.Get () != 0 && m_persistEvent.IsRunning ())
+    { // persist probes end, the other end has increased the window
+      NS_ASSERT (m_connected);
+      NS_LOG_LOGIC (this << " Leaving zerowindow persist state");
+      m_persistEvent.Cancel ();
+
+      // Try to send more data, since window has been updated
+      if (!m_sendPendingDataEvent.IsRunning ())
+        {
+          m_sendPendingDataEvent = Simulator::Schedule (TimeStep (1),
+                                                        &TcpSocketBase::SendPendingData,
+                                                        this, m_connected);
+        }
+    }
 }
 
 /* Received a packet upon ESTABLISHED state. This function is mimicking the
@@ -1120,7 +1359,31 @@
   // Different flags are different events
   if (tcpflags == TcpHeader::ACK)
     {
-      ReceivedAck (packet, tcpHeader);
+      if (tcpHeader.GetAckNumber () < m_txBuffer->HeadSequence ())
+        {
+          // Case 1:  If the ACK is a duplicate (SEG.ACK < SND.UNA), it can be ignored.
+          // Pag. 72 RFC 793
+          NS_LOG_LOGIC ("Ignored ack of " << tcpHeader.GetAckNumber () <<
+                        " SND.UNA = " << m_txBuffer->HeadSequence ());
+
+          // TODO: RFC 5961 5.2 [Blind Data Injection Attack].[Mitigation]
+        }
+      else if (tcpHeader.GetAckNumber () > m_highTxMark)
+        {
+          // If the ACK acks something not yet sent (SEG.ACK > HighTxMark) then
+          // send an ACK, drop the segment, and return.
+          // Pag. 72 RFC 793
+          NS_LOG_LOGIC ("Ignored ack of " << tcpHeader.GetAckNumber () <<
+                        " HighTxMark = " << m_highTxMark);
+
+          SendEmptyPacket (TcpHeader::ACK);
+        }
+      else
+        {
+          // SND.UNA < SEG.ACK =< HighTxMark
+          // Pag. 72 RFC 793
+          ReceivedAck (packet, tcpHeader);
+        }
     }
   else if (tcpflags == TcpHeader::SYN)
     { // Received SYN, old NS-3 behaviour is to set state to SYN_RCVD and
@@ -1159,30 +1422,250 @@
 {
   NS_LOG_FUNCTION (this << tcpHeader);
 
-  // Received ACK. Compare the ACK number against highest unacked seqno
-  if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
-    { // Ignore if no ACK flag
-    }
-  else if (tcpHeader.GetAckNumber () < m_txBuffer->HeadSequence ())
-    { // Case 1: Old ACK, ignored.
-      NS_LOG_LOGIC ("Ignored ack of " << tcpHeader.GetAckNumber ());
+  NS_ASSERT (0 != (tcpHeader.GetFlags () & TcpHeader::ACK));
+  NS_ASSERT (m_tcb->m_segmentSize > 0);
+
+  SequenceNumber32 ackNumber = tcpHeader.GetAckNumber ();
+  uint32_t bytesAcked = ackNumber - m_txBuffer->HeadSequence ();
+  uint32_t segsAcked  = bytesAcked / m_tcb->m_segmentSize;
+  m_bytesAckedNotProcessed += bytesAcked % m_tcb->m_segmentSize;
+
+  if (m_bytesAckedNotProcessed >= m_tcb->m_segmentSize)
+    {
+      segsAcked += 1;
+      m_bytesAckedNotProcessed -= m_tcb->m_segmentSize;
     }
-  else if (tcpHeader.GetAckNumber () == m_txBuffer->HeadSequence ())
-    { // Case 2: Potentially a duplicated ACK
-      if (tcpHeader.GetAckNumber () < m_nextTxSequence && packet->GetSize() == 0)
+
+  NS_LOG_LOGIC (" Bytes acked: " << bytesAcked <<
+                " Segments acked: " << segsAcked <<
+                " bytes left: " << m_bytesAckedNotProcessed);
+
+  NS_LOG_DEBUG ("ACK of " << ackNumber <<
+                " SND.UNA=" << m_txBuffer->HeadSequence () <<
+                " SND.NXT=" << m_nextTxSequence);
+
+  if (ackNumber == m_txBuffer->HeadSequence ()
+      && ackNumber < m_nextTxSequence
+      && packet->GetSize () == 0)
+    {
+      // There is a DupAck
+      ++m_dupAckCount;
+
+      if (m_tcb->m_congState == TcpSocketState::CA_OPEN)
         {
-          NS_LOG_LOGIC ("Dupack of " << tcpHeader.GetAckNumber ());
-          DupAck (tcpHeader, ++m_dupAckCount);
+          // From Open we go Disorder
+          NS_ASSERT_MSG (m_dupAckCount == 1, "From OPEN->DISORDER but with " <<
+                         m_dupAckCount << " dup ACKs");
+          m_tcb->m_congState = TcpSocketState::CA_DISORDER;
+
+          if (m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
+            {
+              // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
+              NS_LOG_INFO ("Limited transmit");
+              uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true);
+              m_nextTxSequence += sz;
+            }
+
+          NS_LOG_DEBUG ("OPEN -> DISORDER");
+        }
+      else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
+        {
+          if ((m_dupAckCount == m_retxThresh) && (m_highRxAckMark >= m_recover))
+            {
+              // triple duplicate ack triggers fast retransmit (RFC2582 sec.3 bullet #1)
+              NS_LOG_DEBUG (TcpSocketState::TcpCongStateName[m_tcb->m_congState] <<
+                            " -> RECOVERY");
+              m_recover = m_highTxMark;
+              m_tcb->m_congState = TcpSocketState::CA_RECOVERY;
+
+              m_tcb->m_ssThresh = m_congestionControl->GetSsThresh (m_tcb,
+                                                                    BytesInFlight ());
+              m_tcb->m_cWnd = m_tcb->m_ssThresh + m_dupAckCount * m_tcb->m_segmentSize;
+
+              NS_LOG_INFO (m_dupAckCount << " dupack. Enter fast recovery mode." <<
+                           "Reset cwnd to " << m_tcb->m_cWnd << ", ssthresh to " <<
+                           m_tcb->m_ssThresh << " at fast recovery seqnum " << m_recover);
+              DoRetransmit ();
+            }
+          else if (m_limitedTx && m_txBuffer->SizeFromSequence (m_nextTxSequence) > 0)
+            {
+              // RFC3042 Limited transmit: Send a new packet for each duplicated ACK before fast retransmit
+              NS_LOG_INFO ("Limited transmit");
+              uint32_t sz = SendDataPacket (m_nextTxSequence, m_tcb->m_segmentSize, true);
+              m_nextTxSequence += sz;
+            }
+        }
+      else if (m_tcb->m_congState == TcpSocketState::CA_RECOVERY)
+        { // Increase cwnd for every additional dupack (RFC2582, sec.3 bullet #3)
+          m_tcb->m_cWnd += m_tcb->m_segmentSize;
+          NS_LOG_INFO (m_dupAckCount << " Dupack received in fast recovery mode."
+                       "Increase cwnd to " << m_tcb->m_cWnd);
+          SendPendingData (m_connected);
         }
-      // otherwise, the ACK is precisely equal to the nextTxSequence
-      NS_ASSERT (tcpHeader.GetAckNumber () <= m_nextTxSequence);
+
+      // Artificially call PktsAcked. After all, one segment has been ACKed.
+      m_congestionControl->PktsAcked (m_tcb, 1, m_lastRtt);
     }
-  else if (tcpHeader.GetAckNumber () > m_txBuffer->HeadSequence ())
+  else if (ackNumber == m_txBuffer->HeadSequence ()
+           && ackNumber == m_nextTxSequence)
+    {
+      // Dupack, but the ACK is precisely equal to the nextTxSequence
+    }
+  else if (ackNumber > m_txBuffer->HeadSequence ())
     { // Case 3: New ACK, reset m_dupAckCount and update m_txBuffer
-      NS_LOG_LOGIC ("New ack of " << tcpHeader.GetAckNumber ());
-      NewAck (tcpHeader.GetAckNumber ());
-      m_dupAckCount = 0;
+      bool callCongestionControl = true;
+      bool resetRTO = true;
+
+      /* The following switch is made because m_dupAckCount can be
+       * "inflated" through out-of-order segments (e.g. from retransmission,
+       * while segments have not been lost but are network-reordered). At
+       * least one segment has been acked; in the luckiest case, an amount
+       * equals to segsAcked-m_dupAckCount has not been processed.
+       *
+       * To be clear: segsAcked will be passed to PktsAcked, and it should take
+       * in considerations the times that it has been already called, while newSegsAcked
+       * will be passed to IncreaseCwnd, and it represents the amount of
+       * segments that are allowed to increase the cWnd value.
+       */
+      uint32_t newSegsAcked = segsAcked;
+      if (segsAcked > m_dupAckCount)
+        {
+          segsAcked -= m_dupAckCount;
+        }
+      else
+        {
+          segsAcked = 1;
+        }
+
+      if (m_tcb->m_congState == TcpSocketState::CA_OPEN)
+        {
+          m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
+        }
+      else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
+        {
+          // The network reorder packets. Linux changes the counting lost
+          // packet algorithm from FACK to NewReno. We simply go back in Open.
+          m_tcb->m_congState = TcpSocketState::CA_OPEN;
+          m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
+          m_dupAckCount = 0;
+          m_retransOut = 0;
+
+          NS_LOG_DEBUG ("DISORDER -> OPEN");
+        }
+      else if (m_tcb->m_congState == TcpSocketState::CA_RECOVERY)
+        {
+          if (ackNumber < m_recover)
+            {
+              /* Partial ACK.
+               * In case of partial ACK, retransmit the first unacknowledged
+               * segment. Deflate the congestion window by the amount of new
+               * data acknowledged by the Cumulative Acknowledgment field.
+               * If the partial ACK acknowledges at least one SMSS of new data,
+               * then add back SMSS bytes to the congestion window.
+               * This artificially inflates the congestion window in order to
+               * reflect the additional segment that has left the network.
+               * Send a new segment if permitted by the new value of cwnd.
+               * This "partial window deflation" attempts to ensure that, when
+               * fast recovery eventually ends, approximately ssthresh amount
+               * of data will be outstanding in the network.  Do not exit the
+               * fast recovery procedure (i.e., if any duplicate ACKs subsequently
+               * arrive, execute step 4 of Section 3.2 of [RFC5681]).
+                */
+              m_tcb->m_cWnd = SafeSubtraction (m_tcb->m_cWnd, bytesAcked);
+
+              if (segsAcked >= 1)
+                {
+                  m_tcb->m_cWnd += m_tcb->m_segmentSize;
+                }
+
+              callCongestionControl = false; // No congestion control on cWnd show be invoked
+              m_dupAckCount = SafeSubtraction (m_dupAckCount, segsAcked); // Update the dupAckCount
+              m_retransOut  = SafeSubtraction (m_retransOut, 1);  // at least one retransmission
+                                                                  // has reached the other side
+              m_txBuffer->DiscardUpTo (ackNumber);  //Bug 1850:  retransmit before newack
+              DoRetransmit (); // Assume the next seq is lost. Retransmit lost packet
+
+              if (m_isFirstPartialAck)
+                {
+                  m_isFirstPartialAck = false;
+                }
+              else
+                {
+                  resetRTO = false;
+                }
+
+              /* This partial ACK acknowledge the fact that one segment has been
+               * previously lost and now successfully received. All others have
+               * been processed when they come under the form of dupACKs
+               */
+              m_congestionControl->PktsAcked (m_tcb, 1, m_lastRtt);
+
+              NS_LOG_INFO ("Partial ACK for seq " << ackNumber <<
+                           " in fast recovery: cwnd set to " << m_tcb->m_cWnd <<
+                           " recover seq: " << m_recover <<
+                           " dupAck count: " << m_dupAckCount);
+            }
+          else if (ackNumber >= m_recover)
+            { // Full ACK (RFC2582 sec.3 bullet #5 paragraph 2, option 1)
+              m_tcb->m_cWnd = std::min (m_tcb->m_ssThresh.Get (),
+                                        BytesInFlight () + m_tcb->m_segmentSize);
+              m_isFirstPartialAck = true;
+              m_dupAckCount = 0;
+              m_retransOut = 0;
+
+              /* This FULL ACK acknowledge the fact that one segment has been
+               * previously lost and now successfully received. All others have
+               * been processed when they come under the form of dupACKs,
+               * except the (maybe) new ACKs which come from a new window
+               */
+              m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
+              newSegsAcked = (ackNumber - m_recover) / m_tcb->m_segmentSize;
+              m_tcb->m_congState = TcpSocketState::CA_OPEN;
+
+              NS_LOG_INFO ("Received full ACK for seq " << ackNumber <<
+                           ". Leaving fast recovery with cwnd set to " << m_tcb->m_cWnd);
+              NS_LOG_DEBUG ("RECOVERY -> OPEN");
+            }
+        }
+      else if (m_tcb->m_congState == TcpSocketState::CA_LOSS)
+        {
+          // Go back in OPEN state
+          m_isFirstPartialAck = true;
+          m_congestionControl->PktsAcked (m_tcb, segsAcked, m_lastRtt);
+          m_dupAckCount = 0;
+          m_retransOut = 0;
+          m_tcb->m_congState = TcpSocketState::CA_OPEN;
+          NS_LOG_DEBUG ("LOSS -> OPEN");
+        }
+
+      if (callCongestionControl)
+        {
+          m_congestionControl->IncreaseWindow (m_tcb, newSegsAcked);
+
+          NS_LOG_LOGIC ("Congestion control called: " <<
+                        " cWnd: " << m_tcb->m_cWnd <<
+                        " ssTh: " << m_tcb->m_ssThresh);
+        }
+
+      // Reset the data retransmission count. We got a new ACK!
+      m_dataRetrCount = m_dataRetries;
+
+      if (m_isFirstPartialAck == false)
+        {
+          NS_ASSERT (m_tcb->m_congState == TcpSocketState::CA_RECOVERY);
+        }
+
+      NewAck (ackNumber, resetRTO);
+
+      // Try to send more data
+      if (!m_sendPendingDataEvent.IsRunning ())
+        {
+          m_sendPendingDataEvent = Simulator::Schedule (TimeStep (1),
+                                                        &TcpSocketBase::SendPendingData,
+                                                        this, m_connected);
+        }
     }
+
   // If there is any data piggybacked, store it into m_rxBuffer
   if (packet->GetSize () > 0)
     {
@@ -1231,7 +1714,7 @@
 
   if (tcpflags == 0)
     { // Bare data, accept it and move to ESTABLISHED state. This is not a normal behaviour. Remove this?
-      NS_LOG_INFO ("SYN_SENT -> ESTABLISHED");
+      NS_LOG_DEBUG ("SYN_SENT -> ESTABLISHED");
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
@@ -1244,16 +1727,16 @@
     }
   else if (tcpflags == TcpHeader::SYN)
     { // Received SYN, move to SYN_RCVD state and respond with SYN+ACK
-      NS_LOG_INFO ("SYN_SENT -> SYN_RCVD");
+      NS_LOG_DEBUG ("SYN_SENT -> SYN_RCVD");
       m_state = SYN_RCVD;
-      m_cnCount = m_cnRetries;
+      m_synCount = m_synRetries;
       m_rxBuffer->SetNextRxSequence (tcpHeader.GetSequenceNumber () + SequenceNumber32 (1));
       SendEmptyPacket (TcpHeader::SYN | TcpHeader::ACK);
     }
   else if (tcpflags == (TcpHeader::SYN | TcpHeader::ACK)
            && m_nextTxSequence + SequenceNumber32 (1) == tcpHeader.GetAckNumber ())
     { // Handshake completed
-      NS_LOG_INFO ("SYN_SENT -> ESTABLISHED");
+      NS_LOG_DEBUG ("SYN_SENT -> ESTABLISHED");
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
@@ -1295,7 +1778,7 @@
     { // If it is bare data, accept it and move to ESTABLISHED state. This is
       // possibly due to ACK lost in 3WHS. If in-sequence ACK is received, the
       // handshake is completed nicely.
-      NS_LOG_INFO ("SYN_RCVD -> ESTABLISHED");
+      NS_LOG_DEBUG ("SYN_RCVD -> ESTABLISHED");
       m_state = ESTABLISHED;
       m_connected = true;
       m_retxEvent.Cancel ();
@@ -1389,7 +1872,7 @@
       if (m_state == FIN_WAIT_1 && m_txBuffer->Size () == 0
           && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
         { // This ACK corresponds to the FIN sent
-          NS_LOG_INFO ("FIN_WAIT_1 -> FIN_WAIT_2");
+          NS_LOG_DEBUG ("FIN_WAIT_1 -> FIN_WAIT_2");
           m_state = FIN_WAIT_2;
         }
     }
@@ -1422,7 +1905,7 @@
     {
       if (m_state == FIN_WAIT_1)
         {
-          NS_LOG_INFO ("FIN_WAIT_1 -> CLOSING");
+          NS_LOG_DEBUG ("FIN_WAIT_1 -> CLOSING");
           m_state = CLOSING;
           if (m_txBuffer->Size () == 0
               && tcpHeader.GetAckNumber () == m_highTxMark + SequenceNumber32 (1))
@@ -1539,7 +2022,7 @@
   // Simultaneous close: Application invoked Close() when we are processing this FIN packet
   if (m_state == FIN_WAIT_1)
     {
-      NS_LOG_INFO ("FIN_WAIT_1 -> CLOSING");
+      NS_LOG_DEBUG ("FIN_WAIT_1 -> CLOSING");
       m_state = CLOSING;
       return;
     }
@@ -1554,7 +2037,7 @@
   NS_ASSERT (m_state == ESTABLISHED || m_state == SYN_RCVD);
 
   // Move the state to CLOSE_WAIT
-  NS_LOG_INFO (TcpStateName[m_state] << " -> CLOSE_WAIT");
+  NS_LOG_DEBUG (TcpStateName[m_state] << " -> CLOSE_WAIT");
   m_state = CLOSE_WAIT;
 
   if (!m_closeNotified)
@@ -1580,7 +2063,7 @@
   if (m_state == LAST_ACK)
     {
       NS_LOG_LOGIC ("TcpSocketBase " << this << " scheduling LATO1");
-      Time lastRto = m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4);
+      Time lastRto = m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation () * 4);
       m_lastAckEvent = Simulator::Schedule (lastRto, &TcpSocketBase::LastAckTimeout, this);
     }
 }
@@ -1594,7 +2077,7 @@
   m_endPoint = 0;
   if (m_tcp != 0)
     {
-      m_tcp->RemoveSocket(this);
+      m_tcp->RemoveSocket (this);
     }
   NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                 (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
@@ -1610,7 +2093,7 @@
   m_endPoint6 = 0;
   if (m_tcp != 0)
     {
-      m_tcp->RemoveSocket(this);
+      m_tcp->RemoveSocket (this);
     }
   NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                 (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
@@ -1691,14 +2174,14 @@
   header.SetWindowSize (AdvertisedWindowSize ());
 
   // RFC 6298, clause 2.4
-  m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), m_minRto);
+  m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation () * 4), m_minRto);
 
   bool hasSyn = flags & TcpHeader::SYN;
   bool hasFin = flags & TcpHeader::FIN;
   bool isAck = flags == TcpHeader::ACK;
   if (hasSyn)
     {
-      if (m_cnCount == 0)
+      if (m_synCount == 0)
         { // No more connection retries, give up
           NS_LOG_LOGIC ("Connection failed.");
           m_rtt->Reset (); //According to recommendation -> RFC 6298
@@ -1707,11 +2190,23 @@
         }
       else
         { // Exponential backoff of connection time out
-          int backoffCount = 0x1 << (m_cnRetries - m_cnCount);
+          int backoffCount = 0x1 << (m_synRetries - m_synCount);
           m_rto = m_cnTimeout * backoffCount;
-          m_cnCount--;
+          m_synCount--;
+        }
+
+      if (m_synRetries - 1 == m_synCount)
+        {
+          UpdateRttHistory (s, 0, false);
+        }
+      else
+        { // This is SYN retransmission
+          UpdateRttHistory (s, 0, true);
         }
     }
+
+  m_txTrace (p, header, this);
+
   if (m_endPoint != 0)
     {
       m_tcp->SendPacket (p, header, m_endPoint->GetLocalAddress (),
@@ -1722,10 +2217,15 @@
       m_tcp->SendPacket (p, header, m_endPoint6->GetLocalAddress (),
                          m_endPoint6->GetPeerAddress (), m_boundnetdevice);
     }
+
   if (flags & TcpHeader::ACK)
     { // If sending an ACK, cancel the delay ACK as well
       m_delAckEvent.Cancel ();
       m_delAckCount = 0;
+      if (m_highTxAck < header.GetAckNumber ())
+        {
+          m_highTxAck = header.GetAckNumber ();
+        }
     }
   if (m_retxEvent.IsExpired () && (hasSyn || hasFin) && !isAck )
     { // Retransmit SYN / SYN+ACK / FIN / FIN+ACK to guard against lost
@@ -1756,7 +2256,7 @@
       m_endPoint->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint);
       m_endPoint = 0;
-      m_tcp->RemoveSocket(this);
+      m_tcp->RemoveSocket (this);
     }
   else if (m_endPoint6 != 0)
     {
@@ -1764,7 +2264,7 @@
       m_endPoint6->SetDestroyCallback (MakeNullCallback<void> ());
       m_tcp->DeAllocate (m_endPoint6);
       m_endPoint6 = 0;
-      m_tcp->RemoveSocket(this);
+      m_tcp->RemoveSocket (this);
     }
 }
 
@@ -1853,12 +2353,13 @@
                                       Inet6SocketAddress::ConvertFrom (fromAddress).GetPort ());
       m_endPoint = 0;
     }
-  m_tcp->AddSocket(this);
+  m_tcp->AddSocket (this);
 
   // Change the cloned socket from LISTEN state to SYN_RCVD
-  NS_LOG_INFO ("LISTEN -> SYN_RCVD");
+  NS_LOG_DEBUG ("LISTEN -> SYN_RCVD");
   m_state = SYN_RCVD;
-  m_cnCount = m_cnRetries;
+  m_synCount = m_synRetries;
+  m_dataRetrCount = m_dataRetries;
   SetupCallback ();
   // Set the sequence number and send SYN+ACK
   m_rxBuffer->SetNextRxSequence (h.GetSequenceNumber () + SequenceNumber32 (1));
@@ -1888,7 +2389,7 @@
   NS_LOG_FUNCTION (this << seq << maxSize << withAck);
 
   bool isRetransmission = false;
-  if ( seq == m_txBuffer->HeadSequence () )
+  if (seq != m_highTxMark)
     {
       isRetransmission = true;
     }
@@ -1943,12 +2444,12 @@
       flags |= TcpHeader::FIN;
       if (m_state == ESTABLISHED)
         { // On active close: I am the first one to send FIN
-          NS_LOG_INFO ("ESTABLISHED -> FIN_WAIT_1");
+          NS_LOG_DEBUG ("ESTABLISHED -> FIN_WAIT_1");
           m_state = FIN_WAIT_1;
         }
       else if (m_state == CLOSE_WAIT)
         { // On passive close: Peer sent me FIN already
-          NS_LOG_INFO ("CLOSE_WAIT -> LAST_ACK");
+          NS_LOG_DEBUG ("CLOSE_WAIT -> LAST_ACK");
           m_state = LAST_ACK;
         }
     }
@@ -1969,36 +2470,64 @@
   header.SetWindowSize (AdvertisedWindowSize ());
   AddOptions (header);
 
-  if (m_retxEvent.IsExpired () )
+  if (m_retxEvent.IsExpired ())
     {
-      // RFC 6298, clause 2.5
-      Time doubledRto = m_rto + m_rto;
-      m_rto = Min (doubledRto, Time::FromDouble (60,  Time::S));
+      // Schedules retransmit timeout. If this is a retransmission, double the timer
 
-      // Schedules retransmit
+      if (isRetransmission)
+        { // This is a retransmit
+          // RFC 6298, clause 2.5
+          Time doubledRto = m_rto + m_rto;
+          m_rto = Min (doubledRto, Time::FromDouble (60,  Time::S));
+        }
 
       NS_LOG_LOGIC (this << " SendDataPacket Schedule ReTxTimeout at time " <<
                     Simulator::Now ().GetSeconds () << " to expire at time " <<
                     (Simulator::Now () + m_rto.Get ()).GetSeconds () );
       m_retxEvent = Simulator::Schedule (m_rto, &TcpSocketBase::ReTxTimeout, this);
     }
-  NS_LOG_LOGIC ("Send packet via TcpL4Protocol with flags" <<
-                TcpHeader::FlagsToString (flags));
+
+  m_txTrace (p, header, this);
+
   if (m_endPoint)
     {
       m_tcp->SendPacket (p, header, m_endPoint->GetLocalAddress (),
                          m_endPoint->GetPeerAddress (), m_boundnetdevice);
+      NS_LOG_DEBUG ("Send segment of size " << sz << " with remaining data " <<
+                    remainingData << " via TcpL4Protocol to " <<  m_endPoint->GetPeerAddress () <<
+                    ". Header " << header);
     }
   else
     {
       m_tcp->SendPacket (p, header, m_endPoint6->GetLocalAddress (),
                          m_endPoint6->GetPeerAddress (), m_boundnetdevice);
+      NS_LOG_DEBUG ("Send segment of size " << sz << " with remaining data " <<
+                    remainingData << " via TcpL4Protocol to " <<  m_endPoint6->GetPeerAddress () <<
+                    ". Header " << header);
     }
 
+  UpdateRttHistory (seq, sz, isRetransmission);
+
+  // Notify the application of the data being sent unless this is a retransmit
+  if (seq + sz > m_highTxMark)
+    {
+      Simulator::ScheduleNow (&TcpSocketBase::NotifyDataSent, this, (seq + sz - m_highTxMark.Get ()));
+    }
+  // Update highTxMark
+  m_highTxMark = std::max (seq + sz, m_highTxMark.Get ());
+  return sz;
+}
+
+void
+TcpSocketBase::UpdateRttHistory (const SequenceNumber32 &seq, uint32_t sz,
+                                 bool isRetransmission)
+{
+  NS_LOG_FUNCTION (this);
+
   // update the history of sequence numbers used to calculate the RTT
   if (isRetransmission == false)
     { // This is the next expected one, just log at end
-      m_history.push_back (RttHistory (seq, sz, Simulator::Now () ));
+      m_history.push_back (RttHistory (seq, sz, Simulator::Now ()));
     }
   else
     { // This is a retransmit, find in list and mark as re-tx
@@ -2012,15 +2541,6 @@
             }
         }
     }
-
-  // Notify the application of the data being sent unless this is a retransmit
-  if (seq == m_highTxMark)
-    {
-      Simulator::ScheduleNow (&TcpSocketBase::NotifyDataSent, this, sz);
-    }
-  // Update highTxMark
-  m_highTxMark = std::max (seq + sz, m_highTxMark.Get ());
-  return sz;
 }
 
 /* Send as much pending data as possible according to the Tx window. Note that
@@ -2044,7 +2564,7 @@
     {
       uint32_t w = AvailableWindow (); // Get available window size
       // Stop sending if we need to wait for a larger Tx window (prevent silly window syndrome)
-      if (w < m_segmentSize && m_txBuffer->SizeFromSequence (m_nextTxSequence) > w)
+      if (w < m_tcb->m_segmentSize && m_txBuffer->SizeFromSequence (m_nextTxSequence) > w)
         {
           NS_LOG_LOGIC ("Preventing Silly Window Syndrome. Wait to send.");
           break; // No more
@@ -2052,7 +2572,7 @@
       // Nagle's algorithm (RFC896): Hold off sending if there is unacked data
       // in the buffer and the amount of data to send is less than one segment
       if (!m_noDelay && UnAckDataCount () > 0
-          && m_txBuffer->SizeFromSequence (m_nextTxSequence) < m_segmentSize)
+          && m_txBuffer->SizeFromSequence (m_nextTxSequence) < m_tcb->m_segmentSize)
         {
           NS_LOG_LOGIC ("Invoking Nagle's algorithm. Wait to send.");
           break;
@@ -2060,22 +2580,30 @@
       NS_LOG_LOGIC ("TcpSocketBase " << this << " SendPendingData" <<
                     " w " << w <<
                     " rxwin " << m_rWnd <<
-                    " segsize " << m_segmentSize <<
+                    " segsize " << m_tcb->m_segmentSize <<
                     " nextTxSeq " << m_nextTxSequence <<
                     " highestRxAck " << m_txBuffer->HeadSequence () <<
                     " pd->Size " << m_txBuffer->Size () <<
                     " pd->SFS " << m_txBuffer->SizeFromSequence (m_nextTxSequence));
-      uint32_t s = std::min (w, m_segmentSize);  // Send no more than window
+
+      NS_LOG_DEBUG ("Window: " << w <<
+                    " cWnd: " << m_tcb->m_cWnd <<
+                    " unAck: " << UnAckDataCount ());
+
+      uint32_t s = std::min (w, m_tcb->m_segmentSize);  // Send no more than window
       uint32_t sz = SendDataPacket (m_nextTxSequence, s, withAck);
       nPacketsSent++;                             // Count sent this loop
       m_nextTxSequence += sz;                     // Advance next tx sequence
     }
-  NS_LOG_LOGIC ("SendPendingData sent " << nPacketsSent << " packets");
+  if (nPacketsSent > 0)
+    {
+      NS_LOG_DEBUG ("SendPendingData sent " << nPacketsSent << " segments");
+    }
   return (nPacketsSent > 0);
 }
 
 uint32_t
-TcpSocketBase::UnAckDataCount ()
+TcpSocketBase::UnAckDataCount () const
 {
   NS_LOG_FUNCTION (this);
   return m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
@@ -2085,32 +2613,61 @@
 TcpSocketBase::BytesInFlight ()
 {
   NS_LOG_FUNCTION (this);
-  return m_highTxMark.Get () - m_txBuffer->HeadSequence ();
+  // Previous (see bug 1783):
+  // uint32_t bytesInFlight = m_highTxMark.Get () - m_txBuffer->HeadSequence ();
+  // RFC 4898 page 23
+  // PipeSize=SND.NXT-SND.UNA+(retransmits-dupacks)*CurMSS
+
+  // flightSize == UnAckDataCount (), but we avoid the call to save log lines
+  uint32_t flightSize = m_nextTxSequence.Get () - m_txBuffer->HeadSequence ();
+  uint32_t duplicatedSize;
+  uint32_t bytesInFlight;
+
+  if (m_retransOut > m_dupAckCount)
+    {
+      duplicatedSize = (m_retransOut - m_dupAckCount)*m_tcb->m_segmentSize;
+      bytesInFlight = flightSize + duplicatedSize;
+    }
+  else
+    {
+      duplicatedSize = (m_dupAckCount - m_retransOut)*m_tcb->m_segmentSize;
+      bytesInFlight = duplicatedSize > flightSize ? 0 : flightSize - duplicatedSize;
+    }
+
+  // m_bytesInFlight is traced; avoid useless assignments which would fire
+  // fruitlessly the callback
+  if (m_bytesInFlight != bytesInFlight)
+    {
+      m_bytesInFlight = bytesInFlight;
+    }
+
+  return bytesInFlight;
 }
 
 uint32_t
-TcpSocketBase::Window (void)
+TcpSocketBase::Window (void) const
 {
   NS_LOG_FUNCTION (this);
-  return std::min (m_rWnd.Get (), m_cWnd.Get ());
+  return std::min (m_rWnd.Get (), m_tcb->m_cWnd.Get ());
 }
 
 uint32_t
-TcpSocketBase::AvailableWindow ()
+TcpSocketBase::AvailableWindow () const
 {
   NS_LOG_FUNCTION_NOARGS ();
   uint32_t unack = UnAckDataCount (); // Number of outstanding bytes
-  uint32_t win = Window (); // Number of bytes allowed to be outstanding
-  NS_LOG_LOGIC ("UnAckCount=" << unack << ", Win=" << win);
+  uint32_t win = Window ();           // Number of bytes allowed to be outstanding
+
+  NS_LOG_DEBUG ("UnAckCount=" << unack << ", Win=" << win);
   return (win < unack) ? 0 : (win - unack);
 }
 
 uint16_t
-TcpSocketBase::AdvertisedWindowSize ()
+TcpSocketBase::AdvertisedWindowSize () const
 {
-  uint32_t w = m_rxBuffer->MaxBufferSize () - m_rxBuffer->Size ();
+  uint32_t w = m_rxBuffer->MaxBufferSize ();
 
-  w >>= m_sndScaleFactor;
+  w >>= m_rcvWindShift;
 
   if (w > m_maxWinSize)
     {
@@ -2126,9 +2683,8 @@
 TcpSocketBase::ReceivedData (Ptr<Packet> p, const TcpHeader& tcpHeader)
 {
   NS_LOG_FUNCTION (this << tcpHeader);
-  NS_LOG_LOGIC ("seq " << tcpHeader.GetSequenceNumber () <<
-                " ack " << tcpHeader.GetAckNumber () <<
-                " pkt size " << p->GetSize () );
+  NS_LOG_DEBUG ("Data segment, seq=" << tcpHeader.GetSequenceNumber () <<
+                " pkt size=" << p->GetSize () );
 
   // Put into Rx buffer
   SequenceNumber32 expectedSeq = m_rxBuffer->NextRxSequence ();
@@ -2154,7 +2710,8 @@
         {
           m_delAckEvent = Simulator::Schedule (m_delAckTimeout,
                                                &TcpSocketBase::DelAckTimeout, this);
-          NS_LOG_LOGIC (this << " scheduled delayed ACK at " << (Simulator::Now () + Simulator::GetDelayLeft (m_delAckEvent)).GetSeconds ());
+          NS_LOG_LOGIC (this << " scheduled delayed ACK at " <<
+                        (Simulator::Now () + Simulator::GetDelayLeft (m_delAckEvent)).GetSeconds ());
         }
     }
   // Notify app to receive if necessary
@@ -2188,7 +2745,7 @@
 void
 TcpSocketBase::EstimateRtt (const TcpHeader& tcpHeader)
 {
-  SequenceNumber32 ackSeq = tcpHeader.GetAckNumber();
+  SequenceNumber32 ackSeq = tcpHeader.GetAckNumber ();
   Time m = Time (0.0);
 
   // An ack has been received, calculate rtt and log this measurement
@@ -2213,10 +2770,13 @@
     }
 
   // Now delete all ack history with seq <= ack
-  while(!m_history.empty ())
+  while (!m_history.empty ())
     {
       RttHistory& h = m_history.front ();
-      if ((h.seq + SequenceNumber32 (h.count)) > ackSeq) break;               // Done removing
+      if ((h.seq + SequenceNumber32 (h.count)) > ackSeq)
+        {
+          break;                                                              // Done removing
+        }
       m_history.pop_front (); // Remove
     }
 
@@ -2224,9 +2784,9 @@
     {
       m_rtt->Measurement (m);                // Log the measurement
       // RFC 6298, clause 2.4
-      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), m_minRto);
+      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation () * 4), m_minRto);
       m_lastRtt = m_rtt->GetEstimate ();
-      NS_LOG_FUNCTION(this << m_lastRtt);
+      NS_LOG_FUNCTION (this << m_lastRtt);
     }
 }
 
@@ -2234,36 +2794,25 @@
 // when the three-way handshake completed. This cancels retransmission timer
 // and advances Tx window
 void
-TcpSocketBase::NewAck (SequenceNumber32 const& ack)
+TcpSocketBase::NewAck (SequenceNumber32 const& ack, bool resetRTO)
 {
   NS_LOG_FUNCTION (this << ack);
 
-  if (m_state != SYN_RCVD)
+  if (m_state != SYN_RCVD && resetRTO)
     { // Set RTO unless the ACK is received in SYN_RCVD state
       NS_LOG_LOGIC (this << " Cancelled ReTxTimeout event which was set to expire at " <<
                     (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
       m_retxEvent.Cancel ();
       // On receiving a "New" ack we restart retransmission timer .. RFC 6298
       // RFC 6298, clause 2.4
-      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation ()*4), m_minRto);
+      m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation () * 4), m_minRto);
 
       NS_LOG_LOGIC (this << " Schedule ReTxTimeout at time " <<
                     Simulator::Now ().GetSeconds () << " to expire at time " <<
                     (Simulator::Now () + m_rto.Get ()).GetSeconds ());
       m_retxEvent = Simulator::Schedule (m_rto, &TcpSocketBase::ReTxTimeout, this);
     }
-  if (m_rWnd.Get () == 0 && m_persistEvent.IsExpired ())
-    { // Zero window: Enter persist state to send 1 byte to probe
-      NS_LOG_LOGIC (this << "Enter zerowindow persist state");
-      NS_LOG_LOGIC (this << "Cancelled ReTxTimeout event which was set to expire at " <<
-                    (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
-      m_retxEvent.Cancel ();
-      NS_LOG_LOGIC ("Schedule persist timeout at time " <<
-                    Simulator::Now ().GetSeconds () << " to expire at time " <<
-                    (Simulator::Now () + m_persistTimeout).GetSeconds ());
-      m_persistEvent = Simulator::Schedule (m_persistTimeout, &TcpSocketBase::PersistTimeout, this);
-      NS_ASSERT (m_persistTimeout == Simulator::GetDelayLeft (m_persistEvent));
-    }
+
   // Note the highest ACK and tell app to send more
   NS_LOG_LOGIC ("TCP " << this << " NewAck " << ack <<
                 " numberAck " << (ack - m_txBuffer->HeadSequence ())); // Number bytes ack'ed
@@ -2282,11 +2831,6 @@
                     (Simulator::Now () + Simulator::GetDelayLeft (m_retxEvent)).GetSeconds ());
       m_retxEvent.Cancel ();
     }
-  // Try to send more data
-  if (!m_sendPendingDataEvent.IsRunning ())
-    {
-      m_sendPendingDataEvent = Simulator::Schedule ( TimeStep (1), &TcpSocketBase::SendPendingData, this, m_connected);
-    }
 }
 
 // Retransmit timeout
@@ -2306,6 +2850,7 @@
       return;
     }
 
+  m_recover = m_highTxMark;
   Retransmit ();
 }
 
@@ -2357,6 +2902,8 @@
     }
   AddOptions (tcpHeader);
 
+  m_txTrace (p, tcpHeader, this);
+
   if (m_endPoint != 0)
     {
       m_tcp->SendPacket (p, tcpHeader, m_endPoint->GetLocalAddress (),
@@ -2367,6 +2914,7 @@
       m_tcp->SendPacket (p, tcpHeader, m_endPoint6->GetLocalAddress (),
                          m_endPoint6->GetPeerAddress (), m_boundnetdevice);
     }
+
   NS_LOG_LOGIC ("Schedule persist timeout at time "
                 << Simulator::Now ().GetSeconds () << " to expire at time "
                 << (Simulator::Now () + m_persistTimeout).GetSeconds ());
@@ -2376,9 +2924,61 @@
 void
 TcpSocketBase::Retransmit ()
 {
-  m_nextTxSequence = m_txBuffer->HeadSequence (); // Start from highest Ack
+  // If erroneous timeout in closed/timed-wait state, just return
+  if (m_state == CLOSED || m_state == TIME_WAIT)
+    {
+      return;
+    }
+  // If all data are received (non-closing socket and nothing to send), just return
+  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark)
+    {
+      return;
+    }
+
+  /*
+   * When a TCP sender detects segment loss using the retransmission timer
+   * and the given segment has not yet been resent by way of the
+   * retransmission timer, the value of ssthresh MUST be set to no more
+   * than the value given in equation (4):
+   *
+   *   ssthresh = max (FlightSize / 2, 2*SMSS)            (4)
+   *
+   * where, as discussed above, FlightSize is the amount of outstanding
+   * data in the network.
+   *
+   * On the other hand, when a TCP sender detects segment loss using the
+   * retransmission timer and the given segment has already been
+   * retransmitted by way of the retransmission timer at least once, the
+   * value of ssthresh is held constant.
+   *
+   * Conditions to decrement slow - start threshold are as follows:
+   *
+   * *) The TCP state should be less than disorder, which is nothing but open.
+   * If we are entering into the loss state from the open state, we have not yet
+   * reduced the slow - start threshold for the window of data. (Nat: Recovery?)
+   * *) If we have entered the loss state with all the data pointed to by high_seq
+   * acknowledged. Once again it means that in whatever state we are (other than
+   * open state), all the data from the window that got us into the state, prior to
+   * retransmission timer expiry, has been acknowledged. (Nat: How this can happen?)
+   * *) If the above two conditions fail, we still have one more condition that can
+   * demand reducing the slow - start threshold: If we are already in the loss state
+   * and have not yet retransmitted anything. The condition may arise in case we
+   * are not able to retransmit anything because of local congestion.
+   */
+
+  if (m_tcb->m_congState != TcpSocketState::CA_LOSS)
+    {
+      m_tcb->m_congState = TcpSocketState::CA_LOSS;
+      m_tcb->m_ssThresh = m_congestionControl->GetSsThresh (m_tcb, BytesInFlight ());
+      m_tcb->m_cWnd = m_tcb->m_segmentSize;
+    }
+
+  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
   m_dupAckCount = 0;
-  DoRetransmit (); // Retransmit the packet
+
+  NS_LOG_DEBUG ("RTO. Reset cwnd to " <<  m_tcb->m_cWnd << ", ssthresh to " <<
+                m_tcb->m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
+  DoRetransmit ();                          // Retransmit the packet
 }
 
 void
@@ -2388,7 +2988,7 @@
   // Retransmit SYN packet
   if (m_state == SYN_SENT)
     {
-      if (m_cnCount > 0)
+      if (m_synCount > 0)
         {
           SendEmptyPacket (TcpHeader::SYN);
         }
@@ -2398,6 +2998,19 @@
         }
       return;
     }
+
+  if (m_dataRetrCount == 0)
+    {
+      NS_LOG_INFO ("No more data retries available. Dropping connection");
+      NotifyErrorClose ();
+      DeallocateEndPoint ();
+      return;
+    }
+  else
+    {
+      --m_dataRetrCount;
+    }
+
   // Retransmit non-data packet: Only if in FIN_WAIT_1 or CLOSING state
   if (m_txBuffer->Size () == 0)
     {
@@ -2407,12 +3020,15 @@
         }
       return;
     }
+
   // Retransmit a data packet: Call SendDataPacket
-  NS_LOG_LOGIC ("TcpSocketBase " << this << " retxing seq " << m_txBuffer->HeadSequence ());
-  uint32_t sz = SendDataPacket (m_txBuffer->HeadSequence (), m_segmentSize, true);
+  uint32_t sz = SendDataPacket (m_txBuffer->HeadSequence (), m_tcb->m_segmentSize, true);
+  ++m_retransOut;
+
   // In case of RTO, advance m_nextTxSequence
   m_nextTxSequence = std::max (m_nextTxSequence.Get (), m_txBuffer->HeadSequence () + sz);
 
+  NS_LOG_DEBUG ("retxing seq " << m_txBuffer->HeadSequence ());
 }
 
 void
@@ -2430,7 +3046,7 @@
 void
 TcpSocketBase::TimeWait ()
 {
-  NS_LOG_INFO (TcpStateName[m_state] << " -> TIME_WAIT");
+  NS_LOG_DEBUG (TcpStateName[m_state] << " -> TIME_WAIT");
   m_state = TIME_WAIT;
   CancelAllTimers ();
   // Move from TIME_WAIT to CLOSED after 2*MSL. Max segment lifetime is 2 min
@@ -2444,6 +3060,7 @@
 void
 TcpSocketBase::SetSndBufSize (uint32_t size)
 {
+  NS_LOG_FUNCTION (this << size);
   m_txBuffer->SetMaxBufferSize (size);
 }
 
@@ -2456,7 +3073,18 @@
 void
 TcpSocketBase::SetRcvBufSize (uint32_t size)
 {
+  NS_LOG_FUNCTION (this << size);
+  uint32_t oldSize = GetRcvBufSize ();
+
   m_rxBuffer->SetMaxBufferSize (size);
+
+  /* The size has (manually) increased. Actively inform the other end to prevent
+   * stale zero-window states.
+   */
+  if (oldSize < size && m_connected)
+    {
+      SendEmptyPacket (TcpHeader::ACK);
+    }
 }
 
 uint32_t
@@ -2468,19 +3096,22 @@
 void
 TcpSocketBase::SetSegSize (uint32_t size)
 {
-  m_segmentSize = size;
+  NS_LOG_FUNCTION (this << size);
+  m_tcb->m_segmentSize = size;
+
   NS_ABORT_MSG_UNLESS (m_state == CLOSED, "Cannot change segment size dynamically.");
 }
 
 uint32_t
 TcpSocketBase::GetSegSize (void) const
 {
-  return m_segmentSize;
+  return m_tcb->m_segmentSize;
 }
 
 void
 TcpSocketBase::SetConnTimeout (Time timeout)
 {
+  NS_LOG_FUNCTION (this << timeout);
   m_cnTimeout = timeout;
 }
 
@@ -2491,20 +3122,36 @@
 }
 
 void
-TcpSocketBase::SetConnCount (uint32_t count)
+TcpSocketBase::SetSynRetries (uint32_t count)
 {
-  m_cnRetries = count;
+  NS_LOG_FUNCTION (this << count);
+  m_synRetries = count;
 }
 
 uint32_t
-TcpSocketBase::GetConnCount (void) const
+TcpSocketBase::GetSynRetries (void) const
 {
-  return m_cnRetries;
+  return m_synRetries;
+}
+
+void
+TcpSocketBase::SetDataRetries (uint32_t retries)
+{
+  NS_LOG_FUNCTION (this << retries);
+  m_dataRetries = retries;
+}
+
+uint32_t
+TcpSocketBase::GetDataRetries (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_dataRetries;
 }
 
 void
 TcpSocketBase::SetDelAckTimeout (Time timeout)
 {
+  NS_LOG_FUNCTION (this << timeout);
   m_delAckTimeout = timeout;
 }
 
@@ -2517,6 +3164,7 @@
 void
 TcpSocketBase::SetDelAckMaxCount (uint32_t count)
 {
+  NS_LOG_FUNCTION (this << count);
   m_delAckMaxCount = count;
 }
 
@@ -2529,6 +3177,7 @@
 void
 TcpSocketBase::SetTcpNoDelay (bool noDelay)
 {
+  NS_LOG_FUNCTION (this << noDelay);
   m_noDelay = noDelay;
 }
 
@@ -2541,6 +3190,7 @@
 void
 TcpSocketBase::SetPersistTimeout (Time timeout)
 {
+  NS_LOG_FUNCTION (this << timeout);
   m_persistTimeout = timeout;
 }
 
@@ -2564,36 +3214,6 @@
 }
 
 void
-TcpSocketBase::ReadOptions (const TcpHeader& header)
-{
-  NS_LOG_FUNCTION (this << header);
-
-  if ((header.GetFlags () & TcpHeader::SYN))
-    {
-      if (m_winScalingEnabled)
-        {
-          m_winScalingEnabled = false;
-
-          if (header.HasOption (TcpOption::WINSCALE))
-            {
-              m_winScalingEnabled = true;
-              ProcessOptionWScale (header.GetOption (TcpOption::WINSCALE));
-              ScaleSsThresh (m_sndScaleFactor);
-            }
-        }
-    }
-
-  bool timestampAttribute = m_timestampEnabled;
-  m_timestampEnabled = false;
-
-  if (header.HasOption (TcpOption::TS) && timestampAttribute)
-    {
-      m_timestampEnabled = true;
-      ProcessOptionTimestamp (header.GetOption (TcpOption::TS));
-    }
-}
-
-void
 TcpSocketBase::AddOptions (TcpHeader& header)
 {
   NS_LOG_FUNCTION (this << header);
@@ -2619,16 +3239,16 @@
 
   // In naming, we do the contrary of RFC 1323. The received scaling factor
   // is Rcv.Wind.Scale (and not Snd.Wind.Scale)
-  m_rcvScaleFactor = ws->GetScale ();
+  m_sndWindShift = ws->GetScale ();
 
-  if (m_rcvScaleFactor > 14)
+  if (m_sndWindShift > 14)
     {
-      NS_LOG_WARN ("Possible error; m_rcvScaleFactor exceeds 14: " << m_rcvScaleFactor);
-      m_rcvScaleFactor = 14;
+      NS_LOG_WARN ("Possible error; m_sndWindShift exceeds 14: " << m_sndWindShift);
+      m_sndWindShift = 14;
     }
 
   NS_LOG_INFO (m_node->GetId () << " Received a scale factor of " <<
-                 static_cast<int> (m_rcvScaleFactor));
+               static_cast<int> (m_sndWindShift));
 }
 
 uint8_t
@@ -2659,29 +3279,34 @@
 TcpSocketBase::AddOptionWScale (TcpHeader &header)
 {
   NS_LOG_FUNCTION (this << header);
-  NS_ASSERT(header.GetFlags () & TcpHeader::SYN);
+  NS_ASSERT (header.GetFlags () & TcpHeader::SYN);
 
   Ptr<TcpOptionWinScale> option = CreateObject<TcpOptionWinScale> ();
 
   // In naming, we do the contrary of RFC 1323. The sended scaling factor
   // is Snd.Wind.Scale (and not Rcv.Wind.Scale)
 
-  m_sndScaleFactor = CalculateWScale ();
-  option->SetScale (m_sndScaleFactor);
+  m_rcvWindShift = CalculateWScale ();
+  option->SetScale (m_rcvWindShift);
 
   header.AppendOption (option);
 
   NS_LOG_INFO (m_node->GetId () << " Send a scaling factor of " <<
-                 static_cast<int> (m_sndScaleFactor));
+               static_cast<int> (m_rcvWindShift));
 }
 
 void
-TcpSocketBase::ProcessOptionTimestamp (const Ptr<const TcpOption> option)
+TcpSocketBase::ProcessOptionTimestamp (const Ptr<const TcpOption> option,
+                                       const SequenceNumber32 &seq)
 {
   NS_LOG_FUNCTION (this << option);
 
   Ptr<const TcpOptionTS> ts = DynamicCast<const TcpOptionTS> (option);
-  m_timestampToEcho = ts->GetTimestamp ();
+
+  if (seq == m_rxBuffer->NextRxSequence () && seq <= m_highTxAck)
+    {
+      m_timestampToEcho = ts->GetTimestamp ();
+    }
 
   NS_LOG_INFO (m_node->GetId () << " Got timestamp=" <<
                m_timestampToEcho << " and Echo="     << ts->GetEcho ());
@@ -2708,19 +3333,19 @@
   //  If the connection is not established, the window size is always
   //  updated
   uint32_t receivedWindow = header.GetWindowSize ();
-  receivedWindow <<= m_rcvScaleFactor;
-  NS_LOG_DEBUG ("Received (scaled) window is " << receivedWindow << " bytes");
+  receivedWindow <<= m_sndWindShift;
+  NS_LOG_INFO ("Received (scaled) window is " << receivedWindow << " bytes");
   if (m_state < ESTABLISHED)
     {
       m_rWnd = receivedWindow;
-      NS_LOG_DEBUG ("State less than ESTABLISHED; updating rWnd to " << m_rWnd);
+      NS_LOG_LOGIC ("State less than ESTABLISHED; updating rWnd to " << m_rWnd);
       return;
     }
 
   // Test for conditions that allow updating of the window
-  // 1) segment contains new data (advancing the right edge of the receive 
-  // buffer), 
-  // 2) segment does not contain new data but the segment acks new data 
+  // 1) segment contains new data (advancing the right edge of the receive
+  // buffer),
+  // 2) segment does not contain new data but the segment acks new data
   // (highest sequence number acked advances), or
   // 3) the advertised window is larger than the current send window
   bool update = false;
@@ -2742,7 +3367,7 @@
   if (update == true)
     {
       m_rWnd = receivedWindow;
-      NS_LOG_DEBUG ("updating rWnd to " << m_rWnd);
+      NS_LOG_LOGIC ("updating rWnd to " << m_rWnd);
     }
 }
 
@@ -2784,15 +3409,63 @@
   return m_rxBuffer;
 }
 
+void
+TcpSocketBase::UpdateCwnd (uint32_t oldValue, uint32_t newValue)
+{
+  m_cWndTrace (oldValue, newValue);
+}
+
+void
+TcpSocketBase::UpdateSsThresh (uint32_t oldValue, uint32_t newValue)
+{
+  m_ssThTrace (oldValue, newValue);
+}
+
+void
+TcpSocketBase::UpdateCongState (TcpSocketState::TcpCongState_t oldValue,
+                                TcpSocketState::TcpCongState_t newValue)
+{
+  m_congStateTrace (oldValue, newValue);
+}
+
+void
+TcpSocketBase::SetCongestionControlAlgorithm (Ptr<TcpCongestionOps> algo)
+{
+  NS_LOG_FUNCTION (this << algo);
+  m_congestionControl = algo;
+}
+
+Ptr<TcpSocketBase>
+TcpSocketBase::Fork (void)
+{
+  return CopyObject<TcpSocketBase> (this);
+}
+
+uint32_t
+TcpSocketBase::SafeSubtraction (uint32_t a, uint32_t b)
+{
+  if (a > b)
+    {
+      return a-b;
+    }
+
+  return 0;
+}
 
 //RttHistory methods
 RttHistory::RttHistory (SequenceNumber32 s, uint32_t c, Time t)
-  : seq (s), count (c), time (t), retx (false)
+  : seq (s),
+    count (c),
+    time (t),
+    retx (false)
 {
 }
 
 RttHistory::RttHistory (const RttHistory& h)
-  : seq (h.seq), count (h.count), time (h.time), retx (h.retx)
+  : seq (h.seq),
+    count (h.count),
+    time (h.time),
+    retx (h.retx)
 {
 }
 
diff -Naur ns-3.24.1/src/internet/model/tcp-socket-base.h ns-3.25/src/internet/model/tcp-socket-base.h
--- ns-3.24.1/src/internet/model/tcp-socket-base.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-socket-base.h	2016-03-23 21:36:53.000000000 -0700
@@ -36,6 +36,7 @@
 #include "tcp-tx-buffer.h"
 #include "tcp-rx-buffer.h"
 #include "rtt-estimator.h"
+#include "tcp-congestion-ops.h"
 
 namespace ns3 {
 
@@ -51,7 +52,8 @@
  *
  * \brief Helper class to store RTT measurements
  */
-class RttHistory {
+class RttHistory
+{
 public:
   /**
    * \brief Constructor - builds an RttHistory with the given parameters
@@ -76,6 +78,96 @@
 typedef std::deque<RttHistory> RttHistory_t;
 
 /**
+ * \brief Data structure that records the congestion state of a connection
+ *
+ * In this data structure, basic informations that should be passed between
+ * socket and the congestion control algorithm are saved. Through the code,
+ * it will be referred as Transmission Control Block (TCB), but there are some
+ * differencies. In the RFCs, the TCB contains all the variables that defines
+ * a connection, while we preferred to maintain in this class only the values
+ * that should be exchanged between socket and other parts, like congestion
+ * control algorithms.
+ *
+ */
+class TcpSocketState : public Object
+{
+public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  TcpSocketState ();
+  TcpSocketState (const TcpSocketState &other);
+
+  /**
+   * \brief Definition of the Congestion state machine
+   *
+   * The design of this state machine is taken from Linux v4.0, but it has been
+   * maintained in the Linux mainline from ages. It basically avoids to maintain
+   * a lot of boolean variables, and it allows to check the transitions from
+   * different algorithm in a cleaner way.
+   *
+   * These states represent the situation from a congestion control point of view:
+   * in fact, apart the CA_OPEN state, the other states represent a situation in
+   * which there is a congestion, and different actions should be taken,
+   * depending on the case.
+   *
+   */
+  typedef enum
+  {
+    CA_OPEN,      /**< Normal state, no dubious events */
+    CA_DISORDER,  /**< In all the respects it is "Open",
+                    *  but requires a bit more attention. It is entered when
+                    *  we see some SACKs or dupacks. It is split of "Open" */
+    CA_CWR,       /**< cWnd was reduced due to some Congestion Notification event.
+                    *  It can be ECN, ICMP source quench, local device congestion.
+                    *  Not used in NS-3 right now. */
+    CA_RECOVERY,  /**< CWND was reduced, we are fast-retransmitting. */
+    CA_LOSS,      /**< CWND was reduced due to RTO timeout or SACK reneging. */
+    CA_LAST_STATE /**< Used only in debug messages */
+  } TcpCongState_t;
+
+  /**
+   * \ingroup tcp
+   * TracedValue Callback signature for TcpCongState_t
+   *
+   * \param [in] oldValue original value of the traced variable
+   * \param [in] newValue new value of the traced variable
+   */
+  typedef void (* TcpCongStatesTracedValueCallback)(const TcpCongState_t oldValue,
+                                                    const TcpCongState_t newValue);
+
+  /**
+   * \brief Literal names of TCP states for use in log messages
+   */
+  static const char* const TcpCongStateName[TcpSocketState::CA_LAST_STATE];
+
+  // Congestion control
+  TracedValue<uint32_t>  m_cWnd;            //!< Congestion window
+  TracedValue<uint32_t>  m_ssThresh;        //!< Slow start threshold
+  uint32_t               m_initialCWnd;     //!< Initial cWnd value
+  uint32_t               m_initialSsThresh; //!< Initial Slow Start Threshold value
+
+  // Segment
+  uint32_t               m_segmentSize;     //!< Segment size
+
+  TracedValue<TcpCongState_t> m_congState;    //!< State in the Congestion state machine
+
+  /**
+   * \brief Get cwnd in segments rather than bytes
+   *
+   * \return Congestion window in segments
+   */
+  uint32_t GetCwndInSegments () const
+  {
+    return m_cWnd / m_segmentSize;
+  }
+};
+
+/**
  * \ingroup socket
  * \ingroup tcp
  *
@@ -87,6 +179,65 @@
  * provides connection orientation and sliding window flow control. Part of
  * this class is modified from the original NS-3 TCP socket implementation
  * (TcpSocketImpl) by Raj Bhattacharjea <raj.b@gatech.edu> of Georgia Tech.
+ *
+ * Congestion state machine
+ * ---------------------------
+ *
+ * The socket maintains two state machines; the TCP one, and another called
+ * "Congestion state machine", which keeps track of the phase we are in. Currently,
+ * ns-3 manages the states:
+ *
+ * - CA_OPEN
+ * - CA_DISORDER
+ * - CA_RECOVERY
+ * - CA_LOSS
+ *
+ * Another one (CA_CWR) is present but not used. For more information, see
+ * the TcpCongState_t documentation.
+ *
+ * Congestion control interface
+ * ---------------------------
+ *
+ * Congestion control, unlike older releases of ns-3, has been splitted from
+ * TcpSocketBase. In particular, each congestion control is now a subclass of
+ * the main TcpCongestionOps class. Switching between congestion algorithm is
+ * now a matter of setting a pointer into the TcpSocketBase class.
+ *
+ * The variables needed to congestion control classes to operate correctly have
+ * been moved inside the TcpSocketState class. It contains information on the
+ * congestion window, slow start threshold, segment size and the state of the
+ * Congestion state machine.
+ *
+ * To track the trace inside the TcpSocketState class, a "forward" technique is
+ * used, which consists in chaining callbacks from TcpSocketState to TcpSocketBase
+ * (see for example cWnd trace source).
+ *
+ * Fast retransmit
+ * ---------------------------
+ *
+ * The fast retransmit enhancement is introduced in RFC 2581 and updated in
+ * RFC 5681. It basically reduces the time a sender waits before retransmitting
+ * a lost segment, through the assumption that if it receives a certain number
+ * of duplicate ACKs, a segment has been lost and it can be retransmitted.
+ * Usually it is coupled with the Limited Transmit algorithm, defined in
+ * RFC 3042.
+ *
+ * In ns-3, these algorithms are included in this class, and it is implemented inside
+ * the ReceivedAck method. The attribute which manages the number of dup ACKs
+ * necessary to start the fast retransmit algorithm is named "ReTxThreshold",
+ * and its default value is 3, while the Limited Transmit one can be enabled
+ * by setting the attribute "LimitedTransmit" to true.
+ *
+ * Fast recovery
+ * --------------------------
+ *
+ * The fast recovery algorithm is introduced RFC 2001, and it basically
+ * avoids to reset cWnd to 1 segment after sensing a loss on the channel. Instead,
+ * the slow start threshold is halved, and the cWnd is set equal to such value,
+ * plus segments for the cWnd inflation.
+ *
+ * The algorithm is implemented in the ReceivedAck method.
+ *
  */
 class TcpSocketBase : public TcpSocket
 {
@@ -97,6 +248,15 @@
    * \return the object TypeId
    */
   static TypeId GetTypeId (void);
+
+  /**
+   * \brief Get the instance TypeId
+   * \return the instance TypeId
+   */
+  virtual TypeId GetInstanceTypeId () const;
+
+  friend class TcpGeneralTest;
+
   /**
    * Create an unbound TCP socket
    */
@@ -166,6 +326,49 @@
    */
   Ptr<TcpRxBuffer> GetRxBuffer (void) const;
 
+  /**
+   * \brief Callback pointer for cWnd trace chaining
+   */
+  TracedCallback<uint32_t, uint32_t> m_cWndTrace;
+
+  /**
+   * \brief Callback pointer for ssTh trace chaining
+   */
+  TracedCallback<uint32_t, uint32_t> m_ssThTrace;
+
+  /**
+   * \brief Callback pointer for congestion state trace chaining
+   */
+  TracedCallback<TcpSocketState::TcpCongState_t, TcpSocketState::TcpCongState_t> m_congStateTrace;
+
+  /**
+   * \brief Callback function to hook to TcpSocketState congestion window
+   * \param oldValue old cWnd value
+   * \param newValue new cWnd value
+   */
+  void UpdateCwnd (uint32_t oldValue, uint32_t newValue);
+
+  /**
+   * \brief Callback function to hook to TcpSocketState slow start threshold
+   * \param oldValue old ssTh value
+   * \param newValue new ssTh value
+   */
+  void UpdateSsThresh (uint32_t oldValue, uint32_t newValue);
+
+  /**
+   * \brief Callback function to hook to TcpSocketState congestion state
+   * \param oldValue old congestion state value
+   * \param newValue new congestion state value
+   */
+  void UpdateCongState (TcpSocketState::TcpCongState_t oldValue,
+                        TcpSocketState::TcpCongState_t newValue);
+
+  /**
+   * \brief Install a congestion control algorithm on this socket
+   *
+   * \param algo Algorithm to be installed
+   */
+  void SetCongestionControlAlgorithm (Ptr<TcpCongestionOps> algo);
 
   // Necessary implementations of null functions from ns3::Socket
   virtual enum SocketErrno GetErrno (void) const;    // returns m_errno
@@ -186,8 +389,19 @@
   virtual uint32_t GetTxAvailable (void) const; // Available Tx buffer size
   virtual uint32_t GetRxAvailable (void) const; // Available-to-read data size, i.e. value of m_rxAvailable
   virtual int GetSockName (Address &address) const; // Return local addr:port in address
+  virtual int GetPeerName (Address &address) const;
   virtual void BindToNetDevice (Ptr<NetDevice> netdevice); // NetDevice with my m_endPoint
 
+  /**
+   * TracedCallback signature for tcp packet transmission or reception events.
+   *
+   * \param [in] packet The packet.
+   * \param [in] ipv4
+   * \param [in] interface
+   */
+  typedef void (* TcpTxRxTracedCallback)(const Ptr<const Packet> packet, const TcpHeader& header,
+                                         const Ptr<const TcpSocketBase> socket);
+
 protected:
   // Implementing ns3::TcpSocket -- Attribute get/set
   // inherited, no need to doc
@@ -204,8 +418,10 @@
   virtual uint32_t GetInitialCwnd (void) const;
   virtual void     SetConnTimeout (Time timeout);
   virtual Time     GetConnTimeout (void) const;
-  virtual void     SetConnCount (uint32_t count);
-  virtual uint32_t GetConnCount (void) const;
+  virtual void     SetSynRetries (uint32_t count);
+  virtual uint32_t GetSynRetries (void) const;
+  virtual void     SetDataRetries (uint32_t retries);
+  virtual uint32_t GetDataRetries (void) const;
   virtual void     SetDelAckTimeout (Time timeout);
   virtual Time     GetDelAckTimeout (void) const;
   virtual void     SetDelAckMaxCount (uint32_t count);
@@ -266,7 +482,8 @@
    * \param fromAddress the address of the remote host
    * \param toAddress the address the connection is directed to
    */
-  void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader, const Address& fromAddress, const Address& toAddress);
+  virtual void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader,
+                             const Address& fromAddress, const Address& toAddress);
 
 
 
@@ -355,7 +572,7 @@
    *
    * \param flags the packet's flags
    */
-  void SendEmptyPacket (uint8_t flags);
+  virtual void SendEmptyPacket (uint8_t flags);
 
   /**
    * \brief Send reset and tear down this socket
@@ -502,7 +719,7 @@
    * \brief Return count of number of unacked bytes
    * \returns count of number of unacked bytes
    */
-  virtual uint32_t UnAckDataCount (void);
+  virtual uint32_t UnAckDataCount (void) const;
 
   /**
    * \brief Return total bytes in flight
@@ -514,25 +731,25 @@
    * \brief Return the max possible number of unacked bytes
    * \returns the max possible number of unacked bytes
    */
-  virtual uint32_t Window (void);
+  virtual uint32_t Window (void) const;
 
   /**
    * \brief Return unfilled portion of window
    * \return unfilled portion of window
    */
-  virtual uint32_t AvailableWindow (void);
+  virtual uint32_t AvailableWindow (void) const;
 
   /**
    * \brief The amount of Rx window announced to the peer
    * \returns size of Rx window announced to the peer
    */
-  virtual uint16_t AdvertisedWindowSize (void);
+  virtual uint16_t AdvertisedWindowSize (void) const;
 
   /**
-   * \brief Update the receiver window (RWND) based on the value of the 
+   * \brief Update the receiver window (RWND) based on the value of the
    * window field in the header.
    *
-   * This method suppresses updates unless one of the following three 
+   * This method suppresses updates unless one of the following three
    * conditions holds:  1) segment contains new data (advancing the right
    * edge of the receive buffer), 2) segment does not contain new data
    * but the segment acks new data (highest sequence number acked advances),
@@ -549,7 +766,7 @@
    * \brief Call CopyObject<> to clone me
    * \returns a copy of the socket
    */
-  virtual Ptr<TcpSocketBase> Fork (void) = 0;
+  virtual Ptr<TcpSocketBase> Fork (void);
 
   /**
    * \brief Received an ACK packet
@@ -572,17 +789,22 @@
   virtual void EstimateRtt (const TcpHeader& tcpHeader);
 
   /**
-   * \brief Update buffers w.r.t. ACK
-   * \param seq the sequence number
+   * \brief Update the RTT history, when we send TCP segments
+   *
+   * \param seq The sequence number of the TCP segment
+   * \param sz The segment's size
+   * \param isRetransmission Whether or not the segment is a retransmission
    */
-  virtual void NewAck (SequenceNumber32 const& seq);
+
+  virtual void UpdateRttHistory (const SequenceNumber32 &seq, uint32_t sz,
+                                 bool isRetransmission);
 
   /**
-   * \brief Received dupack (duplicate ACK)
-   * \param tcpHeader the packet's TCP header
-   * \param count counter of duplicate ACKs
+   * \brief Update buffers w.r.t. ACK
+   * \param seq the sequence number
+   * \param resetRTO indicates if RTO should be reset
    */
-  virtual void DupAck (const TcpHeader& tcpHeader, uint32_t count) = 0;
+  virtual void NewAck (SequenceNumber32 const& seq, bool resetRTO);
 
   /**
    * \brief Call Retransmit() upon RTO event
@@ -614,20 +836,6 @@
    */
   virtual void DoRetransmit (void);
 
-  /**
-   * \brief Read TCP options from incoming packets
-   *  
-   * This method sequentially checks each kind of option, and if it
-   * is present in the header, starts its processing.
-   *
-   * To deal with hosts which don't have the option enabled (or
-   * implemented) we disable all options, and then re-enable them
-   * if in the packet there is the option itself.
-   *
-   * \param tcpHeader the packet's TCP header
-   */
-  virtual void ReadOptions (const TcpHeader& tcpHeader);
-
   /** \brief Add options to TcpHeader
    *
    * Test each option, and if it is enabled on our side, add it
@@ -672,9 +880,11 @@
    * to utilize later to calculate RTT.
    *
    * \see EstimateRtt
-   * \param option Option from the packet
+   * \param option Option from the segment
+   * \param seq Sequence number of the segment
    */
-  void ProcessOptionTimestamp (const Ptr<const TcpOption> option);
+  void ProcessOptionTimestamp (const Ptr<const TcpOption> option,
+                               const SequenceNumber32 &seq);
   /**
    * \brief Add the timestamp option to the header
    *
@@ -686,23 +896,15 @@
   void AddOptionTimestamp (TcpHeader& header);
 
   /**
-   * \brief Scale the initial SsThresh value to the correct one
+   * \brief Performs a safe subtraction between a and b (a-b)
    *
-   * Set the initial SsThresh to the largest possible advertised window
-   * according to the sender scale factor.
+   * Safe is used to indicate that, if b>a, the results returned is 0.
    *
-   * \param scaleFactor the sender scale factor
+   * \param a first number
+   * \param b second number
+   * \return 0 if b>0, (a-b) otherwise
    */
-  virtual void ScaleSsThresh (uint8_t scaleFactor);
-
-  /**
-   * \brief Initialize congestion window
-   *
-   * Default cWnd to 1 MSS (RFC2001, sec.1) and must
-   * not be larger than 2 MSS (RFC2581, sec.3.1). Both m_initiaCWnd and
-   * m_segmentSize are set by the attribute system in ns3::TcpSocket.
-   */
-  virtual void InitializeCwnd ();
+  static uint32_t SafeSubtraction (uint32_t a, uint32_t b);
 
 protected:
   // Counters and events
@@ -715,8 +917,10 @@
   uint32_t          m_delAckCount;     //!< Delayed ACK counter
   uint32_t          m_delAckMaxCount;  //!< Number of packet to fire an ACK before delay timeout
   bool              m_noDelay;         //!< Set to true to disable Nagle's algorithm
-  uint32_t          m_cnCount;         //!< Count of remaining connection retries
-  uint32_t          m_cnRetries;       //!< Number of connection retries before giving up
+  uint32_t          m_synCount;        //!< Count of remaining connection retries
+  uint32_t          m_synRetries;      //!< Number of connection attempts
+  uint32_t          m_dataRetrCount;   //!< Count of remaining data retransmission attempts
+  uint32_t          m_dataRetries;     //!< Number of data retransmission attempts
   TracedValue<Time> m_rto;             //!< Retransmit timeout
   Time              m_minRto;          //!< minimum value of the Retransmit timeout
   Time              m_clockGranularity; //!< Clock Granularity used in RTO calcs
@@ -744,7 +948,7 @@
 
   // State-related attributes
   TracedValue<TcpStates_t> m_state;         //!< TCP state
-  enum SocketErrno         m_errno;         //!< Socket error code
+  mutable enum SocketErrno m_errno;         //!< Socket error code
   bool                     m_closeNotified; //!< Told app to close socket
   bool                     m_closeOnEmpty;  //!< Close socket upon tx buffer emptied
   bool                     m_shutdownSend;  //!< Send no longer allowed
@@ -753,29 +957,55 @@
   double                   m_msl;           //!< Max segment lifetime
 
   // Window management
-  uint32_t              m_segmentSize; //!< Segment size
   uint16_t              m_maxWinSize;  //!< Maximum window size to advertise
   TracedValue<uint32_t> m_rWnd;        //!< Receiver window (RCV.WND in RFC793)
   TracedValue<SequenceNumber32> m_highRxMark;     //!< Highest seqno received
+  SequenceNumber32 m_highTxAck;                   //!< Highest ack sent
   TracedValue<SequenceNumber32> m_highRxAckMark;  //!< Highest ack received
-
-  // Congestion control
-  TracedValue<uint32_t> m_cWnd;     //!< Congestion window
-  TracedValue<uint32_t> m_ssThresh; //!< Slow start threshold
-  uint32_t               m_initialCWnd;      //!< Initial cWnd value
-  uint32_t               m_initialSsThresh;  //!< Initial Slow Start Threshold value
+  uint32_t                      m_bytesAckedNotProcessed;  //!< Bytes acked, but not processed
+  TracedValue<uint32_t>         m_bytesInFlight; //!< Bytes in flight
 
   // Options
-  bool    m_winScalingEnabled;    //!< Window Scale option enabled
-  uint8_t m_sndScaleFactor;       //!< Sent Window Scale (i.e., the one of the node)
-  uint8_t m_rcvScaleFactor;       //!< Received Window Scale (i.e., the one of the peer)
+  bool    m_winScalingEnabled; //!< Window Scale option enabled (RFC 7323)
+  uint8_t m_rcvWindShift;      //!< Window shift to apply to outgoing segments
+  uint8_t m_sndWindShift;      //!< Window shift to apply to incoming segments
 
   bool     m_timestampEnabled;    //!< Timestamp option enabled
   uint32_t m_timestampToEcho;     //!< Timestamp to echo
 
   EventId m_sendPendingDataEvent; //!< micro-delay event to send pending data
+
+  // Fast Retransmit and Recovery
+  SequenceNumber32       m_recover;      //!< Previous highest Tx seqnum for fast recovery
+  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
+  bool                   m_limitedTx;    //!< perform limited transmit
+  uint32_t               m_retransOut;   //!< Number of retransmission in this window
+
+  // Transmission Control Block
+  Ptr<TcpSocketState>    m_tcb;               //!< Congestion control informations
+  Ptr<TcpCongestionOps>  m_congestionControl; //!< Congestion control
+
+  // Guesses over the other connection end
+  bool m_isFirstPartialAck; //!< First partial ACK during RECOVERY
+
+  // The following two traces pass a packet with a TCP header
+  TracedCallback<Ptr<const Packet>, const TcpHeader&,
+                 Ptr<const TcpSocketBase> > m_txTrace; //!< Trace of transmitted packets
+
+  TracedCallback<Ptr<const Packet>, const TcpHeader&,
+                 Ptr<const TcpSocketBase> > m_rxTrace; //!< Trace of received packets
 };
 
+/**
+ * \ingroup tcp
+ * TracedValue Callback signature for TcpCongState_t
+ *
+ * \param [in] oldValue original value of the traced variable
+ * \param [in] newValue new value of the traced variable
+ */
+typedef void (* TcpCongStatesTracedValueCallback)(const TcpSocketState::TcpCongState_t oldValue,
+                                                  const TcpSocketState::TcpCongState_t newValue);
+
 } // namespace ns3
 
 #endif /* TCP_SOCKET_BASE_H */
diff -Naur ns-3.24.1/src/internet/model/tcp-socket.cc ns-3.25/src/internet/model/tcp-socket.cc
--- ns-3.24.1/src/internet/model/tcp-socket.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-socket.cc	2016-03-23 21:36:53.000000000 -0700
@@ -18,6 +18,8 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 
+#define __STDC_LIMIT_MACROS
+
 #include "ns3/object.h"
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
@@ -65,7 +67,7 @@
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("InitialSlowStartThreshold",
                    "TCP initial slow start threshold (bytes)",
-                   UintegerValue (0xffff),
+                   UintegerValue (UINT32_MAX),
                    MakeUintegerAccessor (&TcpSocket::GetInitialSSThresh,
                                          &TcpSocket::SetInitialSSThresh),
                    MakeUintegerChecker<uint32_t> ())
@@ -82,10 +84,17 @@
                                      &TcpSocket::SetConnTimeout),
                    MakeTimeChecker ())
     .AddAttribute ("ConnCount",
-                   "Number of connection attempts (SYN retransmissions) before returning failure",
+                   "Number of connection attempts (SYN retransmissions) before "
+                   "returning failure",
+                   UintegerValue (6),
+                   MakeUintegerAccessor (&TcpSocket::GetSynRetries,
+                                         &TcpSocket::SetSynRetries),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("DataRetries",
+                   "Number of data retransmission attempts",
                    UintegerValue (6),
-                   MakeUintegerAccessor (&TcpSocket::GetConnCount,
-                                         &TcpSocket::SetConnCount),
+                   MakeUintegerAccessor (&TcpSocket::GetDataRetries,
+                                         &TcpSocket::SetDataRetries),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("DelAckTimeout",
                    "Timeout value for TCP delayed acks, in seconds",
diff -Naur ns-3.24.1/src/internet/model/tcp-socket.h ns-3.25/src/internet/model/tcp-socket.h
--- ns-3.24.1/src/internet/model/tcp-socket.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-socket.h	2016-03-23 21:36:53.000000000 -0700
@@ -171,13 +171,25 @@
    * \brief Set the number of connection retries before giving up.
    * \param count the number of connection retries
    */
-  virtual void SetConnCount (uint32_t count) = 0;
+  virtual void SetSynRetries (uint32_t count) = 0;
 
   /**
    * \brief Get the number of connection retries before giving up.
    * \returns the number of connection retries
    */
-  virtual uint32_t GetConnCount (void) const = 0;
+  virtual uint32_t GetSynRetries (void) const = 0;
+
+  /**
+   * \brief Set the number of data transmission retries before giving up.
+   * \param count the number of data transmission retries
+   */
+  virtual void SetDataRetries (uint32_t retries) = 0;
+
+  /**
+   * \brief Get the number of data transmission retries before giving up.
+   * \returns the number of data transmission retries
+   */
+  virtual uint32_t GetDataRetries (void) const = 0;
 
   /**
    * \brief Set the time to delay an ACK.
diff -Naur ns-3.24.1/src/internet/model/tcp-tahoe.cc ns-3.25/src/internet/model/tcp-tahoe.cc
--- ns-3.24.1/src/internet/model/tcp-tahoe.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-tahoe.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,135 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#define NS_LOG_APPEND_CONTEXT \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
-
-#include "tcp-tahoe.h"
-#include "ns3/log.h"
-#include "ns3/trace-source-accessor.h"
-#include "ns3/simulator.h"
-#include "ns3/abort.h"
-#include "ns3/node.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("TcpTahoe");
-
-NS_OBJECT_ENSURE_REGISTERED (TcpTahoe);
-
-TypeId
-TcpTahoe::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::TcpTahoe")
-    .SetParent<TcpSocketBase> ()
-    .SetGroupName ("Internet")
-    .AddConstructor<TcpTahoe> ()
-    .AddAttribute ("ReTxThreshold", "Threshold for fast retransmit",
-                    UintegerValue (3),
-                    MakeUintegerAccessor (&TcpTahoe::m_retxThresh),
-                    MakeUintegerChecker<uint32_t> ())
-  ;
-  return tid;
-}
-
-TcpTahoe::TcpTahoe (void) : m_retxThresh (3)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-TcpTahoe::TcpTahoe (const TcpTahoe& sock)
-  : TcpSocketBase (sock),
-    m_retxThresh (sock.m_retxThresh)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("Invoked the copy constructor");
-}
-
-TcpTahoe::~TcpTahoe (void)
-{
-}
-
-Ptr<TcpSocketBase>
-TcpTahoe::Fork (void)
-{
-  return CopyObject<TcpTahoe> (this);
-}
-
-/* New ACK (up to seqnum seq) received. Increase cwnd and call TcpSocketBase::NewAck() */
-void
-TcpTahoe::NewAck (SequenceNumber32 const& seq)
-{
-  NS_LOG_FUNCTION (this << seq);
-  NS_LOG_LOGIC ("TcpTahoe received ACK for seq " << seq <<
-                " cwnd " << m_cWnd <<
-                " ssthresh " << m_ssThresh);
-  if (m_cWnd < m_ssThresh)
-    { // Slow start mode, add one segSize to cWnd. Default m_ssThresh is 65535. (RFC2001, sec.1)
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-  else
-    { // Congestion avoidance mode, increase by (segSize*segSize)/cwnd. (RFC2581, sec.3.1)
-      // To increase cwnd for one segSize per RTT, it should be (ackBytes*segSize)/cwnd
-      double adder = static_cast<double> (m_segmentSize * m_segmentSize) / m_cWnd.Get ();
-      adder = std::max (1.0, adder);
-      m_cWnd += static_cast<uint32_t> (adder);
-      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-  TcpSocketBase::NewAck (seq);           // Complete newAck processing
-}
-
-/* Cut down ssthresh upon triple dupack */
-void
-TcpTahoe::DupAck (const TcpHeader& t, uint32_t count)
-{
-  NS_LOG_FUNCTION (this << "t " << count);
-  if (count == m_retxThresh)
-    { // triple duplicate ack triggers fast retransmit (RFC2001, sec.3)
-      NS_LOG_INFO ("Triple Dup Ack: old ssthresh " << m_ssThresh << " cwnd " << m_cWnd);
-      // fast retransmit in Tahoe means triggering RTO earlier. Tx is restarted
-      // from the highest ack and run slow start again.
-      // (Fall & Floyd 1996, sec.1)
-      m_ssThresh = std::max (static_cast<unsigned> (m_cWnd / 2), m_segmentSize * 2);  // Half ssthresh
-      m_cWnd = m_segmentSize; // Run slow start again
-      m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
-      NS_LOG_INFO ("Triple Dup Ack: new ssthresh " << m_ssThresh << " cwnd " << m_cWnd);
-      NS_LOG_LOGIC ("Triple Dup Ack: retransmit missing segment at " << Simulator::Now ().GetSeconds ());
-      DoRetransmit ();
-    }
-}
-
-/* Retransmit timeout */
-void TcpTahoe::Retransmit (void)
-{
-  NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC (this << " ReTxTimeout Expired at time " << Simulator::Now ().GetSeconds ());
-  // If erroneous timeout in closed/timed-wait state, just return
-  if (m_state == CLOSED || m_state == TIME_WAIT) return;
-  // If all data are received (non-closing socket and nothing to send), just return
-  if (m_state <= ESTABLISHED && m_txBuffer->HeadSequence () >= m_highTxMark) return;
-
-  m_ssThresh = std::max (static_cast<unsigned> (m_cWnd / 2), m_segmentSize * 2);  // Half ssthresh
-  m_cWnd = m_segmentSize;                   // Set cwnd to 1 segSize (RFC2001, sec.2)
-  m_nextTxSequence = m_txBuffer->HeadSequence (); // Restart from highest Ack
-  DoRetransmit ();                          // Retransmit the packet
-}
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-tahoe.h ns-3.25/src/internet/model/tcp-tahoe.h
--- ns-3.24.1/src/internet/model/tcp-tahoe.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-tahoe.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,73 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2010 Adrian Sai-wah Tam
- *
- * 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: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
- */
-
-#ifndef TCP_TAHOE_H
-#define TCP_TAHOE_H
-
-#include "tcp-socket-base.h"
-
-namespace ns3 {
-
-/**
- * \ingroup socket
- * \ingroup tcp
- *
- * \brief An implementation of a stream socket using TCP.
- *
- * This class contains the Tahoe implementation of TCP. Tahoe is not officially
- * published in RFC. The reference for implementing this is based on
- * Kevin Fall and Sally Floyd, "Simulation-based Comparisons of Tahoe, Reno, and SACK TCP", CCR, 1996
- * http://inst.eecs.berkeley.edu/~ee122/fa05/projects/Project2/proj2_spec_files/sacks.pdf
- * In summary, we have slow start, congestion avoidance, and fast retransmit.
- * The implementation of these algorithms are based on W. R. Stevens's book and
- * also \RFC{2001}.
- */
-class TcpTahoe : public TcpSocketBase
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-  /**
-   * Create an unbound tcp socket.
-   */
-  TcpTahoe (void);
-  /**
-   * \brief Copy constructor
-   * \param sock the object to copy
-   */
-  TcpTahoe (const TcpTahoe& sock);
-  virtual ~TcpTahoe (void);
-
-protected:
-  virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpTahoe> to clone me
-  virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
-  virtual void DupAck (const TcpHeader& t, uint32_t count);  // Treat 3 dupack as timeout
-  virtual void Retransmit (void); // Retransmit time out
-
-protected:
-  uint32_t               m_retxThresh;   //!< Fast Retransmit threshold
-};
-
-} // namespace ns3
-
-#endif /* TCP_TAHOE_H */
diff -Naur ns-3.24.1/src/internet/model/tcp-westwood.cc ns-3.25/src/internet/model/tcp-westwood.cc
--- ns-3.24.1/src/internet/model/tcp-westwood.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-westwood.cc	2016-03-23 21:36:53.000000000 -0700
@@ -15,8 +15,9 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>, Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
- * and Greeshma Umapathi
+ * Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>,
+ *          Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
+ *          Greeshma Umapathi
  *
  * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
  * ResiliNets Research Group  http://wiki.ittc.ku.edu/resilinets
@@ -30,307 +31,132 @@
  * US Department of Defense (DoD), and ITTC at The University of Kansas.
  */
 
-#define NS_LOG_APPEND_CONTEXT \
-  if (m_node) { std::clog << Simulator::Now ().GetSeconds () << " [node " << m_node->GetId () << "] "; }
-
 #include "tcp-westwood.h"
 #include "ns3/log.h"
-#include "ns3/trace-source-accessor.h"
 #include "ns3/simulator.h"
-#include "ns3/abort.h"
-#include "ns3/node.h"
-#include "ns3/sequence-number.h"
 #include "rtt-estimator.h"
+#include "tcp-socket-base.h"
 
-namespace ns3 {
+NS_LOG_COMPONENT_DEFINE ("TcpWestwood");
 
-NS_LOG_COMPONENT_DEFINE("TcpWestwood");
+namespace ns3 {
 
-NS_OBJECT_ENSURE_REGISTERED(TcpWestwood);
+NS_OBJECT_ENSURE_REGISTERED (TcpWestwood);
 
 TypeId
 TcpWestwood::GetTypeId (void)
 {
   static TypeId tid = TypeId("ns3::TcpWestwood")
-      .SetParent<TcpSocketBase>()
-      .SetGroupName ("Internet")
-      .AddConstructor<TcpWestwood>()
-      .AddAttribute("FilterType", "Use this to choose no filter or Tustin's approximation filter",
-                    EnumValue(TcpWestwood::TUSTIN), MakeEnumAccessor(&TcpWestwood::m_fType),
-                    MakeEnumChecker(TcpWestwood::NONE, "None", TcpWestwood::TUSTIN, "Tustin"))
-      .AddAttribute("ProtocolType", "Use this to let the code run as Westwood or WestwoodPlus",
-                    EnumValue(TcpWestwood::WESTWOOD),
-                    MakeEnumAccessor(&TcpWestwood::m_pType),
-                    MakeEnumChecker(TcpWestwood::WESTWOOD, "Westwood",TcpWestwood::WESTWOODPLUS, "WestwoodPlus"))
-      .AddTraceSource("EstimatedBW", "The estimated bandwidth",
+    .SetParent<TcpNewReno>()
+    .SetGroupName ("Internet")
+    .AddConstructor<TcpWestwood>()
+    .AddAttribute("FilterType", "Use this to choose no filter or Tustin's approximation filter",
+                  EnumValue(TcpWestwood::TUSTIN), MakeEnumAccessor(&TcpWestwood::m_fType),
+                  MakeEnumChecker(TcpWestwood::NONE, "None", TcpWestwood::TUSTIN, "Tustin"))
+    .AddAttribute("ProtocolType", "Use this to let the code run as Westwood or WestwoodPlus",
+                  EnumValue(TcpWestwood::WESTWOOD),
+                  MakeEnumAccessor(&TcpWestwood::m_pType),
+                  MakeEnumChecker(TcpWestwood::WESTWOOD, "Westwood",TcpWestwood::WESTWOODPLUS, "WestwoodPlus"))
+    .AddTraceSource("EstimatedBW", "The estimated bandwidth",
                     MakeTraceSourceAccessor(&TcpWestwood::m_currentBW),
-                      "ns3::TracedValueCallback::Double");
+                    "ns3::TracedValueCallback::Double")
+  ;
   return tid;
 }
 
 TcpWestwood::TcpWestwood (void) :
-  m_inFastRec(false),
-  m_currentBW(0),
-  m_lastSampleBW(0),
-  m_lastBW(0),
-  m_minRtt(0),
-  m_lastAck(0),
-  m_prevAckNo(0),
-  m_accountedFor(0),
-  m_ackedSegments(0),
-  m_IsCount(false)
+  TcpNewReno (),
+  m_currentBW (0),
+  m_lastSampleBW (0),
+  m_lastBW (0),
+  m_minRtt (Time (0)),
+  m_ackedSegments (0),
+  m_IsCount (false)
 {
   NS_LOG_FUNCTION (this);
 }
 
 TcpWestwood::TcpWestwood (const TcpWestwood& sock) :
-  TcpSocketBase(sock),
-  m_inFastRec(false),
-  m_currentBW(sock.m_currentBW),
-  m_lastSampleBW(sock.m_lastSampleBW),
-  m_lastBW(sock.m_lastBW),
-  m_minRtt(sock.m_minRtt),
-  m_lastAck(sock.m_lastAck),
-  m_prevAckNo(sock.m_prevAckNo),
-  m_accountedFor(sock.m_accountedFor),
-  m_pType(sock.m_pType),
-  m_fType(sock.m_fType),
-  m_IsCount(sock.m_IsCount)
+  TcpNewReno (sock),
+  m_currentBW (sock.m_currentBW),
+  m_lastSampleBW (sock.m_lastSampleBW),
+  m_lastBW (sock.m_lastBW),
+  m_minRtt (Time (0)),
+  m_pType (sock.m_pType),
+  m_fType (sock.m_fType),
+  m_IsCount (sock.m_IsCount)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_LOGIC ("Invoked the copy constructor");
-  NS_LOG_INFO ("m_minRtt at copy constructor" << m_minRtt);
 }
 
 TcpWestwood::~TcpWestwood (void)
 {
 }
 
-Ptr<TcpSocketBase>
-TcpWestwood::Fork (void)
-{
-  NS_LOG_FUNCTION (this);
-  return CopyObject<TcpWestwood>(this);
-}
-
 void
-TcpWestwood::NewAck (const SequenceNumber32& seq)
-{ // Same as Reno
-  NS_LOG_FUNCTION (this << seq);
-  NS_LOG_LOGIC ("TcpWestwood receieved ACK for seq " << seq <<
-                " cwnd " << m_cWnd <<
-                " ssthresh " << m_ssThresh);
-
-  // Check for exit condition of fast recovery
-  if (m_inFastRec)
-    {// First new ACK after fast recovery, reset cwnd as in Reno
-      m_cWnd = m_ssThresh;
-      m_inFastRec = false;
-      NS_LOG_INFO ("Reset cwnd to " << m_cWnd);
-    };
-
-  // Increase of cwnd based on current phase (slow start or congestion avoidance)
-  if (m_cWnd < m_ssThresh)
-    { // Slow start mode, add one segSize to cWnd as in Reno
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("In SlowStart, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-  else
-    { // Congestion avoidance mode, increase by (segSize*segSize)/cwnd as in Reno
-      double adder = static_cast<double> (m_segmentSize * m_segmentSize) / m_cWnd.Get();
-      adder = std::max(1.0, adder);
-      m_cWnd += static_cast<uint32_t>(adder);
-      NS_LOG_INFO ("In CongAvoid, updated to cwnd " << m_cWnd << " ssthresh " << m_ssThresh);
-    }
-
-  // Complete newAck processing
-  TcpSocketBase::NewAck(seq);
-}
-
-void
-TcpWestwood::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
+TcpWestwood::PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
+                        const Time& rtt)
 {
-  NS_LOG_FUNCTION (this);
-  int acked = 0;
-  if ((0 != (tcpHeader.GetFlags () & TcpHeader::ACK)) && tcpHeader.GetAckNumber() >= m_prevAckNo)
-    {// It is a duplicate ACK or a new ACK. Old ACK is ignored.
-      if (m_pType == TcpWestwood::WESTWOOD)
-        {// For Westwood, calculate the number of ACKed segments and estimate the BW
-          acked = CountAck (tcpHeader);
-          EstimateBW (acked, tcpHeader, Time(0));
-        }
-      else if (m_pType == TcpWestwood::WESTWOODPLUS)
-        {// For Weswood+, calculate the number of ACKed segments and update m_ackedSegments
-          if (m_IsCount)
-            {
-              acked = CountAck (tcpHeader);
-              UpdateAckedSegments (acked);
-            }
-        }
-    }
+  NS_LOG_FUNCTION (this << tcb << packetsAcked << rtt);
 
-  TcpSocketBase::ReceivedAck (packet, tcpHeader);
-}
-
-void
-TcpWestwood::EstimateBW (int acked, const TcpHeader& tcpHeader, Time rtt)
-{
-  NS_LOG_FUNCTION (this);
-  if (m_pType == TcpWestwood::WESTWOOD)
-    {
-      // Get the time when the current ACK is received
-      double currentAck = static_cast<double> (Simulator::Now().GetSeconds());
-      // Calculate the BW
-      m_currentBW = acked * m_segmentSize / (currentAck - m_lastAck);
-      // Update the last ACK time
-      m_lastAck = currentAck;
-    }
-  else if (m_pType == TcpWestwood::WESTWOODPLUS)
+  if (rtt.IsZero ())
     {
-      // Calculate the BW
-      m_currentBW = m_ackedSegments * m_segmentSize / rtt.GetSeconds();
-      // Reset m_ackedSegments and m_IsCount for the next sampling
-      m_ackedSegments = 0;
-      m_IsCount = false;
+      NS_LOG_WARN ("RTT measured is zero!");
+      return;
     }
 
-  // Filter the BW sample
-  Filtering();
-}
-
-int
-TcpWestwood::CountAck (const TcpHeader& tcpHeader)
-{
-  NS_LOG_FUNCTION (this);
-
-  // Calculate the number of acknowledged segments based on the received ACK number
-  int cumul_ack = (tcpHeader.GetAckNumber() - m_prevAckNo) / m_segmentSize;
+  m_ackedSegments += packetsAcked;
 
-  if (cumul_ack == 0)
-    {// A DUPACK counts for 1 segment delivered successfully
-      m_accountedFor++;
-      cumul_ack = 1;
+  // Update minRtt
+  if (m_minRtt.IsZero ())
+    {
+      m_minRtt = rtt;
     }
-  if (cumul_ack > 1)
-    {// A delayed ACK or a cumulative ACK after a retransmission
-     // Check how much new data it ACKs
-      if (m_accountedFor >= cumul_ack)
-        {
-          m_accountedFor -= cumul_ack;
-          cumul_ack = 1;
-        }
-      else if (m_accountedFor < cumul_ack)
+  else
+    {
+      if (rtt < m_minRtt)
         {
-          cumul_ack -= m_accountedFor;
-          m_accountedFor = 0;
+          m_minRtt = rtt;
         }
     }
 
-  // Update the previous ACK number
-  m_prevAckNo = tcpHeader.GetAckNumber();
-
-  return cumul_ack;
-}
-
-void
-TcpWestwood::UpdateAckedSegments (int acked)
-{
-  m_ackedSegments += acked;
-}
+  NS_LOG_LOGIC ("MinRtt: " << m_minRtt.GetMilliSeconds () << "ms");
 
-void
-TcpWestwood::DupAck (const TcpHeader& header, uint32_t count)
-{
-  NS_LOG_FUNCTION (this << count << m_cWnd);
-
-  if (count == 3 && !m_inFastRec)
-    {// Triple duplicate ACK triggers fast retransmit
-     // Adjust cwnd and ssthresh based on the estimated BW
-      m_ssThresh = uint32_t(m_currentBW * static_cast<double> (m_minRtt.GetSeconds()));
-      if (m_cWnd > m_ssThresh)
-        {
-          m_cWnd = m_ssThresh;
-        }
-      m_inFastRec = true;
-      NS_LOG_INFO ("Triple dupack. Enter fast recovery mode. Reset cwnd to " << m_cWnd <<", ssthresh to " << m_ssThresh);
-      DoRetransmit ();
+  if (m_pType == TcpWestwood::WESTWOOD)
+    {
+      EstimateBW (rtt, tcb);
     }
-  else if (m_inFastRec)
-    {// Increase cwnd for every additional DUPACK as in Reno
-      m_cWnd += m_segmentSize;
-      NS_LOG_INFO ("Dupack in fast recovery mode. Increase cwnd to " << m_cWnd);
-      if (!m_sendPendingDataEvent.IsRunning ())
+  else if (m_pType == TcpWestwood::WESTWOODPLUS)
+    {
+      if (!(rtt.IsZero () || m_IsCount))
         {
-          SendPendingData (m_connected);
+          m_IsCount = true;
+          m_bwEstimateEvent.Cancel ();
+          m_bwEstimateEvent = Simulator::Schedule (rtt, &TcpWestwood::EstimateBW,
+                                                   this, rtt, tcb);
         }
     }
 }
 
 void
-TcpWestwood::Retransmit (void)
+TcpWestwood::EstimateBW (const Time &rtt, Ptr<TcpSocketState> tcb)
 {
   NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC (this << " ReTxTimeout Expired at time " << Simulator::Now ().GetSeconds ());
-  m_inFastRec = false;
-
-  // If erroneous timeout in closed/timed-wait state, just return
-  if (m_state == CLOSED || m_state == TIME_WAIT)
-    return;
-  // If all data are received, just return
-  if (m_txBuffer->HeadSequence () >= m_nextTxSequence)
-    return;
-
-  // Upon an RTO, adjust cwnd and ssthresh based on the estimated BW
-  m_ssThresh = std::max (static_cast<double> (2 * m_segmentSize), m_currentBW.Get () * static_cast<double> (m_minRtt.GetSeconds ()));
-  m_cWnd = m_segmentSize;
-
-  // Restart from highest ACK
-  m_nextTxSequence = m_txBuffer->HeadSequence ();
-  NS_LOG_INFO ("RTO. Reset cwnd to " << m_cWnd <<
-      ", ssthresh to " << m_ssThresh << ", restart from seqnum " << m_nextTxSequence);
-
-  // Retransmit the packet
-  DoRetransmit ();
-}
 
-void
-TcpWestwood::EstimateRtt (const TcpHeader& tcpHeader)
-{
-  NS_LOG_FUNCTION_NOARGS ();
+  NS_ASSERT (!rtt.IsZero ());
 
-  // Calculate m_lastRtt
-  TcpSocketBase::EstimateRtt (tcpHeader);
+  m_currentBW = m_ackedSegments * tcb->m_segmentSize / rtt.GetSeconds ();
 
-  // Update minRtt
-  if (m_minRtt == Time (0))
-    {
-      m_minRtt = m_lastRtt;
-    }
-  else
+  if (m_pType == TcpWestwood::WESTWOODPLUS)
     {
-      if (m_lastRtt < m_minRtt)
-        {
-          m_minRtt = m_lastRtt;
-        }
+      m_IsCount = false;
     }
 
-  // For Westwood+, start running a clock on the currently estimated RTT if possible
-  // to trigger a new BW sampling event
-  if (m_pType == TcpWestwood::WESTWOODPLUS)
-   {
-     if(m_lastRtt != Time (0) && m_state == ESTABLISHED && !m_IsCount)
-       {
-         m_IsCount = true;
-         m_bwEstimateEvent.Cancel();
-         m_bwEstimateEvent = Simulator::Schedule (m_lastRtt, &TcpWestwood::EstimateBW,this,m_ackedSegments,tcpHeader,m_lastRtt);
-       }
-   }
-}
+  m_ackedSegments = 0;
+  NS_LOG_LOGIC ("Estimated BW: " << m_currentBW);
 
-void
-TcpWestwood::Filtering ()
-{
-  NS_LOG_FUNCTION (this);
+  // Filter the BW sample
 
   double alpha = 0.9;
 
@@ -344,6 +170,27 @@
       m_lastSampleBW = sample_bwe;
       m_lastBW = m_currentBW;
     }
+
+  NS_LOG_LOGIC ("Estimated BW after filtering: " << m_currentBW);
+}
+
+uint32_t
+TcpWestwood::GetSsThresh (Ptr<const TcpSocketState> tcb,
+                          uint32_t bytesInFlight)
+{
+  (void) bytesInFlight;
+  NS_LOG_LOGIC ("CurrentBW: " << m_currentBW << " minRtt: " <<
+                m_minRtt << " ssthresh: " <<
+                m_currentBW * static_cast<double> (m_minRtt.GetSeconds ()));
+
+  return std::max (2*tcb->m_segmentSize,
+                   uint32_t (m_currentBW * static_cast<double> (m_minRtt.GetSeconds ())));
+}
+
+Ptr<TcpCongestionOps>
+TcpWestwood::Fork ()
+{
+  return CreateObject<TcpWestwood> (*this);
 }
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/tcp-westwood.h ns-3.25/src/internet/model/tcp-westwood.h
--- ns-3.24.1/src/internet/model/tcp-westwood.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/tcp-westwood.h	2016-03-23 21:36:53.000000000 -0700
@@ -33,11 +33,17 @@
 #ifndef TCP_WESTWOOD_H
 #define TCP_WESTWOOD_H
 
-#include "tcp-socket-base.h"
-#include "ns3/packet.h"
+#include "tcp-congestion-ops.h"
+#include "ns3/sequence-number.h"
+#include "ns3/traced-value.h"
 
 namespace ns3 {
 
+class Packet;
+class TcpHeader;
+class Time;
+class EventId;
+
 /**
  * \ingroup socket
  * \ingroup tcp
@@ -57,9 +63,9 @@
  * and the EstimateBW (int, const, Time). The CountAck method calculates
  * the number of acknowledged segments on the receipt of an ACK.
  * The EstimateBW estimates the bandwidth based on the value returned by CountAck
- * and the sampling interval (last ACK inter-arrival time for Westwood and last RTT for Westwood+).   
+ * and the sampling interval (last ACK inter-arrival time for Westwood and last RTT for Westwood+).
  */
-class TcpWestwood : public TcpSocketBase
+class TcpWestwood : public TcpNewReno
 {
 public:
   /**
@@ -94,36 +100,15 @@
     TUSTIN
   };
 
-protected:
-  virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpTahoe> to clone me
-  virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck() of parent
-  virtual void DupAck (const TcpHeader& t, uint32_t count);  // Treat 3 dupack as timeout
-  virtual void Retransmit (void); // Retransmit time out
+  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
+                                uint32_t bytesInFlight);
 
-  /**
-   * Process the newly received ACK
-   *
-   * \param packet the received ACK packet
-   * \param tcpHeader the header attached to the ACK packet
-   */  
-  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
-  
-  /**
-   * Estimate the RTT, record the minimum value,
-   * and run a clock on the RTT to trigger Westwood+ bandwidth sampling
-   * \param header the packet header
-   */
-  virtual void EstimateRtt (const TcpHeader& header);
+  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
+                          const Time& rtt);
 
-private:
-  /**
-   * Calculate the number of acknowledged packets upon the receipt of an ACK packet
-   *
-   * \param tcpHeader the header of the received ACK packet
-   * \return the number of ACKed packets
-   */
-  int CountAck (const TcpHeader& tcpHeader);
+  virtual Ptr<TcpCongestionOps> Fork ();
 
+private:
   /**
    * Update the total number of acknowledged packets during the current RTT
    *
@@ -134,27 +119,16 @@
   /**
    * Estimate the network's bandwidth
    *
-   * \param acked the number of acknowledged packets returned by CountAck
-   * \param tcpHeader the header of the packet
+   * \param acked the number of acknowledged packets
    * \param rtt the RTT estimation
    */
-  void EstimateBW (int acked, const TcpHeader& tcpHeader, Time rtt);
-
-  /**
-   * Tustin filter
-   */
-  void Filtering (void);
+  void EstimateBW (const Time& rtt, Ptr<TcpSocketState> tcb);
 
 protected:
-  bool                   m_inFastRec;              //!< Currently in fast recovery if TRUE
-
   TracedValue<double>    m_currentBW;              //!< Current value of the estimated BW
   double                 m_lastSampleBW;           //!< Last bandwidth sample
   double                 m_lastBW;                 //!< Last bandwidth sample after being filtered
   Time                   m_minRtt;                 //!< Minimum RTT
-  double                 m_lastAck;                //!< The time last ACK was received
-  SequenceNumber32       m_prevAckNo;              //!< Previously received ACK number
-  int                    m_accountedFor;           //!< The number of received DUPACKs
   enum ProtocolType      m_pType;                  //!< 0 for Westwood, 1 for Westwood+
   enum FilterType        m_fType;                  //!< 0 for none, 1 for Tustin
 
diff -Naur ns-3.24.1/src/internet/model/udp-l4-protocol.cc ns-3.25/src/internet/model/udp-l4-protocol.cc
--- ns-3.24.1/src/internet/model/udp-l4-protocol.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/udp-l4-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -92,7 +92,7 @@
   NS_LOG_FUNCTION (this);
   Ptr<Node> node = this->GetObject<Node> ();
   Ptr<Ipv4> ipv4 = this->GetObject<Ipv4> ();
-  Ptr<Ipv6L3Protocol> ipv6 = node->GetObject<Ipv6L3Protocol> ();
+  Ptr<Ipv6> ipv6 = node->GetObject<Ipv6> ();
 
   if (m_node == 0)
     {
@@ -118,7 +118,7 @@
   if (ipv6 != 0 && m_downTarget6.IsNull())
     {
       ipv6->Insert (this);
-      this->SetDownTarget6 (MakeCallback (&Ipv6L3Protocol::Send, ipv6));
+      this->SetDownTarget6 (MakeCallback (&Ipv6::Send, ipv6));
     }
   IpL4Protocol::NotifyNewAggregate ();
 }
diff -Naur ns-3.24.1/src/internet/model/udp-socket-impl.cc ns-3.25/src/internet/model/udp-socket-impl.cc
--- ns-3.24.1/src/internet/model/udp-socket-impl.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/udp-socket-impl.cc	2016-03-23 21:36:53.000000000 -0700
@@ -26,6 +26,7 @@
 #include "ns3/ipv6-route.h"
 #include "ns3/ipv4.h"
 #include "ns3/ipv6.h"
+#include "ns3/ipv6-l3-protocol.h"
 #include "ns3/ipv4-header.h"
 #include "ns3/ipv4-routing-protocol.h"
 #include "ns3/ipv6-routing-protocol.h"
@@ -305,6 +306,14 @@
           m_errno = port ? ERROR_ADDRINUSE : ERROR_ADDRNOTAVAIL;
           return -1;
         }
+      if (ipv6.IsMulticast ())
+        {
+          Ptr<Ipv6L3Protocol> ipv6l3 = m_node->GetObject <Ipv6L3Protocol> ();
+          if (ipv6l3)
+            {
+              ipv6l3->AddMulticastAddress (ipv6);
+            }
+        }
     }
   else
     {
@@ -349,6 +358,7 @@
       m_errno = Socket::ERROR_BADF;
       return -1;
     }
+  Ipv6LeaveGroup ();
   m_shutdownRecv = true;
   m_shutdownSend = true;
   DeallocateEndPoint ();
@@ -900,6 +910,35 @@
   return 0;
 }
 
+int
+UdpSocketImpl::GetPeerName (Address &address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (!m_connected)
+    {
+      m_errno = ERROR_NOTCONN;
+      return -1;
+    }
+
+  if (Ipv4Address::IsMatchingType (m_defaultAddress))
+    {
+      Ipv4Address addr = Ipv4Address::ConvertFrom (m_defaultAddress);
+      address = InetSocketAddress (addr, m_defaultPort);
+    }
+  else if (Ipv6Address::IsMatchingType (m_defaultAddress))
+    {
+      Ipv6Address addr = Ipv6Address::ConvertFrom (m_defaultAddress);
+      address = Inet6SocketAddress (addr, m_defaultPort);
+    }
+  else
+    {
+      NS_ASSERT_MSG (false, "unexpected address type");
+    }
+
+  return 0;
+}
+
 int 
 UdpSocketImpl::MulticastJoinGroup (uint32_t interface, const Address &groupAddress)
 {
@@ -955,6 +994,18 @@
       NS_ASSERT (m_endPoint6 != 0);
     }
   m_endPoint6->BindToNetDevice (netdevice);
+
+  if (m_endPoint6->GetLocalAddress ().IsMulticast ())
+    {
+      Ptr<Ipv6L3Protocol> ipv6l3 = m_node->GetObject <Ipv6L3Protocol> ();
+      if (ipv6l3)
+        {
+          uint32_t index = ipv6l3->GetInterfaceForDevice (netdevice);
+          ipv6l3->RemoveMulticastAddress (m_endPoint6->GetLocalAddress ());
+          ipv6l3->AddMulticastAddress (m_endPoint6->GetLocalAddress (), index);
+        }
+    }
+
   return;
 }
 
@@ -1169,5 +1220,48 @@
   return m_allowBroadcast;
 }
 
+void
+UdpSocketImpl::Ipv6JoinGroup (Ipv6Address address, Socket::Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses)
+{
+  NS_LOG_FUNCTION (this << address << &filterMode << &sourceAddresses);
+
+  // We can join only one multicast group (or change its params)
+  NS_ASSERT_MSG ((m_ipv6MulticastGroupAddress == address || m_ipv6MulticastGroupAddress.IsAny ()), "Can join only one IPv6 multicast group.");
+
+  m_ipv6MulticastGroupAddress = address;
+
+  Ptr<Ipv6L3Protocol> ipv6l3 = m_node->GetObject <Ipv6L3Protocol> ();
+  if (ipv6l3)
+    {
+      if (filterMode == INCLUDE && sourceAddresses.empty ())
+        {
+          // it is a leave
+          if (m_boundnetdevice)
+            {
+              int32_t index = ipv6l3->GetInterfaceForDevice (m_boundnetdevice);
+              NS_ASSERT_MSG (index >= 0, "Interface without a valid index");
+              ipv6l3->RemoveMulticastAddress (address, index);
+            }
+          else
+            {
+              ipv6l3->RemoveMulticastAddress (address);
+            }
+        }
+      else
+        {
+          // it is a join or a modification
+          if (m_boundnetdevice)
+            {
+              int32_t index = ipv6l3->GetInterfaceForDevice (m_boundnetdevice);
+              NS_ASSERT_MSG (index >= 0, "Interface without a valid index");
+              ipv6l3->AddMulticastAddress (address, index);
+            }
+          else
+            {
+              ipv6l3->AddMulticastAddress (address);
+            }
+        }
+    }
+}
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/internet/model/udp-socket-impl.h ns-3.25/src/internet/model/udp-socket-impl.h
--- ns-3.24.1/src/internet/model/udp-socket-impl.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/model/udp-socket-impl.h	2016-03-23 21:36:53.000000000 -0700
@@ -93,11 +93,13 @@
   virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
                                 Address &fromAddress);
   virtual int GetSockName (Address &address) const; 
+  virtual int GetPeerName (Address &address) const;
   virtual int MulticastJoinGroup (uint32_t interfaceIndex, const Address &groupAddress);
   virtual int MulticastLeaveGroup (uint32_t interfaceIndex, const Address &groupAddress);
   virtual void BindToNetDevice (Ptr<NetDevice> netdevice);
   virtual bool SetAllowBroadcast (bool allowBroadcast);
   virtual bool GetAllowBroadcast () const;
+  virtual void Ipv6JoinGroup (Ipv6Address address, Socket::Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses);
 
 private:
   // Attributes set through UdpSocket base class 
@@ -227,7 +229,7 @@
   uint16_t m_defaultPort;   //!< Default port
   TracedCallback<Ptr<const Packet> > m_dropTrace; //!< Trace for dropped packets
 
-  enum SocketErrno         m_errno;           //!< Socket error code
+  mutable enum SocketErrno m_errno;           //!< Socket error code
   bool                     m_shutdownSend;    //!< Send no longer allowed
   bool                     m_shutdownRecv;    //!< Receive no longer allowed
   bool                     m_connected;       //!< Connection established
diff -Naur ns-3.24.1/src/internet/test/codel-queue-test-suite.cc ns-3.25/src/internet/test/codel-queue-test-suite.cc
--- ns-3.24.1/src/internet/test/codel-queue-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/codel-queue-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,523 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
- *
- * 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: Truc Anh N Nguyen <trucanh524@gmail.com>
- *
- */
-
-#include "ns3/test.h"
-#include "ns3/codel-queue.h"
-#include "ns3/uinteger.h"
-#include "ns3/string.h"
-#include "ns3/double.h"
-#include "ns3/log.h"
-#include "ns3/simulator.h"
-#include "ns3/network-module.h"
-#include "ns3/core-module.h"
-
-using namespace ns3;
-
-// The following code borrowed from Linux codel.h, for unit testing
-#define REC_INV_SQRT_BITS_ns3 (8 * sizeof(uint16_t))
-/* or sizeof_in_bits(rec_inv_sqrt) */
-/* needed shift to get a Q0.32 number from rec_inv_sqrt */
-#define REC_INV_SQRT_SHIFT_ns3 (32 - REC_INV_SQRT_BITS_ns3)
-
-static uint16_t _codel_Newton_step (uint32_t count, uint16_t rec_inv_sqrt)
-{
-  uint32_t invsqrt = ((uint32_t)rec_inv_sqrt) << REC_INV_SQRT_SHIFT_ns3;
-  uint32_t invsqrt2 = ((uint64_t)invsqrt * invsqrt) >> 32;
-  uint64_t val = (3LL << 32) - ((uint64_t)count * invsqrt2);
-
-  val >>= 2; /* avoid overflow in following multiply */
-  val = (val * invsqrt) >> (32 - 2 + 1);
-  return (val >> REC_INV_SQRT_SHIFT_ns3);
-}
-
-static uint32_t _reciprocal_scale (uint32_t val, uint32_t ep_ro)
-{
-  return (uint32_t)(((uint64_t)val * ep_ro) >> 32);
-}
-// End Linux borrow
-
-
-// Test 1: simple enqueue/dequeue with no drops
-class CoDelQueueBasicEnqueueDequeue : public TestCase
-{
-public:
-  CoDelQueueBasicEnqueueDequeue (std::string mode);
-  virtual void DoRun (void);
-
-  void QueueTestSize (Ptr<CoDelQueue> queue, uint32_t size, std::string error)
-  {
-    if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
-      }
-    else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), size, error);
-      }
-
-    NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), size, error);
-  }
-
-private:
-  StringValue m_mode;
-};
-
-CoDelQueueBasicEnqueueDequeue::CoDelQueueBasicEnqueueDequeue (std::string mode)
-  : TestCase ("Basic enqueue and dequeue operations, and attribute setting for " + mode)
-{
-  m_mode = StringValue (mode);
-}
-
-void
-CoDelQueueBasicEnqueueDequeue::DoRun (void)
-{
-  Ptr<CoDelQueue> queue = CreateObject<CoDelQueue> ();
-
-  uint32_t pktSize = 1000;
-  uint32_t modeSize = 0;
-
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", m_mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxPackets", UintegerValue (1500)), true,
-                         "Verify that we can actually set the attribute MaxPackets");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxBytes", UintegerValue (pktSize * 1500)), true,
-                         "Verify that we can actually set the attribute MaxBytes");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinBytes", UintegerValue (pktSize)), true,
-                         "Verify that we can actually set the attribute MinBytes");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Interval", StringValue ("50ms")), true,
-                         "Verify that we can actually set the attribute Interval");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Target", StringValue ("4ms")), true,
-                         "Verify that we can actually set the attribute Target");
-
-  if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-    {
-      modeSize = pktSize;
-    }
-  else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-    {
-      modeSize = 1;
-    }
-
-  Ptr<Packet> p1, p2, p3, p4, p5, p6;
-  p1 = Create<Packet> (pktSize);
-  p2 = Create<Packet> (pktSize);
-  p3 = Create<Packet> (pktSize);
-  p4 = Create<Packet> (pktSize);
-  p5 = Create<Packet> (pktSize);
-  p6 = Create<Packet> (pktSize);
-
-  QueueTestSize (queue, 0 * modeSize, "There should be no packets in queue");
-  queue->Enqueue (p1);
-  QueueTestSize (queue, 1 * modeSize, "There should be one packet in queue");
-  queue->Enqueue (p2);
-  QueueTestSize (queue, 2 * modeSize, "There should be two packets in queue");
-  queue->Enqueue (p3);
-  QueueTestSize (queue, 3 * modeSize, "There should be three packets in queue");
-  queue->Enqueue (p4);
-  QueueTestSize (queue, 4 * modeSize, "There should be four packets in queue");
-  queue->Enqueue (p5);
-  QueueTestSize (queue, 5 * modeSize, "There should be five packets in queue");
-  queue->Enqueue (p6);
-  QueueTestSize (queue, 6 * modeSize, "There should be six packets in queue");
-
-  NS_TEST_EXPECT_MSG_EQ (queue->GetDropOverLimit (), 0, "There should be no packets being dropped due to full queue");
-
-  Ptr<Packet> p;
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the first packet");
-  QueueTestSize (queue, 5 * modeSize, "There should be five packets in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p1->GetUid (), "was this the first packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the second packet");
-  QueueTestSize (queue, 4 * modeSize, "There should be four packets in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p2->GetUid (), "Was this the second packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the third packet");
-  QueueTestSize (queue, 3 * modeSize, "There should be three packets in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p3->GetUid (), "Was this the third packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the forth packet");
-  QueueTestSize (queue, 2 * modeSize, "There should be two packets in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p4->GetUid (), "Was this the fourth packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the fifth packet");
-  QueueTestSize (queue, 1 * modeSize, "There should be one packet in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p5->GetUid (), "Was this the fifth packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the last packet");
-  QueueTestSize (queue, 0 * modeSize, "There should be zero packet in queue");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p6->GetUid (), "Was this the sixth packet ?");
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p == 0), true, "There are really no packets in queue");
-
-  NS_TEST_EXPECT_MSG_EQ (queue->GetDropCount (), 0, "There should be no packet drops according to CoDel algorithm");
-}
-
-// Test 2: enqueue with drops due to queue overflow
-class CoDelQueueBasicOverflow : public TestCase
-{
-public:
-  CoDelQueueBasicOverflow (std::string mode);
-  virtual void DoRun (void);
-
-  void QueueTestSize (Ptr<CoDelQueue> queue, uint32_t size, std::string error)
-  {
-    if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
-      }
-    else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), size, error);
-      }
-
-    NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), size, error);
-  }
-
-private:
-  void Enqueue (Ptr<CoDelQueue> queue, uint32_t size, uint32_t nPkt);
-  StringValue m_mode;
-};
-
-CoDelQueueBasicOverflow::CoDelQueueBasicOverflow (std::string mode)
-  : TestCase ("Basic overflow behavior for " + mode)
-{
-  m_mode = StringValue (mode);
-}
-
-void
-CoDelQueueBasicOverflow::DoRun (void)
-{
-  Ptr<CoDelQueue> queue = CreateObject<CoDelQueue> ();
-  uint32_t pktSize = 1000;
-  uint32_t modeSize = 0;
-
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", m_mode), true,
-                         "Verify that we can actually set the attribute Mode");
-
-  if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-    {
-      modeSize = pktSize;
-    }
-  else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-    {
-      modeSize = 1;
-    }
-
-  Ptr<Packet> p1, p2, p3;
-  p1 = Create<Packet> (pktSize);
-  p2 = Create<Packet> (pktSize);
-  p3 = Create<Packet> (pktSize);
-
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxPackets", UintegerValue (500)), true,
-                         "Verify that we can actually set the attribute MaxPackets");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxBytes", UintegerValue (pktSize * 500)), true,
-                         "Verify that we can actually set the attribute MaxBytes");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinBytes", UintegerValue (pktSize)), true,
-                         "Verify that we can actually set the attribute MinBytes");
-
-  Enqueue (queue, pktSize, 500);
-  queue->Enqueue (p1);
-  queue->Enqueue (p2);
-  queue->Enqueue (p3);
-
-  QueueTestSize (queue, 500 * modeSize, "There should be 500 packets in queue");
-  NS_TEST_EXPECT_MSG_EQ (queue->GetDropOverLimit (), 3, "There should be three packets being dropped due to full queue");
-}
-
-void
-CoDelQueueBasicOverflow::Enqueue (Ptr<CoDelQueue> queue, uint32_t size, uint32_t nPkt)
-{
-  for (uint32_t i = 0; i < nPkt; i++)
-    {
-      queue->Enqueue (Create<Packet> (size));
-    }
-}
-
-// Test 3: NewtonStep unit test
-// test against explicit port of Linux implementation
-class CoDelQueueNewtonStepTest : public TestCase
-{
-public:
-  CoDelQueueNewtonStepTest ();
-  virtual void DoRun (void);
-};
-
-CoDelQueueNewtonStepTest::CoDelQueueNewtonStepTest ()
-  : TestCase ("NewtonStep arithmetic unit test")
-{
-}
-
-void
-CoDelQueueNewtonStepTest::DoRun (void)
-{
-  Ptr<CoDelQueue> queue = CreateObject<CoDelQueue> ();
-
-  // Spot check a few points in the expected operational range of
-  // CoDelQueue's m_count and m_recInvSqrt variables
-  uint32_t count = 2;
-  uint16_t recInvSqrt = 65535;
-  queue->m_count = count;
-  queue->m_recInvSqrt = recInvSqrt;
-  queue->NewtonStep ();
-  // Test that ns-3 value is exactly the same as the Linux value
-  NS_TEST_ASSERT_MSG_EQ (_codel_Newton_step (count, recInvSqrt), queue->m_recInvSqrt,
-                         "ns-3 NewtonStep() fails to match Linux equivalent");
-
-  count = 4;
-  recInvSqrt = 36864;
-  queue->m_count = count;
-  queue->m_recInvSqrt = recInvSqrt;
-  queue->NewtonStep ();
-  // Test that ns-3 value is exactly the same as the Linux value
-  NS_TEST_ASSERT_MSG_EQ (_codel_Newton_step (count, recInvSqrt), queue->m_recInvSqrt,
-                         "ns-3 NewtonStep() fails to match Linux equivalent");
-}
-
-// Test 4: ControlLaw unit test
-// test against explicit port of Linux implementation
-class CoDelQueueControlLawTest : public TestCase
-{
-public:
-  CoDelQueueControlLawTest ();
-  virtual void DoRun (void);
-  uint32_t _codel_control_law (Ptr<CoDelQueue> queue, uint32_t t);
-};
-
-CoDelQueueControlLawTest::CoDelQueueControlLawTest ()
-  : TestCase ("ControlLaw arithmetic unit test")
-{
-}
-
-// The following code borrowed from Linux codel.h,
-// except the addition of queue parameter
-uint32_t
-CoDelQueueControlLawTest::_codel_control_law (Ptr<CoDelQueue> queue, uint32_t t)
-{
-  return t + _reciprocal_scale (queue->Time2CoDel (queue->m_interval), queue->m_recInvSqrt << REC_INV_SQRT_SHIFT_ns3);
-}
-// End Linux borrrow
-
-void
-CoDelQueueControlLawTest::DoRun (void)
-{
-  Ptr<CoDelQueue> queue = CreateObject<CoDelQueue> ();
-
-  /* Spot check a few points of m_dropNext
-   The integer approximations in Linux should be within
-   2% of the true floating point value obtained in ns-3
-   */
-  uint32_t dropNextTestVals [4] = {292299, 341128, 9804717, 55885007};
-
-  for (int i = 0; i < 4; ++i)
-    {
-      uint32_t ns3Result = queue->ControlLaw (dropNextTestVals[i]);
-      uint32_t upperBound = ns3Result + 0.02 * ns3Result;
-      uint32_t lowerBound = ns3Result - 0.02 * ns3Result;
-      uint32_t linuxResult = _codel_control_law (queue, dropNextTestVals[i]);
-      NS_TEST_EXPECT_MSG_EQ ((lowerBound < linuxResult || linuxResult < upperBound), true,
-                             "Linux result should stay within 2% of ns-3 result");
-    }
-}
-
-// Test 5: enqueue/dequeue with drops according to CoDel algorithm
-class CoDelQueueBasicDrop : public TestCase
-{
-public:
-  CoDelQueueBasicDrop (std::string mode);
-  virtual void DoRun (void);
-
-  void QueueTestSize (Ptr<CoDelQueue> queue, uint32_t size, std::string error)
-  {
-    if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
-      }
-    else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-      {
-        NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), size, error);
-      }
-
-    NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), size, error);
-  }
-
-private:
-  void Enqueue (Ptr<CoDelQueue> queue, uint32_t size, uint32_t nPkt);
-  void Dequeue (Ptr<CoDelQueue> queue, uint32_t modeSize);
-  void DropNextTracer (uint32_t oldVal, uint32_t newVal);
-  StringValue m_mode;
-  uint32_t m_dropNextCount;    //count the number of times m_dropNext is recalculated
-};
-
-CoDelQueueBasicDrop::CoDelQueueBasicDrop (std::string mode)
-  : TestCase ("Basic drop operations for " + mode)
-{
-  m_mode = StringValue (mode);
-  m_dropNextCount = 0;
-}
-
-void
-CoDelQueueBasicDrop::DropNextTracer (uint32_t oldVal, uint32_t newVal)
-{
-  m_dropNextCount++;
-}
-
-void
-CoDelQueueBasicDrop::DoRun (void)
-{
-  Ptr<CoDelQueue> queue = CreateObject<CoDelQueue> ();
-  uint32_t pktSize = 1000;
-  uint32_t modeSize = 0;
-
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", m_mode), true,
-                         "Verify that we can actually set the attribute Mode");
-
-  if (queue->GetMode () == CoDelQueue::QUEUE_MODE_BYTES)
-    {
-      modeSize = pktSize;
-    }
-  else if (queue->GetMode () == CoDelQueue::QUEUE_MODE_PACKETS)
-    {
-      modeSize = 1;
-    }
-
-  Enqueue (queue, pktSize, 20);
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 20 * modeSize, "There should be 20 packets in queue.");
-
-  // Although the first dequeue occurs with a sojourn time above target
-  // the dequeue should be successful in this interval
-  Time waitUntilFirstDequeue =  2 * queue->GetTarget ();
-  Simulator::Schedule (waitUntilFirstDequeue, &CoDelQueueBasicDrop::Dequeue, this, queue, modeSize);
-
-  // This dequeue should cause a drop
-  Time waitUntilSecondDequeue = waitUntilFirstDequeue + 2 * queue->GetInterval ();
-  Simulator::Schedule (waitUntilSecondDequeue, &CoDelQueueBasicDrop::Dequeue, this, queue, modeSize);
-
-  // Although we are in dropping state, it's not time for next drop
-  // the dequeue should not cause a drop
-  Simulator::Schedule (waitUntilSecondDequeue, &CoDelQueueBasicDrop::Dequeue, this, queue, modeSize);
-
-  // In dropping time and it's time for next drop
-  // the dequeue should cause additional packet drops
-  Simulator::Schedule (waitUntilSecondDequeue * 2, &CoDelQueueBasicDrop::Dequeue, this, queue, modeSize);
-
-  Simulator::Run ();
-  Simulator::Destroy ();
-}
-
-void
-CoDelQueueBasicDrop::Enqueue (Ptr<CoDelQueue> queue, uint32_t size, uint32_t nPkt)
-{
-  for (uint32_t i = 0; i < nPkt; i++)
-    {
-      queue->Enqueue (Create<Packet> (size));
-    }
-}
-
-void
-CoDelQueueBasicDrop::Dequeue (Ptr<CoDelQueue> queue, uint32_t modeSize)
-{
-  uint32_t initialDropCount = queue->GetDropCount ();
-  uint32_t initialQSize = queue->GetQueueSize ();
-  uint32_t initialDropNext = queue->GetDropNext ();
-  Time currentTime = Simulator::Now ();
-  uint32_t currentDropCount = 0;
-
-  if (initialDropCount > 0 && currentTime.GetMicroSeconds () >= initialDropNext)
-    {
-      queue->TraceConnectWithoutContext ("DropNext", MakeCallback (&CoDelQueueBasicDrop::DropNextTracer, this));
-    }
-
-  if (initialQSize != 0)
-    {
-      Ptr<Packet> p = queue->Dequeue ();
-      if (initialDropCount == 0 && currentTime > queue->GetTarget ())
-        {
-          if (currentTime < queue->GetInterval ())
-            {
-              currentDropCount = queue->GetDropCount ();
-              NS_TEST_EXPECT_MSG_EQ (currentDropCount, 0, "We are not in dropping state."
-                                     "Sojourn time has just gone above target from below."
-                                     "Hence, there should be no packet drops");
-              QueueTestSize (queue, initialQSize - modeSize, "There should be 1 packet dequeued.");
-
-            }
-          else if (currentTime >= queue->GetInterval ())
-            {
-              currentDropCount = queue->GetDropCount ();
-              QueueTestSize (queue, initialQSize - 2 * modeSize, "Sojourn time has been above target for at least interval."
-                                     "We enter the dropping state, perform initial packet drop, and dequeue the next."
-                                     "So there should be 2 more packets dequeued.");
-              NS_TEST_EXPECT_MSG_EQ (currentDropCount, 1, "There should be 1 packet drop");
-            }
-        }
-      else if (initialDropCount > 0)
-        { // In dropping state
-          if (currentTime.GetMicroSeconds () < initialDropNext)
-            {
-              currentDropCount = queue->GetDropCount ();
-              QueueTestSize (queue, initialQSize - modeSize, "We are in dropping state."
-                                     "Sojourn is still above target."
-                                     "However, it's not time for next drop."
-                                     "So there should be only 1 more packet dequeued");
-
-              NS_TEST_EXPECT_MSG_EQ (currentDropCount, 1, "There should still be only 1 packet drop from the last dequeue");
-            }
-          else if (currentTime.GetMicroSeconds () >= initialDropNext)
-            {
-              currentDropCount = queue->GetDropCount ();
-              QueueTestSize (queue, initialQSize - (m_dropNextCount + 1) * modeSize, "We are in dropping state."
-                                     "It's time for next drop."
-                                     "The number of packets dequeued equals to the number of times m_dropNext is updated plus initial dequeue");
-              NS_TEST_EXPECT_MSG_EQ (currentDropCount, 1 + m_dropNextCount, "The number of drops equals to the number of times m_dropNext is updated plus 1 from last dequeue");
-            }
-        }
-    }
-}
-
-static class CoDelQueueTestSuite : public TestSuite
-{
-public:
-  CoDelQueueTestSuite ()
-    : TestSuite ("codel-queue", UNIT)
-  {
-    // Test 1: simple enqueue/dequeue with no drops
-    AddTestCase (new CoDelQueueBasicEnqueueDequeue ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
-    AddTestCase (new CoDelQueueBasicEnqueueDequeue ("QUEUE_MODE_BYTES"), TestCase::QUICK);
-    // Test 2: enqueue with drops due to queue overflow
-    AddTestCase (new CoDelQueueBasicOverflow ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
-    AddTestCase (new CoDelQueueBasicOverflow ("QUEUE_MODE_BYTES"), TestCase::QUICK);
-    // Test 3: test NewtonStep() against explicit port of Linux implementation
-    AddTestCase (new CoDelQueueNewtonStepTest (), TestCase::QUICK);
-    // Test 4: test ControlLaw() against explicit port of Linux implementation
-    AddTestCase (new CoDelQueueControlLawTest (), TestCase::QUICK);
-    // Test 5: enqueue/dequeue with drops according to CoDel algorithm
-    AddTestCase (new CoDelQueueBasicDrop ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
-    AddTestCase (new CoDelQueueBasicDrop ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
-  }
-} g_coDelQueueTestSuite;
diff -Naur ns-3.24.1/src/internet/test/ipv4-forwarding-test.cc ns-3.25/src/internet/test/ipv4-forwarding-test.cc
--- ns-3.24.1/src/internet/test/ipv4-forwarding-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv4-forwarding-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1,7 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2013 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;
@@ -38,6 +38,8 @@
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/ipv4-static-routing.h"
 
+#include "ns3/traffic-control-layer.h"
+
 #include <string>
 #include <limits>
 
@@ -62,6 +64,9 @@
   //UDP
   Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
   node->AggregateObject (udp);
+  //Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
 }
 
 
@@ -79,7 +84,7 @@
 };
 
 Ipv4ForwardingTest::Ipv4ForwardingTest ()
-  : TestCase ("UDP socket implementation") 
+  : TestCase ("UDP socket implementation")
 {
 }
 
diff -Naur ns-3.24.1/src/internet/test/ipv4-header-test.cc ns-3.25/src/internet/test/ipv4-header-test.cc
--- ns-3.24.1/src/internet/test/ipv4-header-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv4-header-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1,7 +1,7 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2010 Hajime Tazaki
- * 
+ *
  * 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;
@@ -38,6 +38,7 @@
 #include "ns3/icmpv4-l4-protocol.h"
 #include "ns3/ipv4-list-routing.h"
 #include "ns3/ipv4-static-routing.h"
+#include "ns3/traffic-control-layer.h"
 
 #include <string>
 #include <sstream>
@@ -67,7 +68,10 @@
   node->AggregateObject (icmp);
   // //Ipv4Raw
   // Ptr<Ipv4UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  // node->AggregateObject(udp); 
+  // node->AggregateObject(udp);
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
 }
 
 
@@ -88,7 +92,7 @@
 
 
 Ipv4HeaderTest::Ipv4HeaderTest ()
-  : TestCase ("IPv4 Header Test") 
+  : TestCase ("IPv4 Header Test")
 {
 }
 
@@ -231,7 +235,7 @@
       m_receivedPacket->RemoveAllByteTags ();
       m_receivedPacket = 0;
     }
- 
+
   // Ecn tests
   std::cout << "Ecn Test\n";
   std::vector <Ipv4Header::EcnType> vEcnTypes;
@@ -239,7 +243,7 @@
   vEcnTypes.push_back (Ipv4Header::ECN_ECT1);
   vEcnTypes.push_back (Ipv4Header::ECN_ECT0);
   vEcnTypes.push_back (Ipv4Header::ECN_CE);
-  
+
   for (uint32_t i = 0; i < vEcnTypes.size (); i++)
     {
       SendData_IpHdr_Dscp (txSocket, "10.0.0.1", Ipv4Header::DscpDefault, vEcnTypes [i]);
@@ -252,7 +256,7 @@
     }
 
 
- 
+
   Simulator::Destroy ();
 }
 //-----------------------------------------------------------------------------
diff -Naur ns-3.24.1/src/internet/test/ipv4-packet-info-tag-test-suite.cc ns-3.25/src/internet/test/ipv4-packet-info-tag-test-suite.cc
--- ns-3.24.1/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -45,6 +45,7 @@
 #include "ns3/ipv4-list-routing.h"
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
+#include "ns3/traffic-control-layer.h"
 #include "ns3/simulator.h"
 #include "ns3/node.h"
 
@@ -72,6 +73,9 @@
   //UDP
   Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
   node->AggregateObject (udp);
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
 }
 
 }
@@ -87,7 +91,7 @@
 };
 
 Ipv4PacketInfoTagTest::Ipv4PacketInfoTagTest ()
-  : TestCase ("Ipv4PacketInfoTagTest") 
+  : TestCase ("Ipv4PacketInfoTagTest")
 {
 }
 
@@ -164,7 +168,7 @@
   socket->SetRecvPktInfo (true);
   socket->SetRecvCallback (MakeCallback (&Ipv4PacketInfoTagTest::RxCb, this));
 
-  // receive on loopback 
+  // receive on loopback
   Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
                                   &Ipv4PacketInfoTagTest::DoSendData, this, socket, "127.0.0.1");
   Simulator::Run ();
@@ -183,7 +187,7 @@
   socket->SetRecvPktInfo (true);
   socket->SetRecvCallback (MakeCallback (&Ipv4PacketInfoTagTest::RxCb, this));
 
-  // receive on loopback 
+  // receive on loopback
   Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
                                   &Ipv4PacketInfoTagTest::DoSendData, this, socket, "127.0.0.1");
   Simulator::Run ();
diff -Naur ns-3.24.1/src/internet/test/ipv4-raw-test.cc ns-3.25/src/internet/test/ipv4-raw-test.cc
--- ns-3.24.1/src/internet/test/ipv4-raw-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv4-raw-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -276,6 +276,22 @@
   m_receivedPacket = 0;
   m_receivedPacket2 = 0;
 
+  // Simple getpeername tests
+
+  Address peerAddress;
+  int err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (txSocket->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  InetSocketAddress peer ("10.0.0.1", 1234);
+  err = txSocket->Connect (peer);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  peer.SetPort (0);
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, peer, "address from socket GetPeerName() should equal the connected address");
+
   Simulator::Destroy ();
 }
 //-----------------------------------------------------------------------------
diff -Naur ns-3.24.1/src/internet/test/ipv4-rip-test.cc ns-3.25/src/internet/test/ipv4-rip-test.cc
--- ns-3.24.1/src/internet/test/ipv4-rip-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/ipv4-rip-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,647 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 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/inet-socket-address.h"
+
+#include "ns3/internet-stack-helper.h"
+#include "ns3/ipv4-address-helper.h"
+#include "ns3/ipv4-l3-protocol.h"
+#include "ns3/icmpv4-l4-protocol.h"
+#include "ns3/udp-l4-protocol.h"
+#include "ns3/rip.h"
+#include "ns3/rip-helper.h"
+#include "ns3/node-container.h"
+#include "ns3/ipv4-static-routing.h"
+
+#include <string>
+#include <limits>
+
+using namespace ns3;
+
+// Ipv4RipTest
+
+class Ipv4RipTest : 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);
+  Ipv4RipTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv4RipTest::Ipv4RipTest ()
+  : TestCase ("RIP")
+{
+}
+
+void Ipv4RipTest::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
+Ipv4RipTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = InetSocketAddress (Ipv4Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv4RipTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (60),
+                                  &Ipv4RipTest::DoSendData, this, socket, to);
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+}
+
+void
+Ipv4RipTest::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);
+
+  RipHelper ripRouting;
+  InternetStackHelper internetRouters;
+  internetRouters.SetRoutingHelper (ripRouting);
+  internetRouters.Install (routers);
+
+  InternetStackHelper internetNodes;
+  internetNodes.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 IPv4 addresses and forwarding
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase (Ipv4Address ("10.0.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic1 = ipv4.Assign (net1);
+
+  ipv4.SetBase (Ipv4Address ("192.168.0.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic2 = ipv4.Assign (net2);
+
+  ipv4.SetBase (Ipv4Address ("192.168.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic3 = ipv4.Assign (net3);
+
+  ipv4.SetBase (Ipv4Address ("10.0.2.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic4 = ipv4.Assign (net4);
+
+  Ptr<Ipv4StaticRouting> staticRouting;
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (txNode->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.1.2", 1 );
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (rxNode->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.2.1", 1 );
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.2.2"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv4RipTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  // Unicast test
+  SendData (txSocket, "10.0.2.2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "IPv4 RIP should work.");
+
+  m_receivedPacket->RemoveAllByteTags ();
+
+  Simulator::Destroy ();
+}
+
+// Ipv4RipCountToInfinityTest
+
+class Ipv4RipCountToInfinityTest : 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);
+  Ipv4RipCountToInfinityTest ();
+
+  void ReceivePkt (Ptr<Socket> socket);
+};
+
+Ipv4RipCountToInfinityTest::Ipv4RipCountToInfinityTest ()
+  : TestCase ("RIP counting to infinity")
+{
+}
+
+void Ipv4RipCountToInfinityTest::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
+Ipv4RipCountToInfinityTest::DoSendData (Ptr<Socket> socket, std::string to)
+{
+  Address realTo = InetSocketAddress (Ipv4Address (to.c_str ()), 1234);
+  NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
+                         123, "100");
+}
+
+void
+Ipv4RipCountToInfinityTest::SendData (Ptr<Socket> socket, std::string to)
+{
+  m_receivedPacket = Create<Packet> ();
+  Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (60),
+                                  &Ipv4RipCountToInfinityTest::DoSendData, this, socket, to);
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+}
+
+void
+Ipv4RipCountToInfinityTest::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);
+
+  RipHelper 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);
+
+  InternetStackHelper internetv6routers;
+  internetv6routers.SetRoutingHelper (ripNgRouting);
+  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 IPv4 addresses and forwarding
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase (Ipv4Address ("10.0.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic1 = ipv4.Assign (net1);
+
+  ipv4.SetBase (Ipv4Address ("192.168.0.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic2 = ipv4.Assign (net2);
+
+  ipv4.SetBase (Ipv4Address ("192.168.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic3 = ipv4.Assign (net3);
+
+  ipv4.SetBase (Ipv4Address ("10.0.2.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic4 = ipv4.Assign (net4);
+
+  Ptr<Ipv4StaticRouting> staticRouting;
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (txNode->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.1.2", 1 );
+  staticRouting = Ipv4RoutingHelper::GetRouting <Ipv4StaticRouting> (rxNode->GetObject<Ipv4> ()->GetRoutingProtocol ());
+  staticRouting->SetDefaultRoute ("10.0.2.1", 1 );
+
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.2.2"), 1234)), 0, "trivial");
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv4RipCountToInfinityTest::ReceivePkt, this));
+
+  Ptr<SocketFactory> txSocketFactory = txNode->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> txSocket = txSocketFactory->CreateSocket ();
+  txSocket->SetAllowBroadcast (true);
+
+  // ------ Now the tests ------------
+
+  SendData (txSocket, "10.0.2.2");
+  NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "RIP counting to infinity.");
+
+  Simulator::Destroy ();
+}
+
+// Ipv4RipSplitHorizonStrategyTest
+
+class Ipv4RipSplitHorizonStrategyTest : public TestCase
+{
+  Rip::SplitHorizonType_e m_setStrategy;
+  Rip::SplitHorizonType_e m_detectedStrategy;
+
+public:
+  virtual void DoRun (void);
+  Ipv4RipSplitHorizonStrategyTest (Rip::SplitHorizonType_e strategy);
+
+  void ReceivePktProbe (Ptr<Socket> socket);
+};
+
+Ipv4RipSplitHorizonStrategyTest::Ipv4RipSplitHorizonStrategyTest (Rip::SplitHorizonType_e strategy)
+  : TestCase ("RIP Split Horizon strategy")
+{
+  m_setStrategy = strategy;
+}
+
+void Ipv4RipSplitHorizonStrategyTest::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);
+  Ipv4Address senderAddress = InetSocketAddress::ConvertFrom (tag.GetAddress ()).GetIpv4 ();
+
+  if (senderAddress == "192.168.0.2")
+    {
+      RipHeader hdr;
+      receivedPacketProbe->RemoveHeader (hdr);
+
+      std::list<RipRte> rtes = hdr.GetRteList ();
+
+      // validate the RTEs before processing
+      for (std::list<RipRte>::iterator iter = rtes.begin ();
+          iter != rtes.end (); iter++)
+        {
+          if (iter->GetPrefix () == "10.0.1.0")
+            {
+              bool correct = false;
+              if (iter->GetRouteMetric () == 16)
+                {
+                  correct = true;
+                  m_detectedStrategy = Rip::POISON_REVERSE;
+                }
+              else if (iter->GetRouteMetric () == 2)
+                {
+                  correct = true;
+                  m_detectedStrategy = Rip::NO_SPLIT_HORIZON;
+                }
+              NS_TEST_EXPECT_MSG_EQ (correct, true, "RIP: unexpected metric value: " << iter->GetRouteMetric ());
+            }
+        }
+    }
+
+  //cast availableData to void, to suppress 'availableData' set but not used
+  //compiler warning
+  (void) availableData;
+}
+
+void
+Ipv4RipSplitHorizonStrategyTest::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);
+
+  RipHelper ripNgRouting;
+  ripNgRouting.Set ("SplitHorizon", EnumValue (m_setStrategy));
+
+  InternetStackHelper internetRouters;
+  internetRouters.SetRoutingHelper (ripNgRouting);
+  internetRouters.Install (routers);
+
+  InternetStackHelper internetNodes;
+  internetNodes.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
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase (Ipv4Address ("10.0.1.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic0 = ipv4.Assign (net0);
+
+  ipv4.SetBase (Ipv4Address ("192.168.0.0"), Ipv4Mask ("255.255.255.0"));
+  Ipv4InterfaceContainer iic1 = ipv4.Assign (net1);
+
+  // Create the UDP sockets
+  Ptr<SocketFactory> rxSocketFactory = listener->GetObject<UdpSocketFactory> ();
+  Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket ();
+  NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("224.0.0.9"), 520)), 0, "trivial");
+  rxSocket->BindToNetDevice (listenerDev);
+  rxSocket->SetRecvCallback (MakeCallback (&Ipv4RipSplitHorizonStrategyTest::ReceivePktProbe, this));
+
+  // ------ Now the tests ------------
+
+  // If the strategy is Split Horizon, then no packet will be received.
+  m_detectedStrategy = Rip::SPLIT_HORIZON;
+
+  Simulator::Stop (Seconds (66));
+  Simulator::Run ();
+  NS_TEST_EXPECT_MSG_EQ (m_detectedStrategy, m_setStrategy, "RIP counting to infinity.");
+
+  Simulator::Destroy ();
+}
+
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+class Ipv4RipTestSuite : public TestSuite
+{
+public:
+  Ipv4RipTestSuite () : TestSuite ("ipv4-rip", UNIT)
+  {
+    AddTestCase (new Ipv4RipTest, TestCase::QUICK);
+    AddTestCase (new Ipv4RipCountToInfinityTest, TestCase::QUICK);
+    AddTestCase (new Ipv4RipSplitHorizonStrategyTest (Rip::POISON_REVERSE), TestCase::QUICK);
+    AddTestCase (new Ipv4RipSplitHorizonStrategyTest (Rip::SPLIT_HORIZON), TestCase::QUICK);
+    AddTestCase (new Ipv4RipSplitHorizonStrategyTest (Rip::NO_SPLIT_HORIZON), TestCase::QUICK);
+  }
+} g_ipv4ripTestSuite;
diff -Naur ns-3.24.1/src/internet/test/ipv6-dual-stack-test-suite.cc ns-3.25/src/internet/test/ipv6-dual-stack-test-suite.cc
--- ns-3.24.1/src/internet/test/ipv6-dual-stack-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv6-dual-stack-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -2,7 +2,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2009 INRIA
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
@@ -44,6 +44,7 @@
 #include "ns3/icmpv6-l4-protocol.h"
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
+#include "ns3/traffic-control-layer.h"
 
 #include <string>
 
@@ -132,6 +133,10 @@
   ipv6->RegisterExtensions ();
   ipv6->RegisterOptions ();
 
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
+
   return node;
 }
 
diff -Naur ns-3.24.1/src/internet/test/ipv6-fragmentation-test.cc ns-3.25/src/internet/test/ipv6-fragmentation-test.cc
--- ns-3.24.1/src/internet/test/ipv6-fragmentation-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv6-fragmentation-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -55,6 +55,7 @@
 
 #include "ns3/ipv6-l3-protocol.h"
 #include "ns3/icmpv6-l4-protocol.h"
+#include "ns3/traffic-control-layer.h"
 
 #include <string>
 #include <limits>
@@ -108,6 +109,10 @@
   //UDP
   Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
   node->AggregateObject (udp);
+
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
 }
 
 
diff -Naur ns-3.24.1/src/internet/test/ipv6-packet-info-tag-test-suite.cc ns-3.25/src/internet/test/ipv6-packet-info-tag-test-suite.cc
--- ns-3.24.1/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -44,6 +44,7 @@
 #include "ns3/uinteger.h"
 #include "ns3/boolean.h"
 #include "ns3/node.h"
+#include "ns3/traffic-control-layer.h"
 
 using namespace ns3;
 
@@ -66,6 +67,10 @@
   /* register IPv6 extensions and options */
   ipv6->RegisterExtensions ();
   ipv6->RegisterOptions ();
+
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
 }
 
 class Ipv6PacketInfoTagTest : public TestCase
@@ -79,7 +84,7 @@
 };
 
 Ipv6PacketInfoTagTest::Ipv6PacketInfoTagTest ()
-  : TestCase ("Ipv6PacketInfoTagTest") 
+  : TestCase ("Ipv6PacketInfoTagTest")
 {
 }
 
@@ -157,7 +162,7 @@
   socket->SetRecvPktInfo (true);
   socket->SetRecvCallback (MakeCallback (&Ipv6PacketInfoTagTest::RxCb, this));
 
-  // receive on loopback 
+  // receive on loopback
   Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
                                   &Ipv6PacketInfoTagTest::DoSendData, this, socket, "::1");
   Simulator::Run ();
@@ -167,7 +172,7 @@
   std::stringstream dst;
   dst << ifaceAddr1.GetAddress ();
   Simulator::ScheduleWithContext (socket2->GetNode ()->GetId (), Seconds (0),
-                                  &Ipv6PacketInfoTagTest::DoSendData, this, socket, 
+                                  &Ipv6PacketInfoTagTest::DoSendData, this, socket,
                                   dst.str ());
   Simulator::Run ();
 
@@ -180,7 +185,7 @@
   socket->SetRecvPktInfo (true);
   socket->SetRecvCallback (MakeCallback (&Ipv6PacketInfoTagTest::RxCb, this));
 
-  // receive on loopback 
+  // receive on loopback
   Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
                                   &Ipv6PacketInfoTagTest::DoSendData, this, socket, "::1");
   Simulator::Run ();
diff -Naur ns-3.24.1/src/internet/test/ipv6-raw-test.cc ns-3.25/src/internet/test/ipv6-raw-test.cc
--- ns-3.24.1/src/internet/test/ipv6-raw-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv6-raw-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -237,6 +237,22 @@
   m_receivedPacket = 0;
   m_receivedPacket2 = 0;
 
+  // Simple getpeername tests
+
+  Address peerAddress;
+  int err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (txSocket->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  Inet6SocketAddress peer ("2001:db8::1", 1234);
+  err = txSocket->Connect (peer);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  peer.SetPort (0);
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, peer, "address from socket GetPeerName() should equal the connected address");
+
   Simulator::Destroy ();
 }
 //-----------------------------------------------------------------------------
diff -Naur ns-3.24.1/src/internet/test/ipv6-ripng-test.cc ns-3.25/src/internet/test/ipv6-ripng-test.cc
--- ns-3.24.1/src/internet/test/ipv6-ripng-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/ipv6-ripng-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -38,9 +38,6 @@
 #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"
@@ -115,10 +112,8 @@
   NodeContainer all (nodes, routers);
 
   RipNgHelper ripNgRouting;
-  Ipv6ListRoutingHelper listRH;
-  listRH.Add (ripNgRouting, 0);
   InternetStackHelper internetv6routers;
-  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.SetRoutingHelper (ripNgRouting);
   internetv6routers.Install (routers);
 
   InternetStackHelper internetv6nodes;
@@ -326,10 +321,8 @@
   ripNgRouting.SetInterfaceMetric (routerB, 2, 10);
   ripNgRouting.SetInterfaceMetric (routerC, 1, 10);
 
-  Ipv6ListRoutingHelper listRH;
-  listRH.Add (ripNgRouting, 0);
   InternetStackHelper internetv6routers;
-  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.SetRoutingHelper (ripNgRouting);
   internetv6routers.Install (routers);
 
   InternetStackHelper internetv6nodes;
@@ -543,10 +536,8 @@
   RipNgHelper ripNgRouting;
   ripNgRouting.Set ("SplitHorizon", EnumValue (m_setStrategy));
 
-  Ipv6ListRoutingHelper listRH;
-  listRH.Add (ripNgRouting, 0);
   InternetStackHelper internetv6routers;
-  internetv6routers.SetRoutingHelper (listRH);
+  internetv6routers.SetRoutingHelper (ripNgRouting);
   internetv6routers.Install (routers);
 
   InternetStackHelper internetv6nodes;
@@ -622,6 +613,7 @@
   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->BindToNetDevice (listenerDev);
   rxSocket->SetRecvCallback (MakeCallback (&Ipv6RipngSplitHorizonStrategyTest::ReceivePktProbe, this));
 
   // ------ Now the tests ------------
diff -Naur ns-3.24.1/src/internet/test/pfifo-fast-queue-disc-test-suite.cc ns-3.25/src/internet/test/pfifo-fast-queue-disc-test-suite.cc
--- ns-3.24.1/src/internet/test/pfifo-fast-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/pfifo-fast-queue-disc-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,364 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014 University of Washington
+ *
+ * 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
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/pfifo-fast-queue-disc.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/ipv4-queue-disc-item.h"
+#include "ns3/ipv6-queue-disc-item.h"
+#include "ns3/ipv4-packet-filter.h"
+#include "ns3/enum.h"
+#include "ns3/uinteger.h"
+#include "ns3/pointer.h"
+#include "ns3/object-factory.h"
+
+using namespace ns3;
+
+/**
+ * This class tests that each possible TOS is enqueued in the right band
+ */
+class PfifoFastQueueDiscTosPrioritization : public TestCase
+{
+public:
+  PfifoFastQueueDiscTosPrioritization ();
+  virtual ~PfifoFastQueueDiscTosPrioritization ();
+
+private:
+  virtual void DoRun (void);
+  Ptr<Packet> CreatePacketWithTos (uint8_t tos);
+  void TestTosValue (Ptr<PfifoFastQueueDisc> queue, uint8_t tos, uint32_t band);
+};
+
+PfifoFastQueueDiscTosPrioritization::PfifoFastQueueDiscTosPrioritization ()
+  : TestCase ("Test TOS-based prioritization")
+{
+}
+
+PfifoFastQueueDiscTosPrioritization::~PfifoFastQueueDiscTosPrioritization ()
+{
+}
+
+Ptr<Packet>
+PfifoFastQueueDiscTosPrioritization::CreatePacketWithTos (uint8_t tos)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Ipv4Header ipHeader;
+  ipHeader.SetPayloadSize (100);
+  ipHeader.SetTos (tos);
+  ipHeader.SetProtocol (6);
+  p->AddHeader (ipHeader);
+  return p;
+}
+
+void
+PfifoFastQueueDiscTosPrioritization::TestTosValue (Ptr<PfifoFastQueueDisc> queue, uint8_t tos, uint32_t band)
+{
+  Ptr<Packet> p = CreatePacketWithTos (tos);
+  Ipv4Header ipHeader;
+  p->RemoveHeader (ipHeader);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, ipHeader);
+  queue->Enqueue (item);
+  NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 1, "enqueued to unexpected band");
+  queue->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 0, "unable to dequeue");
+}
+
+void
+PfifoFastQueueDiscTosPrioritization::DoRun (void)
+{
+  Ptr<PfifoFastQueueDisc> queueDisc = CreateObject<PfifoFastQueueDisc> ();
+  Ptr<PfifoFastIpv4PacketFilter> filter = CreateObject<PfifoFastIpv4PacketFilter> ();
+  bool ok = filter->SetAttributeFailSafe ("Mode", EnumValue (PfifoFastIpv4PacketFilter::PF_MODE_TOS));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+  queueDisc->AddPacketFilter (filter);  
+  for (uint16_t i = 0; i < 3; i++)
+    {
+      Ptr<DropTailQueue> queue = CreateObject<DropTailQueue> ();
+      bool ok = queue->SetAttributeFailSafe ("MaxPackets", UintegerValue (1000));
+      NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+      queueDisc->AddInternalQueue (queue);
+    }
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 0, "initialized non-zero");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 0, "initialized non-zero");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 0, "initialized non-zero");
+
+  TestTosValue (queueDisc, 0x0, 1);
+  TestTosValue (queueDisc, 0x2, 2);
+  TestTosValue (queueDisc, 0x4, 1);
+  TestTosValue (queueDisc, 0x6, 1);
+  TestTosValue (queueDisc, 0x8, 2);
+  TestTosValue (queueDisc, 0xa, 2);
+  TestTosValue (queueDisc, 0xc, 2);
+  TestTosValue (queueDisc, 0xe, 2);
+  TestTosValue (queueDisc, 0x10, 0);
+  TestTosValue (queueDisc, 0x12, 0);
+  TestTosValue (queueDisc, 0x14, 0);
+  TestTosValue (queueDisc, 0x16, 0);
+  TestTosValue (queueDisc, 0x18, 1);
+  TestTosValue (queueDisc, 0x1a, 1);
+  TestTosValue (queueDisc, 0x1c, 1);
+  TestTosValue (queueDisc, 0x1e, 1);
+}
+
+/**
+ * This class tests that each possible DSCP is enqueued in the right band
+ */
+class PfifoFastQueueDiscDscpPrioritization : public TestCase
+{
+public:
+  PfifoFastQueueDiscDscpPrioritization ();
+  virtual ~PfifoFastQueueDiscDscpPrioritization ();
+
+private:
+  virtual void DoRun (void);
+  Ptr<Packet> CreatePacketWithDscp (Ipv4Header::DscpType dscp);
+  void TestDscpValue (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp, uint32_t band);
+};
+
+PfifoFastQueueDiscDscpPrioritization::PfifoFastQueueDiscDscpPrioritization ()
+  : TestCase ("Test DSCP-based prioritization")
+{
+}
+
+PfifoFastQueueDiscDscpPrioritization::~PfifoFastQueueDiscDscpPrioritization ()
+{
+}
+
+Ptr<Packet>
+PfifoFastQueueDiscDscpPrioritization::CreatePacketWithDscp (Ipv4Header::DscpType dscp)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Ipv4Header ipHeader;
+  ipHeader.SetPayloadSize (100);
+  ipHeader.SetProtocol (6);
+  ipHeader.SetDscp (dscp);
+  p->AddHeader (ipHeader);
+  return p;
+}
+
+void
+PfifoFastQueueDiscDscpPrioritization::TestDscpValue (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp, uint32_t band)
+{
+  Ptr<Packet> p = CreatePacketWithDscp (dscp);
+  Ipv4Header ipHeader;
+  p->RemoveHeader (ipHeader);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, ipHeader);
+  queue->Enqueue (item);
+  NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 1, "enqueued to unexpected band");
+  queue->Dequeue ();
+  NS_TEST_ASSERT_MSG_EQ (queue->GetInternalQueue (band)->GetNPackets (), 0, "unable to dequeue");
+}
+
+void
+PfifoFastQueueDiscDscpPrioritization::DoRun (void)
+{
+  Ptr<PfifoFastQueueDisc> queueDisc = CreateObject<PfifoFastQueueDisc> ();
+  Ptr<PfifoFastIpv4PacketFilter> filter = CreateObject<PfifoFastIpv4PacketFilter> ();
+  bool ok = filter->SetAttributeFailSafe ("Mode", EnumValue (PfifoFastIpv4PacketFilter::PF_MODE_DSCP));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+  queueDisc->AddPacketFilter (filter);
+  for (uint16_t i = 0; i < 3; i++)
+    {
+      Ptr<DropTailQueue> queue = CreateObject<DropTailQueue> ();
+      bool ok = queue->SetAttributeFailSafe ("MaxPackets", UintegerValue (1000));
+      NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+      queueDisc->AddInternalQueue (queue);
+    }
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 0, "initialized non-zero");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 0, "initialized non-zero");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 0, "initialized non-zero");
+
+  TestDscpValue (queueDisc, Ipv4Header::DscpDefault, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_EF, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF11, 2);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF21, 2);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF31, 2);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF41, 2);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF12, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF22, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF32, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF42, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF13, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF23, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF33, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_AF43, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS1, 2);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS2, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS3, 1);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS4, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS5, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS6, 0);
+  TestDscpValue (queueDisc, Ipv4Header::DSCP_CS7, 0);
+}
+
+/**
+ * This class tests that each band is txqueuelen deep
+ */
+class PfifoFastQueueDiscOverflow : public TestCase
+{
+public:
+  PfifoFastQueueDiscOverflow ();
+  virtual ~PfifoFastQueueDiscOverflow ();
+
+private:
+  virtual void DoRun (void);
+  void AddPacket (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp);
+};
+
+PfifoFastQueueDiscOverflow::PfifoFastQueueDiscOverflow ()
+  : TestCase ("Test queue overflow")
+{
+}
+
+PfifoFastQueueDiscOverflow::~PfifoFastQueueDiscOverflow ()
+{
+}
+
+void
+PfifoFastQueueDiscOverflow::AddPacket (Ptr<PfifoFastQueueDisc> queue, Ipv4Header::DscpType dscp)
+{
+  Ptr<Packet> p = Create<Packet> (100);
+  Ipv4Header ipHeader;
+  ipHeader.SetPayloadSize (100);
+  ipHeader.SetProtocol (6);
+  ipHeader.SetDscp (dscp);
+  Address dest;
+  Ptr<Ipv4QueueDiscItem> item = Create<Ipv4QueueDiscItem> (p, dest, 0, ipHeader);
+  queue->Enqueue (item);
+}
+
+void
+PfifoFastQueueDiscOverflow::DoRun (void)
+{
+  Ptr<PfifoFastQueueDisc> queueDisc = CreateObjectWithAttributes<PfifoFastQueueDisc> ("Limit", UintegerValue (6));
+  Ptr<DropTailQueue> band0 = CreateObjectWithAttributes<DropTailQueue> ("MaxPackets", UintegerValue (6));
+  Ptr<DropTailQueue> band1 = CreateObjectWithAttributes<DropTailQueue> ("MaxPackets", UintegerValue (6));
+  Ptr<DropTailQueue> band2 = CreateObjectWithAttributes<DropTailQueue> ("MaxPackets", UintegerValue (6));
+  queueDisc->AddInternalQueue (band0);
+  queueDisc->AddInternalQueue (band1);
+  queueDisc->AddInternalQueue (band2);
+  Ptr<PfifoFastIpv4PacketFilter> filter = CreateObject<PfifoFastIpv4PacketFilter> ();
+  bool ok = filter->SetAttributeFailSafe ("Mode", EnumValue (PfifoFastIpv4PacketFilter::PF_MODE_DSCP));
+  NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+  queueDisc->AddPacketFilter (filter);
+
+  // Add two packets per each band
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF42); // 0
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF42); // 0
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF13); // 1
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF13); // 1
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF11); // 2
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF11); // 2
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 6, "unexpected queue depth");
+  // Add a third packet to each band
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF42); // 0
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF13); // 1
+  AddPacket (queueDisc, Ipv4Header::DSCP_AF11); // 2
+  // Bands should still have two packets each
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (0)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (2)->GetNPackets (), 2, "unexpected queue depth");
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->QueueDisc::GetNPackets (), 6, "unexpected queue depth");
+}
+
+/**
+ * This class tests that non-IP packets are handled by placing them into
+ * band 1
+ */
+class PfifoFastQueueDiscNonIpHeader : public TestCase
+{
+public:
+  PfifoFastQueueDiscNonIpHeader ();
+  virtual ~PfifoFastQueueDiscNonIpHeader ();
+
+private:
+  virtual void DoRun (void);
+};
+
+PfifoFastQueueDiscNonIpHeader::PfifoFastQueueDiscNonIpHeader ()
+  : TestCase ("Test queue with non IP header")
+{
+}
+
+PfifoFastQueueDiscNonIpHeader::~PfifoFastQueueDiscNonIpHeader ()
+{
+}
+
+void
+PfifoFastQueueDiscNonIpHeader::DoRun (void)
+{
+  // all packets with non-IP headers should enqueue in band 1
+  Ptr<PfifoFastQueueDisc> queueDisc = CreateObject<PfifoFastQueueDisc> ();
+  Ptr<PfifoFastIpv4PacketFilter> filter = CreateObject<PfifoFastIpv4PacketFilter> ();
+  queueDisc->AddPacketFilter (filter);
+  for (uint16_t i = 0; i < 3; i++)
+    {
+      Ptr<DropTailQueue> queue = CreateObject<DropTailQueue> ();
+      bool ok = queue->SetAttributeFailSafe ("MaxPackets", UintegerValue (1000));
+      NS_TEST_ASSERT_MSG_EQ (ok, true, "unable to set attribute");
+      queueDisc->AddInternalQueue (queue);
+    }
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 0, "unexpected queue depth");
+  Ptr<Packet> p;
+  p = Create<Packet> ();
+  Ptr<Ipv6QueueDiscItem> item;
+  Ipv6Header ipv6Header;
+  Address dest;
+  item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
+  queueDisc->Enqueue (item);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 1, "unexpected queue depth");
+  p = Create<Packet> (reinterpret_cast<const uint8_t*> ("hello, world"), 12);
+  item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
+  queueDisc->Enqueue (item);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 2, "unexpected queue depth");
+  p = Create<Packet> (100);
+  uint8_t *buf = new uint8_t[100];
+  uint8_t counter = 0;
+  for (uint32_t i = 0; i < 100; i++)
+    {
+      buf[i] = counter++;
+    }
+  p->CopyData (buf, 100);
+  item = Create<Ipv6QueueDiscItem> (p, dest, 0, ipv6Header);
+  queueDisc->Enqueue (item);
+  NS_TEST_ASSERT_MSG_EQ (queueDisc->GetInternalQueue (1)->GetNPackets (), 3, "unexpected queue depth");
+  delete[] buf;
+}
+
+class PfifoFastQueueDiscTestSuite : public TestSuite
+{
+public:
+  PfifoFastQueueDiscTestSuite ();
+};
+
+PfifoFastQueueDiscTestSuite::PfifoFastQueueDiscTestSuite ()
+  : TestSuite ("pfifo-fast-queue-disc", UNIT)
+{
+  AddTestCase (new PfifoFastQueueDiscTosPrioritization, TestCase::QUICK);
+  AddTestCase (new PfifoFastQueueDiscDscpPrioritization, TestCase::QUICK);
+  AddTestCase (new PfifoFastQueueDiscOverflow, TestCase::QUICK);
+  AddTestCase (new PfifoFastQueueDiscNonIpHeader, TestCase::QUICK);
+}
+
+static PfifoFastQueueDiscTestSuite pfifoFastQueueTestSuite;
diff -Naur ns-3.24.1/src/internet/test/tcp-bytes-in-flight-test.cc ns-3.25/src/internet/test/tcp-bytes-in-flight-test.cc
--- ns-3.24.1/src/internet/test/tcp-bytes-in-flight-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-bytes-in-flight-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,231 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-general-test.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+#include "tcp-error-model.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpBytesInFlightTestSuite");
+
+/**
+ * \brief Check the value of BytesInFlight against a home-made guess
+ *
+ * The guess is made wrt to segments that travel the network; we have,
+ * in theory, the possibility to know the real amount of bytes in flight. However
+ * this value is useless, since the sender bases its guess on the received ACK.
+ *
+ * \see Tx
+ * \see BytesInFlightTrace
+ */
+class TcpBytesInFlightTest : public TcpGeneralTest
+{
+public:
+  TcpBytesInFlightTest (const std::string &desc, std::vector<uint32_t> &toDrop);
+
+protected:
+  virtual Ptr<ErrorModel> CreateReceiverErrorModel ();
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void BytesInFlightTrace (uint32_t oldValue, uint32_t newValue);
+
+  void PktDropped (const Ipv4Header &ipH, const TcpHeader& tcpH, Ptr<const Packet> p);
+  void ConfigureEnvironment ();
+
+  void FinalChecks ();
+
+private:
+  uint32_t m_realBytesInFlight;
+  uint32_t m_guessedBytesInFlight;
+  uint32_t m_dupAckRecv;
+  SequenceNumber32 m_lastAckRecv;
+  SequenceNumber32 m_greatestSeqSent;
+  std::vector<uint32_t> m_toDrop;     // List of SequenceNumber to drop
+};
+
+TcpBytesInFlightTest::TcpBytesInFlightTest (const std::string &desc,
+                                            std::vector<uint32_t> &toDrop)
+  : TcpGeneralTest (desc),
+    m_realBytesInFlight (0),
+    m_guessedBytesInFlight (0),
+    m_dupAckRecv (0),
+    m_lastAckRecv (1),
+    m_greatestSeqSent (0),
+    m_toDrop (toDrop)
+{
+}
+
+void
+TcpBytesInFlightTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (30);
+  SetPropagationDelay (MilliSeconds (50));
+  SetTransmitStart (Seconds (2.0));
+
+}
+
+Ptr<ErrorModel>
+TcpBytesInFlightTest::CreateReceiverErrorModel ()
+{
+  Ptr<TcpSeqErrorModel> m_errorModel = CreateObject<TcpSeqErrorModel> ();
+  for (std::vector<uint32_t>::iterator it = m_toDrop.begin (); it != m_toDrop.end (); ++it)
+    {
+      m_errorModel->AddSeqToKill (SequenceNumber32 (*it));
+    }
+
+  m_errorModel->SetDropCallback (MakeCallback (&TcpBytesInFlightTest::PktDropped, this));
+
+  return m_errorModel;
+}
+
+void
+TcpBytesInFlightTest::PktDropped (const Ipv4Header &ipH, const TcpHeader &tcpH,
+                                  Ptr<const Packet> p)
+{
+  NS_LOG_DEBUG ("Drop seq= " << tcpH.GetSequenceNumber () << " size " << p->GetSize ());
+
+  // These bytes leave the world, they were not loved by anyone
+  m_realBytesInFlight -= p->GetSize ();
+}
+
+void
+TcpBytesInFlightTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == RECEIVER)
+    {
+      // Received has got data; bytes are not in flight anymore
+      m_realBytesInFlight -= p->GetSize ();
+    }
+  else if (who == SENDER)
+    {
+      if (h.GetAckNumber () > m_lastAckRecv)
+        { // New ack
+          uint32_t diff = h.GetAckNumber () - m_lastAckRecv;
+          NS_LOG_DEBUG ("Recv ACK=" << h.GetAckNumber ());
+
+          if (m_dupAckRecv > 0)
+            { // Previously we got some ACKs
+              if (h.GetAckNumber () >= m_greatestSeqSent)
+                { // This an ACK which acknowledge all the window
+                  diff -= (m_dupAckRecv * GetSegSize (SENDER));
+
+                  if (diff > m_guessedBytesInFlight)
+                    {
+                      // Our home-made guess is influenced also by retransmission
+                      // so make sure that this does not overflow
+                      diff = m_guessedBytesInFlight;
+                    }
+
+                  m_dupAckRecv = 0;
+                }
+              else
+                {
+                  // Partial ACK: Update the dupAck received count
+                  m_dupAckRecv -= diff / GetSegSize (SENDER);
+                }
+            }
+
+          if ((h.GetFlags () & TcpHeader::FIN) != 0
+              || m_guessedBytesInFlight + 1 == diff)
+            { // received the ACK for the FIN (which includes 1 spurious byte)
+              diff -= 1;
+            }
+          m_guessedBytesInFlight -= diff;
+          m_lastAckRecv = h.GetAckNumber ();
+          NS_LOG_DEBUG ("Update m_guessedBytesInFlight to " <<
+                        m_guessedBytesInFlight);
+        }
+      else if (h.GetAckNumber () == m_lastAckRecv
+               && m_lastAckRecv != SequenceNumber32 (1)
+               && (h.GetFlags () & TcpHeader::FIN) == 0)
+        {
+          // For each dupack I should guess that a segment has been received
+          // Please do not count FIN and SYN/ACK as dupacks
+          m_guessedBytesInFlight -= GetSegSize (SENDER);
+          m_dupAckRecv++;
+          NS_LOG_DEBUG ("Dupack received, Update m_guessedBytesInFlight to " <<
+                        m_guessedBytesInFlight);
+        }
+
+    }
+}
+
+void
+TcpBytesInFlightTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      m_realBytesInFlight += p->GetSize ();
+      if (m_greatestSeqSent <= h.GetSequenceNumber ())
+        { // This is not a retransmission
+          m_guessedBytesInFlight += p->GetSize ();
+          m_greatestSeqSent = h.GetSequenceNumber ();
+        }
+
+      // TODO: Maybe we need to account retransmission in another variable,
+      // such as m_guessedRetransOut ?
+
+      NS_LOG_DEBUG ("TX size=" << p->GetSize () << " seq=" << h.GetSequenceNumber () <<
+                    " m_guessedBytesInFlight=" << m_guessedBytesInFlight);
+    }
+}
+
+void
+TcpBytesInFlightTest::BytesInFlightTrace (uint32_t oldValue, uint32_t newValue)
+{
+  NS_LOG_DEBUG ("Socket BytesInFlight=" << newValue <<
+                " mine is=" << m_guessedBytesInFlight);
+  NS_TEST_ASSERT_MSG_EQ (m_guessedBytesInFlight, newValue,
+                         "Guessed and measured bytes in flight differs");
+}
+
+void
+TcpBytesInFlightTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_guessedBytesInFlight, 0,
+                         "Still present bytes in flight at the end of the transmission");
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpBytesInFlightTestSuite : public TestSuite
+{
+public:
+  TcpBytesInFlightTestSuite () : TestSuite ("tcp-bytes-in-flight-test", UNIT)
+  {
+    std::vector<uint32_t> toDrop;
+    AddTestCase (new TcpBytesInFlightTest ("BytesInFlight value, no drop", toDrop),
+                 TestCase::QUICK);
+    toDrop.push_back (4001);
+    AddTestCase (new TcpBytesInFlightTest ("BytesInFlight value, one drop", toDrop),
+                 TestCase::QUICK);
+    toDrop.push_back (4001);
+    AddTestCase (new TcpBytesInFlightTest ("BytesInFlight value, two drop of same segment", toDrop),
+                 TestCase::QUICK);
+    toDrop.pop_back ();
+    toDrop.push_back (4501);
+    AddTestCase (new TcpBytesInFlightTest ("BytesInFlight value, two drop of consecutive segments", toDrop),
+                 TestCase::QUICK);
+  }
+} g_tcpBytesInFlightTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-cong-avoid-test.cc ns-3.25/src/internet/test/tcp-cong-avoid-test.cc
--- ns-3.24.1/src/internet/test/tcp-cong-avoid-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-cong-avoid-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,154 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "ns3/log.h"
+#include "ns3/simple-channel.h"
+#include "ns3/internet-module.h"
+#include "ns3/config.h"
+#include "tcp-cong-avoid-test.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpNewRenoCongAvoidTest");
+
+TcpNewRenoCongAvoidNormalTest::TcpNewRenoCongAvoidNormalTest (uint32_t segmentSize,
+                                                              uint32_t packetSize,
+                                                              uint32_t packets,
+                                                              TypeId &typeId,
+                                                              const std::string &desc)
+  : TcpGeneralTest (desc),
+    m_segmentSize (segmentSize),
+    m_packetSize (packetSize),
+    m_packets (packets),
+    m_increment (0),
+    m_initial (true)
+{
+  m_congControlTypeId = typeId;
+}
+
+void
+TcpNewRenoCongAvoidNormalTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktSize (m_packetSize);
+  SetAppPktCount (m_packets);
+  SetMTU (1500);
+}
+
+void TcpNewRenoCongAvoidNormalTest::ConfigureProperties ()
+{
+  TcpGeneralTest::ConfigureProperties ();
+  SetSegmentSize (SENDER, m_segmentSize);
+  SetInitialSsThresh (SENDER, 0);
+}
+
+/**
+ * \brief Check the increment of the congestion window in the congestion avoidance
+ *
+ * The method trace the size change of the cWnd, saving each increment.
+ *
+ * \see Check
+ */
+void
+TcpNewRenoCongAvoidNormalTest::CWndTrace (uint32_t oldValue, uint32_t newValue)
+{
+  if (m_initial)
+    {
+      m_initial = false;
+      return;
+    }
+
+  if (!m_event.IsRunning ())
+    {
+      m_event = Simulator::Schedule (Seconds (1.0),
+                                     &TcpNewRenoCongAvoidNormalTest::Check, this);
+    }
+
+  m_increment += newValue - oldValue;
+}
+
+void
+TcpNewRenoCongAvoidNormalTest::QueueDrop (SocketWho who)
+{
+  NS_FATAL_ERROR ("Drop on the queue; cannot validate congestion avoidance");
+}
+
+void
+TcpNewRenoCongAvoidNormalTest::PhyDrop (SocketWho who)
+{
+  NS_FATAL_ERROR ("Drop on the phy: cannot validate congestion avoidance");
+}
+
+/**
+ * \brief Called each RTT (1.0 sec in the testing environment) and check
+ * that the overall increment in this RTT is less or equal than 1 MSS
+ */
+void
+TcpNewRenoCongAvoidNormalTest::Check ()
+{
+  uint32_t segSize = GetSegSize (TcpGeneralTest::SENDER);
+
+  if (m_increment != 0)
+    {
+      NS_TEST_ASSERT_MSG_LT_OR_EQ (m_increment, segSize,
+                                   "Increment exceeded segment size in one RTT");
+    }
+
+  m_increment = 0;
+
+  m_event = Simulator::Schedule (Seconds (1.0),
+                                 &TcpNewRenoCongAvoidNormalTest::Check, this);
+
+}
+
+void
+TcpNewRenoCongAvoidNormalTest::NormalClose (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      m_event.Cancel ();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpRenoCongAvoidTestSuite : public TestSuite
+{
+public:
+  TcpRenoCongAvoidTestSuite () : TestSuite ("tcp-cong-avoid-test", UNIT)
+  {
+    std::list<TypeId> types;
+    types.insert (types.begin (), TcpWestwood::GetTypeId ());
+    types.insert (types.begin (), TcpNewReno::GetTypeId ());
+
+    for (std::list<TypeId>::iterator it = types.begin (); it != types.end (); ++it)
+      {
+        for (uint32_t i = 10; i <= 50; i += 10)
+          {
+            AddTestCase (new TcpNewRenoCongAvoidNormalTest (500, 500, i, (*it),
+                                                            "cong avoid MSS=500, pkt_size=500," + (*it).GetName ()),
+                         TestCase::QUICK);
+            AddTestCase (new TcpNewRenoCongAvoidNormalTest (500, 1000, i, (*it),
+                                                            "cong avoid MSS=500, pkt_size=1000," + (*it).GetName ()),
+                         TestCase::QUICK);
+          }
+      }
+  }
+} g_tcpCongAvoidNormalTest;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-cong-avoid-test.h ns-3.25/src/internet/test/tcp-cong-avoid-test.h
--- ns-3.24.1/src/internet/test/tcp-cong-avoid-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-cong-avoid-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,79 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPCONGAVOIDTEST_H
+#define TCPCONGAVOIDTEST_H
+
+#include "ns3/test.h"
+#include "tcp-slow-start-test.h"
+
+namespace ns3 {
+
+/**
+ * \brief Test the behavior of RFC congestion avoidance
+ *
+ * From RFC 5681:\n
+ *
+ *     cwnd += min (N, SMSS)                      (2)
+ *
+ *  During congestion avoidance, cwnd is incremented by roughly 1 full-
+ *  sized segment per round-trip time (RTT).  Congestion avoidance
+ *  continues until congestion is detected.  The basic guidelines for
+ *  incrementing cwnd during congestion avoidance are:
+ *
+ *     * MAY increment cwnd by SMSS bytes
+ *
+ *     * SHOULD increment cwnd per equation (2) once per RTT
+ *
+ *     * MUST NOT increment cwnd by more than SMSS bytes
+ *
+ * To test this behavior and these points, a tracing callback is attached
+ * to the cWnd. Each time it increases, the increment is saved. Meanwhile, a
+ * timer checks if an amount of time equals to the RTT has passed, and if yes,
+ * it checks that the increment has not passed the 1 MSS limit.
+ */
+class
+TcpNewRenoCongAvoidNormalTest : public TcpGeneralTest
+{
+public:
+  TcpNewRenoCongAvoidNormalTest (uint32_t segmentSize, uint32_t packetSize,
+                                 uint32_t packets, TypeId& congControl,
+                                 const std::string &msg);
+protected:
+  virtual void CWndTrace (uint32_t oldValue, uint32_t newValue);
+  void QueueDrop (SocketWho who);
+  void PhyDrop (SocketWho who);
+  void NormalClose (SocketWho who);
+  void Check ();
+
+  void ConfigureEnvironment ();
+  void ConfigureProperties ();
+
+private:
+  uint32_t m_segmentSize;
+  uint32_t m_packetSize;
+  uint32_t m_packets;
+  uint32_t m_increment;
+  EventId m_event;
+  bool   m_initial;
+};
+
+} // namespace ns3
+
+#endif // TCPCONGAVOIDTEST_H
+
diff -Naur ns-3.24.1/src/internet/test/tcp-datasentcb-test.cc ns-3.25/src/internet/test/tcp-datasentcb-test.cc
--- ns-3.24.1/src/internet/test/tcp-datasentcb-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-datasentcb-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,163 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-general-test.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpDatSentCbTest");
+
+/**
+ * \brief Socket that the 50% of the times saves the entire packet in the buffer,
+ * while in the other 50% saves only half the packet.
+ */
+class TcpSocketHalfAck : public TcpSocketMsgBase
+{
+public:
+  static TypeId GetTypeId (void);
+
+  TcpSocketHalfAck () : TcpSocketMsgBase ()
+  {
+  }
+
+  TcpSocketHalfAck (const TcpSocketHalfAck &other) : TcpSocketMsgBase (other)
+  {
+  }
+protected:
+  virtual Ptr<TcpSocketBase> Fork ();
+  virtual void ReceivedData (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+};
+
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketHalfAck);
+
+TypeId
+TcpSocketHalfAck::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpSocketHalfAck")
+    .SetParent<TcpSocketMsgBase> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<TcpSocketHalfAck> ()
+  ;
+  return tid;
+}
+
+Ptr<TcpSocketBase>
+TcpSocketHalfAck::Fork (void)
+{
+  return CopyObject<TcpSocketHalfAck> (this);
+}
+
+void
+TcpSocketHalfAck::ReceivedData (Ptr<Packet> packet, const TcpHeader &tcpHeader)
+{
+  NS_LOG_FUNCTION (this << packet << tcpHeader);
+  static uint32_t times = 1;
+
+  Ptr<Packet> halved = packet->Copy ();
+
+  if (times % 2 == 0)
+    halved->RemoveAtEnd (packet->GetSize () / 2);
+
+  times++;
+
+  TcpSocketMsgBase::ReceivedData (halved, tcpHeader);
+}
+
+
+/**
+ * \brief Data Sent callback test
+ *
+ * The rationale of this test is to check if the dataSent callback advertises
+ * to the application all the transmitted bytes. We know in advance how many
+ * bytes are being transmitted, and we check if the amount of data notified
+ * equals this value.
+ *
+ */
+class TcpDataSentCbTestCase : public TcpGeneralTest
+{
+public:
+  TcpDataSentCbTestCase (const std::string &desc, uint32_t size, uint32_t packets) :
+    TcpGeneralTest (desc),
+    m_pktSize (size),
+    m_pktCount (packets),
+    m_notifiedData (0)
+  { }
+
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+
+  virtual void DataSent (uint32_t size, SocketWho who);
+  virtual void ConfigureEnvironment ();
+  virtual void FinalChecks ();
+
+private:
+  uint32_t m_pktSize;
+  uint32_t m_pktCount;
+  uint32_t m_notifiedData;
+};
+
+void
+TcpDataSentCbTestCase::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (m_pktCount);
+  SetAppPktSize (m_pktSize);
+}
+
+void
+TcpDataSentCbTestCase::DataSent (uint32_t size, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << who << size);
+
+  m_notifiedData += size;
+}
+
+void
+TcpDataSentCbTestCase::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_notifiedData, GetPktSize () * GetPktCount (),
+                         "Notified more data than application sent");
+}
+
+Ptr<TcpSocketMsgBase>
+TcpDataSentCbTestCase::CreateReceiverSocket (Ptr<Node> node)
+{
+  NS_LOG_FUNCTION (this);
+
+  return CreateSocket (node, TcpSocketHalfAck::GetTypeId (), m_congControlTypeId);
+}
+
+static class TcpDataSentCbTestSuite : public TestSuite
+{
+public:
+  TcpDataSentCbTestSuite ()
+    : TestSuite ("tcp-datasentcb", UNIT)
+  {
+    AddTestCase (new TcpDataSentCbTestCase ("Check the data sent callback", 500, 10), TestCase::QUICK);
+    AddTestCase (new TcpDataSentCbTestCase ("Check the data sent callback", 100, 100), TestCase::QUICK);
+    AddTestCase (new TcpDataSentCbTestCase ("Check the data sent callback", 1000, 50), TestCase::QUICK);
+    AddTestCase (new TcpDataSentCbTestCase ("Check the data sent callback", 855, 18), TestCase::QUICK);
+    AddTestCase (new TcpDataSentCbTestCase ("Check the data sent callback", 1243, 59), TestCase::QUICK);
+  }
+
+} g_tcpDataSentCbTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-endpoint-bug2211.cc ns-3.25/src/internet/test/tcp-endpoint-bug2211.cc
--- ns-3.24.1/src/internet/test/tcp-endpoint-bug2211.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-endpoint-bug2211.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,139 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Alexander Krotov <ilabdsf@yandex.ru>
+ *
+ * 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
+ *
+ */
+
+/*
+ * Test for bug 2211
+ * https://www.nsnam.org/bugzilla/show_bug.cgi?id=2211
+ *
+ * NOTE: It is a valgrind testcase, it contains no ASSERTs.
+ *
+ * Test creates one node and sets up two TCP sockets on the loopback
+ * with default parameters: CWND = 1, MTU = 536.
+ * Sender socket sends 3 segments.
+ * When first segment is acknowledged, cwnd is raised to 2.
+ * Then, two segments are sent and arrive into receive buffer.
+ * Until bugfix, the following happened:
+ * Ipv4EndPoint::ForwardUp was called for both second and third segment.
+ * These calls scheduled two Ipv4EndPoint::DoForwardUp events.
+ * To demonstrate the bug, test case closes the receiver socket after
+ * receiving the second segment. As a result, Ipv4EndPoint is destroyed.
+ * However, Ipv4EndPoint::DoForwardUp is already scheduled for third segment.
+ * It is a use-after-free bug.
+ */
+#include <iostream>
+
+#include "ns3/test.h"
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+
+namespace ns3 {
+
+class TcpEndPointBug2211Test : public TestCase
+{
+public:
+  TcpEndPointBug2211Test (std::string desc, bool ipVersion);
+
+  void Recv (Ptr<Socket> socket);
+  void HandleAccept (Ptr<Socket> s, const Address &from);
+  void HandleConnect (Ptr<Socket> socket);
+  virtual void DoRun ();
+private:
+  bool m_v6;
+};
+
+void
+TcpEndPointBug2211Test::Recv (Ptr<Socket> socket)
+{
+  if (socket->GetRxAvailable() == 536 * 2)
+    {
+      socket->Close();
+    }
+}
+
+void
+TcpEndPointBug2211Test::HandleAccept (Ptr<Socket> s, const Address &from)
+{
+  s->SetRecvCallback (MakeCallback (&TcpEndPointBug2211Test::Recv, this));
+}
+
+void
+TcpEndPointBug2211Test::HandleConnect (Ptr<Socket> socket)
+{
+  socket->Send (Create<Packet> (536));
+  socket->Send (Create<Packet> (536));
+  socket->Send (Create<Packet> (536));
+  socket->Close ();
+}
+
+TcpEndPointBug2211Test::TcpEndPointBug2211Test (std::string desc, bool ipVersion) : TestCase (desc)
+{
+  m_v6 = ipVersion;
+}
+
+void
+TcpEndPointBug2211Test::DoRun ()
+{
+  Ptr<Node> node = CreateObject<Node> ();
+
+  InternetStackHelper internet;
+  internet.Install (node);
+
+  TypeId tid = TcpSocketFactory::GetTypeId ();
+  Ptr<Socket> sink = Socket::CreateSocket (node, tid);
+  if (m_v6 == false)
+    {
+      sink->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9));
+    }
+  else
+    {
+      sink->Bind (Inet6SocketAddress (Ipv6Address::GetAny (), 9));
+    }
+  sink->Listen ();
+  sink->SetAcceptCallback (MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
+                           MakeCallback (&TcpEndPointBug2211Test::HandleAccept, this));
+
+  Ptr<Socket> source = Socket::CreateSocket (node, tid);
+  source->Bind ();
+  source->SetConnectCallback (MakeCallback (&TcpEndPointBug2211Test::HandleConnect, this),
+                              MakeNullCallback <void, Ptr<Socket> >());
+  if (m_v6 == false)
+    {
+      source->Connect (InetSocketAddress (Ipv4Address::GetLoopback (), 9));
+    }
+  else
+    {
+      source->Connect (Inet6SocketAddress (Ipv6Address::GetLoopback (), 9));
+    }
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+class TcpEndpointBug2211TestSuite : public TestSuite
+{
+public:
+  TcpEndpointBug2211TestSuite () : TestSuite ("tcp-endpoint-bug2211-test", UNIT)
+  {
+    AddTestCase (new TcpEndPointBug2211Test ("Bug 2211 testcase IPv4", false), TestCase::QUICK);
+    AddTestCase (new TcpEndPointBug2211Test ("Bug 2211 testcase IPv6", true), TestCase::QUICK);
+  }
+} g_TcpEndPoint2211TestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-error-model.cc ns-3.25/src/internet/test/tcp-error-model.cc
--- ns-3.24.1/src/internet/test/tcp-error-model.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-error-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,170 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "tcp-error-model.h"
+#include "ns3/ipv4-header.h"
+#include "ns3/packet.h"
+#include "ns3/log.h"
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpGeneralErrorModel");
+
+NS_OBJECT_ENSURE_REGISTERED (TcpGeneralErrorModel);
+
+TypeId
+TcpGeneralErrorModel::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpGeneralErrorModel")
+    .SetParent<ErrorModel> ()
+  ;
+  return tid;
+}
+
+TcpGeneralErrorModel::TcpGeneralErrorModel ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+TcpGeneralErrorModel::DoCorrupt (Ptr<Packet> p)
+{
+  NS_LOG_FUNCTION (this << p);
+
+  if (!IsEnabled ())
+    {
+      return false;
+    }
+
+  Ipv4Header ipHeader;
+  TcpHeader tcpHeader;
+
+  p->RemoveHeader (ipHeader);
+  p->RemoveHeader (tcpHeader);
+
+  bool toDrop = ShouldDrop (ipHeader, tcpHeader, p->GetSize ());
+
+  if (toDrop && ! m_dropCallback.IsNull ())
+    {
+      m_dropCallback (ipHeader, tcpHeader, p);
+    }
+
+  p->AddHeader (tcpHeader);
+  p->AddHeader (ipHeader);
+
+  return toDrop;
+}
+
+NS_OBJECT_ENSURE_REGISTERED (TcpSeqErrorModel);
+
+TypeId
+TcpSeqErrorModel::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpSeqErrorModel")
+    .SetParent<TcpGeneralErrorModel> ()
+    .AddConstructor<TcpSeqErrorModel> ()
+  ;
+  return tid;
+}
+
+bool
+TcpSeqErrorModel::ShouldDrop (const Ipv4Header &ipHeader, const TcpHeader &tcpHeader,
+                              uint32_t packetSize)
+{
+  NS_LOG_FUNCTION (this << ipHeader << tcpHeader);
+
+  bool toDrop = false;
+
+  if (m_seqToKill.begin() != m_seqToKill.end() && packetSize != 0)
+    {
+      SequenceNumber32 toKill = m_seqToKill.front();
+      NS_LOG_INFO ("Analyzing seq=" << tcpHeader.GetSequenceNumber () <<
+                   " killing=" << toKill);
+      if (tcpHeader.GetSequenceNumber() == toKill)
+        {
+          NS_LOG_INFO ("segment " << toKill << " dropped");
+          toDrop = true;
+          m_seqToKill.pop_front();
+        }
+    }
+
+  return toDrop;
+}
+
+void
+TcpSeqErrorModel::DoReset()
+{
+  m_seqToKill.erase (m_seqToKill.begin(), m_seqToKill.end());
+}
+
+NS_OBJECT_ENSURE_REGISTERED (TcpFlagErrorModel);
+
+TypeId
+TcpFlagErrorModel::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpFlagErrorModel")
+    .SetParent<TcpGeneralErrorModel> ()
+    .AddConstructor<TcpFlagErrorModel> ()
+  ;
+  return tid;
+}
+
+TcpFlagErrorModel::TcpFlagErrorModel ()
+  : TcpGeneralErrorModel (),
+  m_flagsToKill (TcpHeader::NONE),
+  m_killNumber (0)
+{
+}
+
+bool
+TcpFlagErrorModel::ShouldDrop (const Ipv4Header &ipHeader, const TcpHeader &tcpHeader,
+                               uint32_t packetSize)
+{
+  NS_LOG_FUNCTION (this << ipHeader << tcpHeader);
+
+  (void) packetSize;
+
+  bool toDrop = false;
+
+  if ((tcpHeader.GetFlags () & m_flagsToKill) == m_flagsToKill)
+    {
+      if (m_killNumber > 0)
+        {
+          m_killNumber--;
+          if (m_killNumber > 0)
+            {
+              toDrop = true;
+            }
+        }
+      else if (m_killNumber < 0)
+        {
+          toDrop = true;
+        }
+    }
+
+  return toDrop;
+}
+
+void
+TcpFlagErrorModel::DoReset (void)
+{
+  m_flagsToKill = TcpHeader::NONE;
+  m_killNumber = 0;
+}
+
+} //namespace ns3
+
diff -Naur ns-3.24.1/src/internet/test/tcp-error-model.h ns-3.25/src/internet/test/tcp-error-model.h
--- ns-3.24.1/src/internet/test/tcp-error-model.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-error-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,147 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPERRORCHANNEL_H
+#define TCPERRORCHANNEL_H
+
+#include "ns3/error-model.h"
+#include "ns3/tcp-header.h"
+#include "ns3/ipv4-header.h"
+
+namespace ns3 {
+
+/**
+ * \brief A general (TCP-aware) error model
+ *
+ * The class is responsible to take away the IP and TCP header from the packet,
+ * and then to interrogate the method ShouldDrop, dropping the packet accordingly
+ * to the returned value.
+ */
+class TcpGeneralErrorModel : public ErrorModel
+{
+public:
+  static TypeId GetTypeId (void);
+  TcpGeneralErrorModel ();
+
+  void SetDropCallback (Callback<void, const Ipv4Header&, const TcpHeader&, Ptr<const Packet> > cb)
+  {
+    m_dropCallback = cb;
+  }
+
+protected:
+  virtual bool ShouldDrop (const Ipv4Header &ipHeader, const TcpHeader &tcpHeader,
+                           uint32_t packetSize) = 0;
+
+
+private:
+  virtual bool DoCorrupt (Ptr<Packet> p);
+  Callback<void, const Ipv4Header&, const TcpHeader&, Ptr<const Packet> > m_dropCallback;
+};
+
+/**
+ * \brief An error model TCP aware: it drops the sequence number declared
+ *
+ * \see AddSeqToKill
+ */
+class TcpSeqErrorModel : public TcpGeneralErrorModel
+{
+public:
+  static TypeId GetTypeId (void);
+  TcpSeqErrorModel () : TcpGeneralErrorModel () { }
+
+  /**
+   * \brief Add the sequence number to the list of segments to be killed
+   *
+   * Calling x times this function indicates that you want to kill
+   * the segment x times.
+   *
+   * \param seq sequence number to be killed
+   */
+  void AddSeqToKill (const SequenceNumber32 &seq)
+  {
+    m_seqToKill.insert(m_seqToKill.end(), seq);
+  }
+
+protected:
+  virtual bool ShouldDrop (const Ipv4Header &ipHeader, const TcpHeader &tcpHeader,
+                           uint32_t packetSize);
+
+protected:
+  std::list<SequenceNumber32> m_seqToKill;
+
+private:
+  virtual void DoReset (void);
+};
+
+/**
+ * \brief Error model which drop packets with specified TCP flags
+ *
+ * Set the flags with SetFlagToKill and the number of the packets with such flags
+ * which should be killed.
+ *
+ * \see SetFlagToKill
+ * \see SetKillRepeat
+ *
+ */
+class TcpFlagErrorModel : public TcpGeneralErrorModel
+{
+public:
+  static TypeId GetTypeId (void);
+  TcpFlagErrorModel ();
+
+  /**
+   * \brief Set the flags of the segment that should be killed
+   *
+   * \param flags Flags
+   */
+  void SetFlagToKill (TcpHeader::Flags_t flags)
+  {
+    m_flagsToKill = flags;
+  }
+
+  /**
+   * \brief Set how many packets should be killed
+   *
+   * If the flags are the same, this specified the numbers of drops:
+   *
+   * # -1 for infinite drops
+   * # 0  for no drops
+   * # >1 the number of drops
+   *
+   * \param killNumber Specifies the number of times the packet should be killed
+   */
+  void SetKillRepeat (int killNumber)
+  {
+    m_killNumber = killNumber;
+  }
+
+protected:
+  virtual bool ShouldDrop (const Ipv4Header &ipHeader, const TcpHeader &tcpHeader,
+                           uint32_t packetSize);
+
+protected:
+  TcpHeader::Flags_t m_flagsToKill;
+  int m_killNumber;
+
+private:
+  virtual void DoReset (void);
+};
+
+} // namespace ns3
+
+#endif // TCPERRORCHANNEL_H
diff -Naur ns-3.24.1/src/internet/test/tcp-fast-retr-test.cc ns-3.25/src/internet/test/tcp-fast-retr-test.cc
--- ns-3.24.1/src/internet/test/tcp-fast-retr-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-fast-retr-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,377 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "ns3/log.h"
+#include "tcp-fast-retr-test.h"
+#include "ns3/tcp-westwood.h"
+#include "ns3/node.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpFastRetrTest");
+
+TcpFastRetrTest::TcpFastRetrTest (TypeId typeId, uint32_t seqToKill,
+                                  const std::string &msg)
+  : TcpGeneralTest (msg),
+    m_pktDropped (false),
+    m_pktWasDropped (false),
+    m_seqToKill (seqToKill),
+    m_dupAckReceived (0),
+    m_sndNextExpSeq (0),
+    m_rcvNextExpAck (1),
+    m_countRetr (0),
+    m_bytesRcvButNotAcked (0)
+{
+  m_congControlTypeId = typeId;
+}
+
+void
+TcpFastRetrTest::ConfigureProperties ()
+{
+  TcpGeneralTest::ConfigureProperties ();
+  SetInitialSsThresh (SENDER, 0);
+}
+
+void
+TcpFastRetrTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (100);
+}
+
+Ptr<ErrorModel>
+TcpFastRetrTest::CreateSenderErrorModel ()
+{
+  return 0;
+}
+
+Ptr<ErrorModel>
+TcpFastRetrTest::CreateReceiverErrorModel ()
+{
+  m_errorModel = CreateObject<TcpSeqErrorModel> ();
+  m_errorModel->AddSeqToKill (SequenceNumber32 (m_seqToKill));
+  m_errorModel->SetDropCallback (MakeCallback (&TcpFastRetrTest::PktDropped, this));
+
+  return m_errorModel;
+}
+
+
+Ptr<TcpSocketMsgBase>
+TcpFastRetrTest::CreateSenderSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateSenderSocket (node);
+  socket->SetAttribute ("MinRto", TimeValue (Seconds (10.0)));
+
+  return socket;
+}
+
+void
+TcpFastRetrTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      // Nothing to check
+      NS_LOG_INFO ("\tSENDER Rx " << h);
+    }
+  else if (who == RECEIVER)
+    {
+      NS_LOG_INFO ("\tRECEIVER Rx " << h);
+
+      // Receiver has received the missing segment
+      if (h.GetSequenceNumber ().GetValue () == m_seqToKill)
+        {
+          m_pktDropped = false;
+          if (m_bytesRcvButNotAcked > 0)
+            {
+              m_rcvNextExpAck += m_bytesRcvButNotAcked + GetSegSize (SENDER);
+              m_bytesRcvButNotAcked = 0;
+            }
+        }
+
+      // Count all the received bytes not acked
+      if (m_pktDropped)
+        {
+          m_bytesRcvButNotAcked += GetSegSize (SENDER);
+        }
+    }
+}
+
+void
+TcpFastRetrTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      NS_LOG_INFO ("\tSENDER Tx " << h << " size=" << p->GetSize ());
+
+      if (h.GetSequenceNumber ().GetValue () == m_seqToKill && m_pktDropped)
+        {
+          // Spotted the retransmission!
+          m_countRetr++;
+          NS_TEST_ASSERT_MSG_EQ (m_countRetr, 1,
+                                 "Segment retransmitted too many times");
+        }
+      else
+        {
+          // No delayed ACK involved here.
+          while (h.GetSequenceNumber () < m_sndNextExpSeq)
+            {
+              m_sndNextExpSeq -= GetSegSize (SENDER);
+            }
+
+          if (h.GetSequenceNumber ().GetValue () != 50002)
+            {
+              NS_TEST_ASSERT_MSG_EQ (m_sndNextExpSeq, h.GetSequenceNumber (),
+                                     "Sequence number expected differs");
+            }
+        }
+
+      if (m_sndNextExpSeq.GetValue () == 0)
+        {
+          // SYN
+          m_sndNextExpSeq = SequenceNumber32 (1);
+        }
+      else if (m_sndNextExpSeq.GetValue () == 1 && p->GetSize () == 32)
+        {
+          // Pure ACK in three-way handshake, then we expect data
+          m_sndNextExpSeq = SequenceNumber32 (1);
+        }
+      else
+        {
+          // Data segments
+          m_sndNextExpSeq += GetSegSize (SENDER);
+        }
+    }
+  else if (who == RECEIVER)
+    {
+      NS_LOG_INFO ("\tRECEIVER Tx, " << h << " size=" << p->GetSize ());
+
+      if (h.GetFlags () == (TcpHeader::SYN | TcpHeader::ACK))
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber ().GetValue (), 0,
+                                 "SYN pkt has not 0 as initial sequence number."
+                                 "Probably, random sqn number has been implemented."
+                                 "Check this test");
+        }
+      else
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber ().GetValue (), 1,
+                                 "ACK pkt has not 1 as sequence number."
+                                 "Probably, random sqn number has been implemented."
+                                 "Check this test");
+        }
+
+      // Accounted for delayed ACK, but not received.
+      while (h.GetAckNumber () < m_rcvNextExpAck)
+        {
+          m_rcvNextExpAck -= GetSegSize (SENDER);
+        }
+
+      if (m_rcvNextExpAck.GetValue () >= 50001)
+        {
+          m_rcvNextExpAck = 50002;
+        }
+
+      NS_TEST_ASSERT_MSG_EQ (h.GetAckNumber (), m_rcvNextExpAck,
+                             "ACKing something not considered");
+
+      if (m_pktDropped)
+        {
+          m_rcvNextExpAck = SequenceNumber32 (m_seqToKill);
+        }
+      else
+        {
+          switch (m_rcvNextExpAck.GetValue ())
+            {
+            case 0:
+              m_rcvNextExpAck = SequenceNumber32 (1);
+              break;
+            case 1:
+              m_rcvNextExpAck += GetSegSize (SENDER);
+              break;
+            case 50002:
+              break;
+            default:
+              m_rcvNextExpAck += GetSegSize (SENDER) * GetDelAckCount (SENDER);
+            }
+        }
+    }
+}
+
+void
+TcpFastRetrTest::RcvAck (const Ptr<const TcpSocketState> tcb, const TcpHeader &h,
+                         SocketWho who)
+{
+  NS_LOG_FUNCTION (this << tcb << h << who);
+
+  if (who == SENDER)
+    {
+      if (h.GetAckNumber ().GetValue () < m_seqToKill)
+        {
+          NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                                 "Not in OPEN state to respond to a loss");
+          NS_TEST_ASSERT_MSG_EQ (GetDupAckCount (SENDER), 0,
+                                 "Dupack different than 0 but no loss detected");
+        }
+      else if (h.GetAckNumber ().GetValue () == m_seqToKill)
+        {
+          NS_TEST_ASSERT_MSG_EQ (GetDupAckCount (SENDER), m_dupAckReceived,
+                                 "Dupack count differs");
+
+          if (GetDupAckCount (SENDER) == 0 &&
+              GetDupAckCount (SENDER) < GetReTxThreshold (SENDER))
+            {
+              NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                                     "Not in OPEN state for processing dupack");
+            }
+          else if (GetDupAckCount (SENDER) > 0 &&
+                   GetDupAckCount (SENDER) < GetReTxThreshold (SENDER))
+            {
+              NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_DISORDER,
+                                     "Not in DISORDER state after receiving dupacks");
+            }
+          else if (GetDupAckCount (SENDER) >= GetReTxThreshold (SENDER))
+            {
+              NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_RECOVERY,
+                                     "Not in RECOVERY state after reaching retxthresh");
+            }
+        }
+    }
+  else if (who == RECEIVER)
+    {
+      NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                             "Receiver not in OPEN state");
+    }
+}
+
+void
+TcpFastRetrTest::ProcessedAck (const Ptr<const TcpSocketState> tcb, const TcpHeader &h,
+                               SocketWho who)
+{
+  NS_LOG_FUNCTION (this << tcb << h << who);
+
+  if (who == SENDER)
+    {
+      if (m_previousAck == h.GetAckNumber () && h.GetAckNumber ().GetValue () < 50002)
+        {
+          m_dupAckReceived++;
+
+          NS_TEST_ASSERT_MSG_GT_OR_EQ (m_dupAckReceived, GetDupAckCount (SENDER),
+                                       "Count of dupAck differs");
+
+          if (GetDupAckCount (SENDER) < GetReTxThreshold (SENDER))
+            {
+              NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_DISORDER,
+                                     "DupAck less than ReTxThreshold but not "
+                                     "in DISORDER state");
+            }
+          else
+            {
+              NS_TEST_ASSERT_MSG_GT_OR_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_RECOVERY,
+                                           "DupAck greater than ReTxThreshold but not "
+                                           "in RECOVERY or LOSS state");
+              m_pktWasDropped = true;
+            }
+        }
+      else if (m_previousAck < h.GetAckNumber ())
+        {
+          m_dupAckReceived = 0;
+        }
+
+      m_previousAck = h.GetAckNumber ();
+    }
+  else if (who == RECEIVER)
+    {
+      NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                             "Different state than OPEN in the receiver");
+    }
+}
+
+void
+TcpFastRetrTest::RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who)
+{
+  NS_ASSERT_MSG (true == false, "RTO isn't expected here");
+}
+
+void
+TcpFastRetrTest::CongStateTrace (const TcpSocketState::TcpCongState_t oldValue,
+                                 const TcpSocketState::TcpCongState_t newValue)
+{
+  NS_LOG_FUNCTION (this << oldValue << newValue);
+
+  if (oldValue == TcpSocketState::CA_OPEN && newValue == TcpSocketState::CA_DISORDER)
+    {
+    }
+  else if (oldValue == TcpSocketState::CA_OPEN
+           && newValue == TcpSocketState::CA_RECOVERY
+           && GetReTxThreshold (SENDER) > 1)
+    {
+      NS_TEST_ASSERT_MSG_EQ (true, false,
+                             "Invalid OPEN to RECOVERY state change");
+    }
+  else if (oldValue == TcpSocketState::CA_DISORDER
+           && newValue == TcpSocketState::CA_RECOVERY)
+    {
+      NS_TEST_ASSERT_MSG_EQ (GetReTxThreshold (SENDER), GetDupAckCount (SENDER),
+                             "DISORDER to RECOVERY state change but not reached "
+                             "the ReTxThreshold");
+    }
+}
+
+
+void
+TcpFastRetrTest::PktDropped (const Ipv4Header &ipH, const TcpHeader& tcpH, Ptr<const Packet> p)
+{
+  NS_LOG_FUNCTION (this << ipH << tcpH);
+
+  m_pktDropped = true;
+  m_rcvNextExpAck = tcpH.GetSequenceNumber ();
+
+  NS_TEST_ASSERT_MSG_EQ (tcpH.GetSequenceNumber (), SequenceNumber32 (m_seqToKill),
+                         "Packet dropped but sequence number differs");
+}
+
+void
+TcpFastRetrTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_pktWasDropped, true,
+                         "Packet was not dropped at all");
+  NS_TEST_ASSERT_MSG_EQ (m_countRetr, 1,
+                         "Segment was not retransmitted at all");
+  NS_TEST_ASSERT_MSG_EQ (m_rcvNextExpAck.GetValue (), 50002,
+                         "Not all data have been transmitted");
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpFastRetrTestSuite : public TestSuite
+{
+public:
+  TcpFastRetrTestSuite () : TestSuite ("tcp-fast-retr-test", UNIT)
+  {
+    std::list<TypeId> types;
+    types.insert (types.begin (), TcpWestwood::GetTypeId ());
+    types.insert (types.begin (), TcpNewReno::GetTypeId ());
+
+    for (std::list<TypeId>::iterator it = types.begin (); it != types.end (); ++it)
+      {
+        AddTestCase (new TcpFastRetrTest ((*it), 5001, "Fast Retransmit testing"), TestCase::QUICK);
+      }
+  }
+} g_TcpFastRetrTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-fast-retr-test.h ns-3.25/src/internet/test/tcp-fast-retr-test.h
--- ns-3.24.1/src/internet/test/tcp-fast-retr-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-fast-retr-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,84 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPFASTRETRTEST_H
+#define TCPFASTRETRTEST_H
+
+#include "tcp-general-test.h"
+#include "ns3/simple-channel.h"
+#include "tcp-error-model.h"
+
+namespace ns3 {
+
+/**
+ * \brief Test the fast retransmission
+ *
+ * Checking what is happening is not so easy, so there are a lot of variables
+ * which helps to keep track on what is happening.
+ * The idea is following sequence and ack numbers which are exchanged,
+ * testing if they are the same as the implementation transmits.
+ */
+class TcpFastRetrTest : public TcpGeneralTest
+{
+public:
+  TcpFastRetrTest (TypeId congControl, uint32_t seqToKill, const std::string &msg);
+
+  virtual Ptr<ErrorModel> CreateSenderErrorModel ();
+  virtual Ptr<ErrorModel> CreateReceiverErrorModel ();
+
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+
+protected:
+  virtual void RcvAck      (const Ptr<const TcpSocketState> tcb,
+                            const TcpHeader& h, SocketWho who);
+  virtual void ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                             const TcpHeader& h, SocketWho who);
+
+  virtual void CongStateTrace (const TcpSocketState::TcpCongState_t oldValue,
+                               const TcpSocketState::TcpCongState_t newValue);
+
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+
+  virtual void RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who);
+
+  void PktDropped (const Ipv4Header &ipH, const TcpHeader& tcpH, Ptr<const Packet> p);
+  virtual void FinalChecks ();
+
+  virtual void ConfigureProperties ();
+  virtual void ConfigureEnvironment ();
+
+  bool m_pktDropped;
+  bool m_pktWasDropped;
+  uint32_t m_seqToKill;
+  uint32_t m_dupAckReceived;
+
+  SequenceNumber32 m_previousAck;
+  SequenceNumber32 m_sndNextExpSeq;
+  SequenceNumber32 m_rcvNextExpAck;
+
+  uint32_t m_countRetr;
+
+  uint32_t m_bytesRcvButNotAcked;
+
+  Ptr<TcpSeqErrorModel> m_errorModel;
+};
+
+} // namespace ns3
+
+#endif // TCPFASTRETRTEST_H
diff -Naur ns-3.24.1/src/internet/test/tcp-general-test.cc ns-3.25/src/internet/test/tcp-general-test.cc
--- ns-3.24.1/src/internet/test/tcp-general-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-general-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,1171 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#define __STDC_LIMIT_MACROS
+#include "ns3/test.h"
+#include "ns3/node-container.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/simple-net-device-helper.h"
+#include "ns3/ipv4-address-helper.h"
+#include "ns3/internet-stack-helper.h"
+#include "ns3/log.h"
+#include "ns3/tcp-l4-protocol.h"
+#include "../model/ipv4-end-point.h"
+#include "../model/ipv6-end-point.h"
+#include "tcp-general-test.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpGeneralTest");
+
+TcpGeneralTest::TcpGeneralTest (const std::string &desc)
+  : TestCase (desc),
+    m_congControlTypeId (TcpNewReno::GetTypeId ()),
+    m_remoteAddr (Ipv4Address::GetAny (), 4477)
+{
+  NS_LOG_FUNCTION (this << desc);
+}
+
+TcpGeneralTest::~TcpGeneralTest ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+
+void
+TcpGeneralTest::ReceivePacket (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+  Ptr<Packet> packet;
+  Address from;
+
+  while ((packet = socket->RecvFrom (from)))
+    {
+      if (packet->GetSize () == 0)
+        { //EOF
+          break;
+        }
+    }
+}
+
+void
+TcpGeneralTest::SendPacket (Ptr<Socket> socket, uint32_t pktSize,
+                            uint32_t pktCount, Time pktInterval )
+{
+  NS_LOG_FUNCTION (this << " " << pktSize << " " << pktCount << " " <<
+                   pktInterval.GetSeconds ());
+  if (pktCount > 0)
+    {
+      socket->Send (Create<Packet> (pktSize));
+      Simulator::Schedule (pktInterval, &TcpGeneralTest::SendPacket, this,
+                           socket, pktSize, pktCount - 1, pktInterval);
+    }
+  else
+    {
+      socket->Close ();
+    }
+}
+
+void
+TcpGeneralTest::DoTeardown (void)
+{
+  FinalChecks ();
+
+  Simulator::Destroy ();
+  NS_LOG_INFO ("Done.");
+}
+
+void
+TcpGeneralTest::ConfigureEnvironment ()
+{
+  NS_LOG_FUNCTION (this);
+
+  SetCongestionControl (m_congControlTypeId);
+  SetPropagationDelay (MilliSeconds (500));
+  SetTransmitStart (Seconds (10));
+  SetAppPktSize (500);
+  SetAppPktCount (10);
+  SetAppPktInterval (MilliSeconds (1));
+  SetMTU (1500);
+}
+
+void
+TcpGeneralTest::ConfigureProperties ()
+{
+  NS_LOG_FUNCTION (this);
+  SetInitialCwnd (SENDER, 1);
+  SetInitialSsThresh (SENDER, UINT32_MAX);
+  SetSegmentSize (SENDER, 500);
+  SetSegmentSize (RECEIVER, 500);
+}
+
+void
+TcpGeneralTest::DoRun (void)
+{
+  ConfigureEnvironment ();
+
+  NS_LOG_INFO ("Create nodes.");
+  NodeContainer nodes;
+  nodes.Create (2);
+
+  InternetStackHelper internet;
+  internet.Install (nodes);
+
+  Packet::EnablePrinting ();
+
+  Ptr<SimpleChannel> channel = CreateChannel ();
+
+  SimpleNetDeviceHelper helperChannel;
+  helperChannel.SetNetDevicePointToPointMode (true);
+
+  NetDeviceContainer net = helperChannel.Install (nodes, channel);
+
+  Ptr<ErrorModel> receiverEM = CreateReceiverErrorModel ();
+  Ptr<ErrorModel> senderEM   = CreateSenderErrorModel ();
+
+  Ptr<SimpleNetDevice> senderDev = DynamicCast<SimpleNetDevice> (net.Get (0));
+  Ptr<SimpleNetDevice> receiverDev = DynamicCast<SimpleNetDevice> (net.Get (1));
+
+  senderDev->SetMtu (m_mtu);
+  senderDev->GetQueue ()->TraceConnect ("Drop", "SENDER",
+                                        MakeCallback (&TcpGeneralTest::QueueDropCb, this));
+  senderDev->TraceConnect ("PhyRxDrop", "sender",
+                           MakeCallback (&TcpGeneralTest::PhyDropCb, this));
+
+  receiverDev->SetMtu (m_mtu);
+  receiverDev->GetQueue ()->TraceConnect ("Drop", "RECEIVER",
+                                          MakeCallback (&TcpGeneralTest::QueueDropCb, this));
+  receiverDev->TraceConnect ("PhyRxDrop", "RECEIVER",
+                             MakeCallback (&TcpGeneralTest::PhyDropCb, this));
+
+  senderDev->SetReceiveErrorModel (senderEM);
+  receiverDev->SetReceiveErrorModel (receiverEM);
+
+  Ipv4AddressHelper ipv4;
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  Ipv4InterfaceContainer i = ipv4.Assign (net);
+  Ipv4Address serverAddress = i.GetAddress (1);
+  //Ipv4Address clientAddress = i.GetAddress (0);
+
+  NS_LOG_INFO ("Create sockets.");
+  //Receiver socket on n1
+  m_receiverSocket = CreateReceiverSocket (nodes.Get (1));
+
+  m_receiverSocket->SetRecvCallback (MakeCallback (&TcpGeneralTest::ReceivePacket, this));
+  m_receiverSocket->SetAcceptCallback (
+    MakeNullCallback<bool, Ptr<Socket>, const Address &> (),
+    MakeCallback (&TcpGeneralTest::HandleAccept, this));
+  m_receiverSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseCb, this),
+                                       MakeCallback (&TcpGeneralTest::ErrorCloseCb, this));
+  m_receiverSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this));
+  m_receiverSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedAckCb, this));
+  m_receiverSocket->SetRetransmitCb (MakeCallback (&TcpGeneralTest::RtoExpiredCb, this));
+  m_receiverSocket->SetForkCb (MakeCallback (&TcpGeneralTest::ForkCb, this));
+  m_receiverSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::UpdateRttHistoryCb, this));
+  m_receiverSocket->TraceConnectWithoutContext ("Tx",
+                                                MakeCallback (&TcpGeneralTest::TxPacketCb, this));
+  m_receiverSocket->TraceConnectWithoutContext ("Rx",
+                                                MakeCallback (&TcpGeneralTest::RxPacketCb, this));
+
+  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 4477);  m_receiverSocket->Bind (local);
+
+  m_senderSocket = CreateSenderSocket (nodes.Get (0));
+  m_senderSocket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseCb, this),
+                                     MakeCallback (&TcpGeneralTest::ErrorCloseCb, this));
+  m_senderSocket->SetRcvAckCb (MakeCallback (&TcpGeneralTest::RcvAckCb, this));
+  m_senderSocket->SetProcessedAckCb (MakeCallback (&TcpGeneralTest::ProcessedAckCb, this));
+  m_senderSocket->SetRetransmitCb (MakeCallback (&TcpGeneralTest::RtoExpiredCb, this));
+  m_senderSocket->SetDataSentCallback (MakeCallback (&TcpGeneralTest::DataSentCb, this));
+  m_senderSocket->SetUpdateRttHistoryCb (MakeCallback (&TcpGeneralTest::UpdateRttHistoryCb, this));
+  m_senderSocket->TraceConnectWithoutContext ("CongestionWindow",
+                                              MakeCallback (&TcpGeneralTest::CWndTrace, this));
+  m_senderSocket->TraceConnectWithoutContext ("SlowStartThreshold",
+                                              MakeCallback (&TcpGeneralTest::SsThreshTrace, this));
+  m_senderSocket->TraceConnectWithoutContext ("CongState",
+                                              MakeCallback (&TcpGeneralTest::CongStateTrace, this));
+  m_senderSocket->TraceConnectWithoutContext ("Tx",
+                                              MakeCallback (&TcpGeneralTest::TxPacketCb, this));
+  m_senderSocket->TraceConnectWithoutContext ("Rx",
+                                              MakeCallback (&TcpGeneralTest::RxPacketCb, this));
+  m_senderSocket->TraceConnectWithoutContext ("RTT",
+                                              MakeCallback (&TcpGeneralTest::RttTrace, this));
+  m_senderSocket->TraceConnectWithoutContext ("BytesInFlight",
+                                              MakeCallback (&TcpGeneralTest::BytesInFlightTrace, this));
+
+  m_remoteAddr = InetSocketAddress (serverAddress, 4477);
+
+  ConfigureProperties ();
+
+  m_receiverSocket->Listen ();
+  m_receiverSocket->ShutdownSend ();
+
+  Simulator::Schedule (Seconds (0.0),
+                       &TcpGeneralTest::DoConnect, this);
+  Simulator::ScheduleWithContext (nodes.Get (0)->GetId (),
+                                  m_startTime, &TcpGeneralTest::SendPacket, this,
+                                  m_senderSocket, m_pktSize, m_pktCount, m_interPacketInterval);
+
+  NS_LOG_INFO ("Run Simulation.");
+  Simulator::Run ();
+}
+
+void
+TcpGeneralTest::DoConnect ()
+{
+  NS_LOG_INFO (this);
+  m_senderSocket->Connect (m_remoteAddr);
+}
+
+void
+TcpGeneralTest::HandleAccept (Ptr<Socket> socket, const Address& from)
+{
+  (void) from;
+  socket->SetRecvCallback (MakeCallback (&TcpGeneralTest::ReceivePacket, this));
+  socket->SetCloseCallbacks (MakeCallback (&TcpGeneralTest::NormalCloseCb, this),
+                             MakeCallback (&TcpGeneralTest::ErrorCloseCb, this));
+
+}
+
+Ptr<SimpleChannel>
+TcpGeneralTest::CreateChannel ()
+{
+  Ptr<SimpleChannel> ch = CreateObject <SimpleChannel> ();
+
+  ch->SetAttribute ("Delay", TimeValue (m_propagationDelay));
+
+  return ch;
+}
+
+Ptr<TcpSocketMsgBase>
+TcpGeneralTest::CreateSocket (Ptr<Node> node, TypeId socketType,
+                              TypeId congControl)
+{
+  ObjectFactory rttFactory;
+  ObjectFactory congestionAlgorithmFactory;
+  ObjectFactory socketFactory;
+
+  rttFactory.SetTypeId (RttMeanDeviation::GetTypeId ());
+  congestionAlgorithmFactory.SetTypeId (congControl);
+  socketFactory.SetTypeId (socketType);
+
+  Ptr<RttEstimator> rtt = rttFactory.Create<RttEstimator> ();
+  Ptr<TcpSocketMsgBase> socket = DynamicCast<TcpSocketMsgBase> (socketFactory.Create ());
+  Ptr<TcpCongestionOps> algo = congestionAlgorithmFactory.Create<TcpCongestionOps> ();
+
+  socket->SetNode (node);
+  socket->SetTcp (node->GetObject<TcpL4Protocol> ());
+  socket->SetRtt (rtt);
+  socket->SetCongestionControlAlgorithm (algo);
+
+  return socket;
+}
+
+Ptr<ErrorModel>
+TcpGeneralTest::CreateSenderErrorModel ()
+{
+  return 0;
+}
+
+Ptr<ErrorModel>
+TcpGeneralTest::CreateReceiverErrorModel ()
+{
+  return 0;
+}
+
+Ptr<TcpSocketMsgBase>
+TcpGeneralTest::CreateSenderSocket (Ptr<Node> node)
+{
+  return CreateSocket (node, TcpSocketMsgBase::GetTypeId (), m_congControlTypeId);
+}
+
+Ptr<TcpSocketMsgBase>
+TcpGeneralTest::CreateReceiverSocket (Ptr<Node> node)
+{
+  return CreateSocket (node, TcpSocketMsgBase::GetTypeId (), m_congControlTypeId);
+}
+
+void
+TcpGeneralTest::QueueDropCb ( std::string context, Ptr<const Packet> p)
+{
+  if (context.compare ("SENDER") == 0)
+    {
+      QueueDrop (SENDER);
+    }
+  else if (context.compare ("RECEIVER") == 0)
+    {
+      QueueDrop (RECEIVER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Packet dropped in a queue, but queue not recognized");
+    }
+}
+
+void
+TcpGeneralTest::PhyDropCb (std::string context, Ptr<const Packet> p)
+{
+  if (context.compare ("SENDER") == 0)
+    {
+      PhyDrop (SENDER);
+    }
+  else if (context.compare ("RECEIVER") == 0)
+    {
+      PhyDrop (RECEIVER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Packet dropped in a queue, but queue not recognized");
+    }
+}
+
+void
+TcpGeneralTest::NormalCloseCb (Ptr<Socket> socket)
+{
+  if (socket->GetNode () ==  m_receiverSocket->GetNode ())
+    {
+      NormalClose (RECEIVER);
+    }
+  else if (socket->GetNode () == m_senderSocket->GetNode ())
+    {
+      NormalClose (SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Closed socket, but not recognized");
+    }
+}
+
+void
+TcpGeneralTest::UpdateRttHistoryCb (Ptr<const TcpSocketBase> tcp,
+                                    const SequenceNumber32 & seq, uint32_t sz,
+                                    bool isRetransmission)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      UpdatedRttHistory (seq, sz, isRetransmission, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      UpdatedRttHistory (seq, sz, isRetransmission, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Closed socket, but not recognized");
+    }
+}
+
+void
+TcpGeneralTest::RtoExpiredCb (const Ptr<const TcpSocketState> tcb,
+                              const Ptr<const TcpSocketBase> tcp)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      RTOExpired (tcb, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      RTOExpired (tcb, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Closed socket, but not recognized");
+    }
+}
+
+void
+TcpGeneralTest::DataSentCb (Ptr<Socket> socket, uint32_t size)
+{
+  if (socket->GetNode () == m_receiverSocket->GetNode ())
+    {
+      DataSent (size, RECEIVER);
+    }
+  else if (socket->GetNode () == m_senderSocket->GetNode ())
+    {
+      DataSent (size, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Closed socket, but not recognized");
+    }
+}
+
+void
+TcpGeneralTest::ErrorCloseCb (Ptr<Socket> socket)
+{
+  if (socket->GetNode () == m_receiverSocket->GetNode ())
+    {
+      ErrorClose (RECEIVER);
+    }
+  else if (socket->GetNode () == m_senderSocket->GetNode ())
+    {
+      ErrorClose (SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Closed socket, but not recognized");
+    }
+}
+
+void
+TcpGeneralTest::Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << p << h << who);
+}
+
+void
+TcpGeneralTest::Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << p << h << who);
+}
+
+void
+TcpGeneralTest::RcvAckCb (const Ptr<const Packet> p, const TcpHeader& h,
+                          const Ptr<const TcpSocketBase> tcp)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      RcvAck (tcp->m_tcb, h, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      RcvAck (tcp->m_tcb, h, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Received ACK but socket not recognized");
+    }
+}
+
+void
+TcpGeneralTest::TxPacketCb (const Ptr<const Packet> p,
+                            const TcpHeader &h, const Ptr<const TcpSocketBase> tcp)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      Tx (p, h, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      Tx (p, h, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Received ACK but socket not recognized");
+    }
+}
+
+void
+TcpGeneralTest::RxPacketCb (const Ptr<const Packet> p, const TcpHeader &h,
+                            const Ptr<const TcpSocketBase> tcp)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      Rx (p, h, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      Rx (p, h, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Received ACK but socket not recognized");
+    }
+}
+
+void
+TcpGeneralTest::ProcessedAckCb (Ptr<const Packet> p, const TcpHeader& h,
+                                Ptr<const TcpSocketBase> tcp)
+{
+  if (tcp->GetNode () == m_receiverSocket->GetNode ())
+    {
+      ProcessedAck (tcp->m_tcb, h, RECEIVER);
+    }
+  else if (tcp->GetNode () == m_senderSocket->GetNode ())
+    {
+      ProcessedAck (tcp->m_tcb, h, SENDER);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Received ACK but socket not recognized");
+    }
+}
+
+void
+TcpGeneralTest::ForkCb (Ptr<TcpSocketMsgBase> tcp)
+{
+  NS_LOG_FUNCTION (this << tcp);
+
+  m_receiverSocket = tcp;
+}
+
+uint32_t
+TcpGeneralTest::GetReTxThreshold (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_retxThresh;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_retxThresh;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetDupAckCount (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_dupAckCount;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_dupAckCount;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetDelAckCount (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_delAckMaxCount;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_delAckMaxCount;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetDelAckTimeout (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->GetDelAckTimeout ();
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->GetDelAckTimeout ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetSegSize (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->GetSegSize ();
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->GetSegSize ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+SequenceNumber32
+TcpGeneralTest::GetHighestTxMark (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_highTxMark;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_highTxMark;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetInitialCwnd (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->GetInitialCwnd ();
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->GetInitialCwnd ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetInitialSsThresh (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->GetInitialSSThresh ();
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->GetInitialSSThresh ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetRto (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_rto.Get ();
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_rto.Get ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetMinRto (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_minRto;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_minRto;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetConnTimeout (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_cnTimeout;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_cnTimeout;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Ptr<RttEstimator>
+TcpGeneralTest::GetRttEstimator (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_rtt;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_rtt;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetClockGranularity (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_clockGranularity;
+    }
+  else if (who == RECEIVER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_clockGranularity;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+TcpSocket::TcpStates_t
+TcpGeneralTest::GetTcpState (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_state.Get ();
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_state.Get ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+uint32_t
+TcpGeneralTest::GetRWnd (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_rWnd.Get ();
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_rWnd.Get ();
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+EventId
+TcpGeneralTest::GetPersistentEvent (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_persistEvent;
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_persistEvent;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Time
+TcpGeneralTest::GetPersistentTimeout (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_persistTimeout;
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_persistTimeout;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+Ptr<TcpSocketState>
+TcpGeneralTest::GetTcb (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      return DynamicCast<TcpSocketMsgBase> (m_senderSocket)->m_tcb;
+    }
+  else if (who == RECEIVER)
+    {
+
+      return DynamicCast<TcpSocketMsgBase> (m_receiverSocket)->m_tcb;
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+void
+TcpGeneralTest::SetRcvBufSize (SocketWho who, uint32_t size)
+{
+  if (who == SENDER)
+    {
+      m_senderSocket->SetRcvBufSize (size);
+    }
+  else if (who == RECEIVER)
+    {
+      m_receiverSocket->SetRcvBufSize (size);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+void
+TcpGeneralTest::SetSegmentSize (SocketWho who, uint32_t segmentSize)
+{
+  if (who == SENDER)
+    {
+      m_senderSocket->SetSegSize (segmentSize);
+    }
+  else if (who == RECEIVER)
+    {
+      m_receiverSocket->SetSegSize (segmentSize);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+void
+TcpGeneralTest::SetInitialCwnd (SocketWho who, uint32_t initialCwnd)
+{
+  if (who == SENDER)
+    {
+      m_senderSocket->SetInitialCwnd (initialCwnd);
+    }
+  else if (who == RECEIVER)
+    {
+      m_receiverSocket->SetInitialCwnd (initialCwnd);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+void
+TcpGeneralTest::SetInitialSsThresh (SocketWho who, uint32_t initialSsThresh)
+{
+  if (who == SENDER)
+    {
+      m_senderSocket->SetInitialSSThresh (initialSsThresh);
+    }
+  else if (who == RECEIVER)
+    {
+      m_receiverSocket->SetInitialSSThresh (initialSsThresh);
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Not defined");
+    }
+}
+
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketMsgBase);
+
+TypeId
+TcpSocketMsgBase::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpSocketMsgBase")
+    .SetParent<TcpSocketBase> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<TcpSocketMsgBase> ()
+  ;
+  return tid;
+}
+
+Ptr<TcpSocketBase>
+TcpSocketMsgBase::Fork (void)
+{
+  return CopyObject<TcpSocketMsgBase> (this);
+}
+
+void
+TcpSocketMsgBase::SetRcvAckCb (AckManagementCb cb)
+{
+  NS_ASSERT (!cb.IsNull ());
+  m_rcvAckCb = cb;
+}
+
+void
+TcpSocketMsgBase::SetProcessedAckCb (AckManagementCb cb)
+{
+  NS_ASSERT (!cb.IsNull ());
+  m_processedAckCb = cb;
+}
+
+void
+TcpSocketMsgBase::SetRetransmitCb (RetrCb cb)
+{
+  NS_ASSERT (!cb.IsNull ());
+  m_retrCallback = cb;
+}
+
+void
+TcpSocketMsgBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
+{
+  NS_ASSERT (!(m_rcvAckCb.IsNull () || m_processedAckCb.IsNull ()));
+  m_rcvAckCb (packet, tcpHeader, this);
+
+  TcpSocketBase::ReceivedAck (packet, tcpHeader);
+
+  m_processedAckCb (packet, tcpHeader, this);
+}
+
+void
+TcpSocketMsgBase::Retransmit ()
+{
+  TcpSocketBase::Retransmit ();
+
+  m_retrCallback (m_tcb, this);
+}
+
+void
+TcpSocketMsgBase::SetForkCb (Callback<void, Ptr<TcpSocketMsgBase> > cb)
+{
+  NS_ASSERT (!cb.IsNull ());
+  m_forkCb = cb;
+}
+
+void
+TcpSocketMsgBase::SetUpdateRttHistoryCb (UpdateRttCallback cb)
+{
+  NS_ASSERT (!cb.IsNull ());
+  m_updateRttCb = cb;
+}
+
+void
+TcpSocketMsgBase::UpdateRttHistory (const SequenceNumber32 &seq, uint32_t sz,
+                                    bool isRetransmission)
+{
+  TcpSocketBase::UpdateRttHistory (seq, sz, isRetransmission);
+  if (!m_updateRttCb.IsNull ())
+    {
+      m_updateRttCb (this, seq, sz, isRetransmission);
+    }
+}
+
+void
+TcpSocketMsgBase::CompleteFork (Ptr<Packet> p, const TcpHeader &tcpHeader,
+                                const Address &fromAddress, const Address &toAddress)
+{
+  TcpSocketBase::CompleteFork (p, tcpHeader, fromAddress, toAddress);
+
+  if (!m_forkCb.IsNull ())
+    {
+      m_forkCb (this);
+    }
+}
+
+NS_OBJECT_ENSURE_REGISTERED (TcpSocketSmallAcks);
+
+TypeId
+TcpSocketSmallAcks::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TcpSocketSmallAcks")
+    .SetParent<TcpSocketMsgBase> ()
+    .SetGroupName ("Internet")
+    .AddConstructor<TcpSocketSmallAcks> ()
+  ;
+  return tid;
+}
+
+/**
+ * \brief Send empty packet, copied/pasted from TcpSocketBase
+ *
+ * The rationale for copying/pasting is that we need to edit a little the
+ * code inside. Since there isn't a well-defined division of duties,
+ * we are forced to do this.
+ */
+void
+TcpSocketSmallAcks::SendEmptyPacket (uint8_t flags)
+{
+  Ptr<Packet> p = Create<Packet> ();
+  TcpHeader header;
+  SequenceNumber32 s = m_nextTxSequence;
+
+  /*
+   * Add tags for each socket option.
+   * Note that currently the socket adds both IPv4 tag and IPv6 tag
+   * if both options are set. Once the packet got to layer three, only
+   * the corresponding tags will be read.
+   */
+  if (IsManualIpTos ())
+    {
+      SocketIpTosTag ipTosTag;
+      ipTosTag.SetTos (GetIpTos ());
+      p->AddPacketTag (ipTosTag);
+    }
+
+  if (IsManualIpv6Tclass ())
+    {
+      SocketIpv6TclassTag ipTclassTag;
+      ipTclassTag.SetTclass (GetIpv6Tclass ());
+      p->AddPacketTag (ipTclassTag);
+    }
+
+  if (IsManualIpTtl ())
+    {
+      SocketIpTtlTag ipTtlTag;
+      ipTtlTag.SetTtl (GetIpTtl ());
+      p->AddPacketTag (ipTtlTag);
+    }
+
+  if (IsManualIpv6HopLimit ())
+    {
+      SocketIpv6HopLimitTag ipHopLimitTag;
+      ipHopLimitTag.SetHopLimit (GetIpv6HopLimit ());
+      p->AddPacketTag (ipHopLimitTag);
+    }
+
+  if (m_endPoint == 0 && m_endPoint6 == 0)
+    {
+      NS_LOG_WARN ("Failed to send empty packet due to null endpoint");
+      return;
+    }
+  if (flags & TcpHeader::FIN)
+    {
+      flags |= TcpHeader::ACK;
+    }
+  else if (m_state == FIN_WAIT_1 || m_state == LAST_ACK || m_state == CLOSING)
+    {
+      ++s;
+    }
+
+  bool hasSyn = flags & TcpHeader::SYN;
+  bool hasFin = flags & TcpHeader::FIN;
+  bool isAck = flags == TcpHeader::ACK;
+
+  header.SetFlags (flags);
+  header.SetSequenceNumber (s);
+
+  // Actual division in small acks.
+  if (hasSyn || hasFin)
+    {
+      header.SetAckNumber (m_rxBuffer->NextRxSequence ());
+    }
+  else
+    {
+      SequenceNumber32 ackSeq;
+
+      ackSeq = m_lastAckedSeq + m_bytesToAck;
+
+      if (m_bytesLeftToBeAcked == 0 && m_rxBuffer->NextRxSequence () > m_lastAckedSeq)
+        {
+          m_bytesLeftToBeAcked = m_rxBuffer->NextRxSequence ().GetValue () - 1 - m_bytesToAck;
+        }
+      else if (m_bytesLeftToBeAcked > 0 && m_rxBuffer->NextRxSequence () > m_lastAckedSeq)
+        {
+          m_bytesLeftToBeAcked -= m_bytesToAck;
+        }
+
+      NS_LOG_LOGIC ("Acking up to " << ackSeq << " remaining bytes: " << m_bytesLeftToBeAcked);
+
+      header.SetAckNumber (ackSeq);
+      m_lastAckedSeq = ackSeq;
+    }
+
+  // end of division in small acks
+
+  if (m_endPoint != 0)
+    {
+      header.SetSourcePort (m_endPoint->GetLocalPort ());
+      header.SetDestinationPort (m_endPoint->GetPeerPort ());
+    }
+  else
+    {
+      header.SetSourcePort (m_endPoint6->GetLocalPort ());
+      header.SetDestinationPort (m_endPoint6->GetPeerPort ());
+    }
+  AddOptions (header);
+  header.SetWindowSize (AdvertisedWindowSize ());
+
+  // RFC 6298, clause 2.4
+  m_rto = Max (m_rtt->GetEstimate () + Max (m_clockGranularity, m_rtt->GetVariation () * 4), m_minRto);
+
+  if (hasSyn)
+    {
+      if (m_synCount == 0)
+        { // No more connection retries, give up
+          NS_LOG_LOGIC ("Connection failed.");
+          m_rtt->Reset (); //According to recommendation -> RFC 6298
+          CloseAndNotify ();
+          return;
+        }
+      else
+        { // Exponential backoff of connection time out
+          int backoffCount = 0x1 << (m_synRetries - m_synCount);
+          m_rto = m_cnTimeout * backoffCount;
+          m_synCount--;
+        }
+    }
+  if (m_endPoint != 0)
+    {
+      m_tcp->SendPacket (p, header, m_endPoint->GetLocalAddress (),
+                         m_endPoint->GetPeerAddress (), m_boundnetdevice);
+    }
+  else
+    {
+      m_tcp->SendPacket (p, header, m_endPoint6->GetLocalAddress (),
+                         m_endPoint6->GetPeerAddress (), m_boundnetdevice);
+    }
+
+  m_txTrace (p, header, this);
+
+  if (flags & TcpHeader::ACK)
+    { // If sending an ACK, cancel the delay ACK as well
+      m_delAckEvent.Cancel ();
+      m_delAckCount = 0;
+    }
+  if (m_retxEvent.IsExpired () && (hasSyn || hasFin) && !isAck )
+    { // Retransmit SYN / SYN+ACK / FIN / FIN+ACK to guard against lost
+      NS_LOG_LOGIC ("Schedule retransmission timeout at time "
+                    << Simulator::Now ().GetSeconds () << " to expire at time "
+                    << (Simulator::Now () + m_rto.Get ()).GetSeconds ());
+      m_retxEvent = Simulator::Schedule (m_rto, &TcpSocketSmallAcks::SendEmptyPacket, this, flags);
+    }
+
+  // send another ACK if bytes remain
+  if (m_bytesLeftToBeAcked > 0 && m_rxBuffer->NextRxSequence () > m_lastAckedSeq)
+    {
+      SendEmptyPacket (flags);
+    }
+}
+
+Ptr<TcpSocketBase>
+TcpSocketSmallAcks::Fork (void)
+{
+  return CopyObject<TcpSocketSmallAcks> (this);
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-general-test.h ns-3.25/src/internet/test/tcp-general-test.h
--- ns-3.24.1/src/internet/test/tcp-general-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-general-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,868 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPGENERALTEST_H
+#define TCPGENERALTEST_H
+
+#include "ns3/simple-net-device.h"
+#include "ns3/error-model.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/test.h"
+
+namespace ns3 {
+
+/**
+ * \brief Class for inserting callbacks special points of the flow of TCP sockets
+ *
+ * This subclass is born to extend TcpSocketBase, inserting callbacks in certain
+ * points of the flow, to be used in testing to check certain values or flow
+ * directions.
+ *
+ * There isn't the necessity to fill TcpSocketBase of TracedCallbacks; the rationale
+ * is to maintain the base class as clean as possible.
+ *
+ * To be fair with testing, this class should NOT modify the behavior of TcpSocketBase.
+ *
+ * \see SetRcvAckCb
+ * \see SetProcessedAckCb
+ * \see SetRetransmitCb
+ */
+class TcpSocketMsgBase : public TcpSocketBase
+{
+public:
+  static TypeId GetTypeId (void);
+
+  TcpSocketMsgBase () : TcpSocketBase ()
+  {
+  }
+
+  TcpSocketMsgBase (const TcpSocketMsgBase &other) : TcpSocketBase (other)
+  {
+    m_rcvAckCb = other.m_rcvAckCb;
+    m_processedAckCb = other.m_processedAckCb;
+    m_retrCallback = other.m_retrCallback;
+    m_forkCb = other.m_forkCb;
+  }
+
+  typedef Callback<void, Ptr<const Packet>, const TcpHeader&,
+                   Ptr<const TcpSocketBase> > AckManagementCb;
+  typedef Callback<void, Ptr<const TcpSocketState>,
+                   Ptr<const TcpSocketBase> > RetrCb;
+  typedef Callback<void, Ptr<const TcpSocketBase>, const SequenceNumber32&,
+                   uint32_t, bool> UpdateRttCallback;
+
+  /**
+   * \brief Set the callback invoked when an ACK is received (at the beginning
+   * of the processing)
+   *
+   * \param cb callback
+   */
+  void SetRcvAckCb (AckManagementCb cb);
+
+  /**
+   * \brief Set the callback invoked when an ACK is received and processed
+   * (at the end of the processing)
+   *
+   * \param cb callback
+   */
+  void SetProcessedAckCb (AckManagementCb cb);
+
+  /**
+   * \brief Set the callback invoked after the processing of a retransmit timeout
+   *
+   * \param cb callback
+   */
+  void SetRetransmitCb (RetrCb cb);
+
+  /**
+   * \brief Set the callback invoked after the forking
+   * \param cb callback
+   */
+  void SetForkCb (Callback<void, Ptr<TcpSocketMsgBase> > cb);
+
+  /**
+   * \brief Set the callback invoked when we update rtt history
+   *
+   * \param cb callback
+   */
+  void SetUpdateRttHistoryCb (UpdateRttCallback cb);
+
+protected:
+  virtual void ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader);
+  virtual void Retransmit (void);
+  virtual Ptr<TcpSocketBase> Fork (void);
+  virtual void CompleteFork (Ptr<Packet> p, const TcpHeader& tcpHeader,
+                             const Address& fromAddress, const Address& toAddress);
+  virtual void UpdateRttHistory (const SequenceNumber32 &seq, uint32_t sz,
+                                 bool isRetransmission);
+
+private:
+  AckManagementCb m_rcvAckCb;
+  AckManagementCb m_processedAckCb;
+  RetrCb m_retrCallback;
+  Callback<void, Ptr<TcpSocketMsgBase> > m_forkCb;
+  UpdateRttCallback m_updateRttCb;
+};
+
+
+/**
+ * \brief A TCP socket which sends ACKs smaller than the segment received.
+ *
+ * Usually, a TCP socket which receives the sequence number "x" replies with
+ * an ACK to "x+1". What happen if a malicious socket sends smaller ACKs
+ * (e.g. two ACKs, one for "x/2", and the other for "x+1") ? A TCP implementation
+ * should avoid to artificially increase the congestion window, thinking of
+ * having ACKed 2 segments instead of 1.
+ *
+ * Set the number of bytes that should be acked in each ACK packet with
+ * SetBytesToAck.
+ *
+ * \see TcpSlowStartAttackerTest
+ */
+class TcpSocketSmallAcks : public TcpSocketMsgBase
+{
+public:
+  static TypeId GetTypeId (void);
+
+  TcpSocketSmallAcks ()
+    : TcpSocketMsgBase (),
+      m_bytesToAck (125),
+      m_bytesLeftToBeAcked (0),
+      m_lastAckedSeq (1)
+  {
+  }
+
+  TcpSocketSmallAcks (const TcpSocketSmallAcks &other)
+    : TcpSocketMsgBase (other),
+      m_bytesToAck (other.m_bytesToAck),
+      m_bytesLeftToBeAcked (other.m_bytesLeftToBeAcked),
+      m_lastAckedSeq (other.m_lastAckedSeq)
+  {
+  }
+
+  void SetBytesToAck (uint32_t bytes)
+  {
+    m_bytesToAck = bytes;
+  }
+
+protected:
+  virtual void SendEmptyPacket (uint8_t flags);
+  Ptr<TcpSocketBase> Fork (void);
+
+  uint32_t m_bytesToAck;
+  uint32_t m_bytesLeftToBeAcked;
+  SequenceNumber32 m_lastAckedSeq;
+};
+
+/**
+* \brief General infrastructure for TCP testing
+*
+* The class provides a simple setup for a connection testing. Implement
+* or modify the virtual methods in order to install a specified
+* channel, a specified socket and a specified error model on this simulation.
+* Default values are a null error model, and as a channel a SimpleChannel with
+* the propagation delay set through the constructor.
+*
+* Check DoRun documentation for more information on the environment setup.
+*
+* Apart from setting up the environment for testing, subclassing permits also
+* to track and check what is happening inside the two connected sockets. Thanks
+* to TcpSocketMsgBase, there are many information provided to children:
+*
+* - Tracing of states inside the state machines (TCP and ACK ones, through
+*   functions CongStateTrace and TcpStateTrace)
+* - cWnd tracing (through CWndTrace)
+* - Socket closing: error state, or normal state (NormalClose and ErrorClose)
+* - Packet drop, inside queue or over the link (QueueDrop, PhyDrop)
+* - Ack received (RcvAck) and Ack processed (ProcessedAck). The first is used to
+*   signal that an ACK has been received; after the processing of it, the Second
+*   is called
+* - A packet is transmitted to IP layer or received from IP layer (Tx and Rx)
+* - The RTO expires (RTOExpired)
+*
+* The default version of such methods is empty; implement their behavior differently,
+* based on what you want to test. Default is empty to avoid the need to implement
+* useless pure virtual function.
+*
+* If you need values from TcpSocketBase, thanks to the friend relationship between
+* this class and TcpSocketBase itself you can get it. Remember that friendship
+* isn't passed by inheritance, so the way to go is to write a Getters (like
+* GetSegSize) and call it in the subclass.
+*
+* \see DoRun
+* \see TcpSocketMsgBase
+*/
+class TcpGeneralTest : public TestCase
+{
+public:
+  /**
+   * \brief TcpGeneralTest constructor
+   *
+   * Please use the method ConfigureEnvironment () to configure other
+   * parameters than the test description.
+   *
+   * \param desc description of the test
+   */
+  TcpGeneralTest (const std::string &desc);
+  ~TcpGeneralTest ();
+
+  /**
+   * \brief Used as parameter of methods, specifies on what node
+   * the caller is interested (e.g. GetSegSize).
+   */
+  enum SocketWho
+  {
+    SENDER,  //!< Sender node
+    RECEIVER //!< Receiver node
+  };
+
+protected:
+  /**
+   * \brief Create and return the channel installed between the two socket
+   *
+   * \return A SimpleChannel subclass
+   */
+  virtual Ptr<SimpleChannel> CreateChannel ();
+
+  /**
+   * \brief Create and return the error model to install in the sender node
+   *
+   * \return sender error model
+   */
+  virtual Ptr<ErrorModel> CreateSenderErrorModel ();
+
+  /**
+   * \brief Create and return the error model to install in the receiver node
+   *
+   * \return receiver error model
+   */
+  virtual Ptr<ErrorModel> CreateReceiverErrorModel ();
+
+  /**
+   * \brief Create and install the socket to install on the receiver
+   * \param node receiver node pointer
+   * \return the socket to be installed in the receiver
+   */
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+
+  /**
+   * \brief Create and install the socket to install on the sender
+   * \param node sender node pointer
+   * \return the socket to be installed in the sender
+   */
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+
+  /**
+   * \brief Create a socket
+   *
+   * \param node associated node
+   * \param congControl congestion control
+   * \return a pointer to the newer created socket
+   */
+  virtual Ptr<TcpSocketMsgBase> CreateSocket (Ptr<Node> node, TypeId socketType,
+                                              TypeId congControl);
+
+  /**
+   * \brief Get the pointer to a previously created sender socket
+   * \return ptr to sender socket or 0
+   */
+  Ptr<TcpSocketMsgBase> GetSenderSocket ()
+  {
+    return m_senderSocket;
+  }
+
+  /**
+   * \brief Get the pointer to a previously created receiver socket
+   * \return ptr to receiver socket or 0
+   */
+  Ptr<TcpSocketMsgBase> GetReceiverSocket ()
+  {
+    return m_receiverSocket;
+  }
+
+  /**
+   * \brief Execute the tcp test
+   *
+   * As environment, two socket are connected through a SimpleChannel. Each device
+   * has an MTU of 1500 bytes, and the application starts to send packet at
+   * 10s of simulated time, through SendPacket.
+   *
+   * If you need to change parameters of the environment, please inherit an
+   * implement the method ConfigureEnvironment (); that will be called at the
+   * beginning of this method. To configure Socket parameters (i.e. parameters
+   * that should be applied after socket have been created) use ConfigureProperties.
+   *
+   * Please do not use any Config:: statements.
+   *
+   * \see ConfigureEnvironment
+   */
+  virtual void DoRun (void);
+
+  /**
+   * \brief Change the configuration of the evironment
+   */
+  virtual void ConfigureEnvironment (void);
+
+  /**
+   * \brief Change the configuration of the socket properties
+   */
+  virtual void ConfigureProperties (void);
+
+  /**
+   * \brief Teardown the TCP test
+   */
+  virtual void DoTeardown (void);
+
+  /**
+   * \brief Scheduled at 0.0, SENDER starts the connection to RECEIVER
+   */
+  void DoConnect ();
+
+  /**
+   * \brief Packet received
+   *
+   * The method processes the packet (application-layer)
+   * \param socket socket which has received the packet
+   */
+  virtual void ReceivePacket (Ptr<Socket> socket);
+
+  /**
+   * \brief Send packets to other endpoint
+   *
+   * \param socket Socket
+   * \param pktSize size of the packet
+   * \param pktCount number of packets to send
+   * \param pktInterval interval between packet (application-level)
+   */
+  void SendPacket (Ptr<Socket> socket, uint32_t pktSize,
+                   uint32_t pktCount, Time pktInterval);
+
+  /**
+   * \brief Get the segment size of the node specified
+   *
+   * \param who node to get the parameter from
+   *
+   * \return segment size of the specified node
+   */
+  uint32_t GetSegSize (SocketWho who);
+
+  /**
+   * \brief Get the highest tx mark of the node specified
+   *
+   * \param who node to get the parameter from
+   *
+   * \return mark of the specified node
+   */
+  SequenceNumber32 GetHighestTxMark (SocketWho who);
+
+  /**
+   * \brief Get the retransmission threshold
+   * \param who node to get the parameter from
+   * \return retransmission threshold
+   */
+  uint32_t GetReTxThreshold (SocketWho who);
+
+  /**
+   * \brief Get the initial slow start threshold
+   * \return initial slow start threshold
+   */
+  uint32_t GetInitialSsThresh (SocketWho who);
+
+  /**
+   * \brief Get the initial congestion window
+   * \return initial cwnd
+   */
+  uint32_t GetInitialCwnd (SocketWho who);
+
+  /**
+   * \brief Get the number of dupack received
+   * \param who node to get the parameter from
+   * \return number of dupack
+   */
+  uint32_t GetDupAckCount (SocketWho who);
+
+  /**
+   * \brief Get the number of delayed ack (if present)
+   * \param who node to get the parameter from
+   * \return number of ack we will wait before sending an ACK
+   */
+  uint32_t GetDelAckCount (SocketWho who);
+
+  /**
+   * \brief Get the timeout of delayed ack (if present)
+   * \param who node to get the parameter from
+   * \return time we will wait before sending an ACK
+   */
+  Time GetDelAckTimeout (SocketWho who);
+
+  /**
+   * \brief Get the retransmission time
+   *
+   * \param who node to get the parameter from
+   * \return calculated RTO time
+   */
+  Time GetRto (SocketWho who);
+
+  /**
+   * \brief Get the minimun RTO attribute
+   *
+   * \param who node to get the parameter from
+   * \return minimum RTO time
+   */
+  Time GetMinRto (SocketWho who);
+
+  /**
+   * \brief Get the retransmission time for the SYN segments
+   *
+   * \param who node to get the parameter from
+   * \return SYN segments RTO time
+   */
+  Time GetConnTimeout (SocketWho who);
+
+  /**
+   * \brief Get the Rtt estimator of the socket
+   *
+   * \param who node to get the parameter from
+   * \return Rtt estimator
+   */
+  Ptr<RttEstimator> GetRttEstimator (SocketWho who);
+
+  /**
+   * \brief Get the clock granularity attribute
+   *
+   * \param who node to get the parameter from
+   * \return clock granularity
+   */
+  Time GetClockGranularity (SocketWho who);
+
+  /**
+   * \brief Get the state of the TCP state machine
+   *
+   * \param who socket where check the parameter
+   * \return the state of the socket
+   */
+  TcpSocket::TcpStates_t GetTcpState (SocketWho who);
+
+  /**
+   * \brief Get the TCB from selected socket
+   *
+   * \param who socket where get the TCB
+   * \return the transmission control block
+   */
+  Ptr<TcpSocketState> GetTcb (SocketWho who);
+
+  /**
+   * \brief Get the rWnd of the selected socket
+   *
+   * \param who socket where check the parameter
+   * \return the received advertised window
+   */
+  uint32_t GetRWnd (SocketWho who);
+
+  /**
+   * \brief Get the persistent event of the selected socket
+   *
+   * \param who socket where check the parameter
+   * \return the persistent event in the selected socket
+   */
+  EventId GetPersistentEvent (SocketWho who);
+
+  /**
+   * \brief Get the persistent timeout of the selected socket
+   *
+   * \param who socket where check the parameter
+   * \return the persistent timeout in the selected socket
+   */
+  Time GetPersistentTimeout (SocketWho who);
+
+  /**
+   * \brief Forcefully set a defined size for rx buffer
+   *
+   * \param who socket to force
+   * \param size size of the rx buffer
+   */
+  void SetRcvBufSize (SocketWho who, uint32_t size);
+
+  /**
+   * \brief Forcefully set the segment size
+   *
+   * \param who socket to force
+   * \param segmentSize segmentSize
+   */
+  void SetSegmentSize (SocketWho who, uint32_t segmentSize);
+
+  /**
+   * \brief Forcefully set the initial cwnd
+   *
+   * \param who socket to force
+   * \param initialCwnd size of the initial cwnd
+   */
+  void SetInitialCwnd (SocketWho who, uint32_t initialCwnd);
+
+  /**
+   * \brief Forcefully set the initial ssth
+   *
+   * \param who socket to force
+   * \param initialSsThresh size of the initial ssth
+   */
+  void SetInitialSsThresh (SocketWho who, uint32_t initialSsThresh);
+
+  /**
+   * \brief Set app packet size
+   *
+   * The application will generate packet of this size.
+   *
+   * \param pktSize size of the packet
+   */
+  void SetAppPktSize (uint32_t pktSize) { m_pktSize = pktSize; }
+
+  /**
+   * \brief Set app packet count
+   *
+   * The application will generate this count of packets.
+   *
+   * \param pktCount count of packets to generate
+   */
+  void SetAppPktCount (uint32_t pktCount) { m_pktCount = pktCount; }
+
+  /**
+   * \brief Interval between app-generated packet
+   *
+   * \param pktInterval interval
+   */
+  void SetAppPktInterval (Time pktInterval) { m_interPacketInterval = pktInterval; }
+
+  /**
+   * \brief Propagation delay of the bottleneck link
+   *
+   * \param propDelay propagation delay
+   */
+  void SetPropagationDelay (Time propDelay) { m_propagationDelay = propDelay; }
+
+  /**
+   * \brief Set the initial time at which the application sends the first data packet
+   *
+   * \param startTime start time
+   */
+  void SetTransmitStart (Time startTime) { m_startTime = startTime; }
+
+  /**
+   * \brief Congestion control of the sender socket
+   *
+   * \param congControl typeid of the congestion control algorithm
+   */
+  void SetCongestionControl (TypeId congControl) { m_congControlTypeId = congControl; }
+
+  /**
+   * \brief MTU of the bottleneck link
+   *
+   * \param mtu MTU
+   */
+  void SetMTU (uint32_t mtu) { m_mtu = mtu; }
+
+  /**
+   * \brief State on Ack state machine changes
+   * \param oldValue old value
+   * \param newValue new value
+   */
+  virtual void CongStateTrace (const TcpSocketState::TcpCongState_t oldValue,
+                               const TcpSocketState::TcpCongState_t newValue)
+  {
+  }
+
+  /**
+   * \brief Congestion window changes
+   *
+   * \param oldValue old value
+   * \param newValue new value
+   */
+  virtual void CWndTrace (uint32_t oldValue, uint32_t newValue)
+  {
+  }
+
+  /**
+   * \brief Rtt changes
+   *
+   * This applies only for sender socket.
+   *
+   * \param oldValue old value
+   * \param newValue new value
+   */
+  virtual void RttTrace (Time oldTime, Time newTime)
+  {
+  }
+
+  /**
+   *  \brief Slow start threshold changes
+   *
+   * This applies only for sender socket.
+   *
+   *
+   * \param oldValue old value
+   * \param newValue new value
+   */
+  virtual void SsThreshTrace (uint32_t oldValue, uint32_t newValue)
+  {
+  }
+
+  /**
+   * \brief Bytes in flight changes
+   *
+   * This applies only for sender socket.
+   *
+   * \param oldValue old value
+   * \param newValue new value
+   */
+  virtual void BytesInFlightTrace (uint32_t oldValue, uint32_t newValue)
+  {
+  }
+
+  /**
+   * \brief Socket closed normally
+   * \param who the socket closed (SENDER or RECEIVER)
+   */
+  virtual void NormalClose (SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Socket closed with an error
+   *
+   * \param who the socket closed (SENDER or RECEIVER)
+   */
+  virtual void ErrorClose  (SocketWho who)
+  {
+    /** \todo indicate the error */
+  }
+
+  /**
+   * \brief Drop on the queue
+   * \param who where the drop occurred (SENDER or RECEIVER)
+   */
+  virtual void QueueDrop   (SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Link drop
+   * \param who where the drop occurred (SENDER or RECEIVER)
+   */
+  virtual void PhyDrop     (SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Received ack
+   *
+   * Invoked when an ACK is received (no processing is done yet)
+   *
+   * \param tcb Transmission Control Block
+   * \param h the header of segment
+   * \param who the socket which has received the ACK (SENDER or RECEIVER)
+   */
+  virtual void RcvAck      (const Ptr<const TcpSocketState> tcb,
+                            const TcpHeader& h, SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Processed ack
+   *
+   * Invoked after the processing of the ACK
+   *
+   * \param tcb Transmission Control Block
+   * \param h the header of segment
+   * \param who the socket which has processed the ACK (SENDER or RECEIVER)
+   */
+  virtual void ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                             const TcpHeader& h, SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Packet transmitted down to IP layer
+   *
+   * \param p packet
+   * \param h header
+   * \param who the socket which has received the packet (SENDER or RECEIVER)
+   */
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+
+  /**
+   * \brief Packet received from IP layer
+   *
+   * \param p packet
+   * \param h header
+   * \param who  the socket which has received the packet (SENDER or RECEIVER)
+   */
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+
+  /**
+   * \brief Rto has expired
+   *
+   * \param tcb Transmission control block
+   * \param who where the RTO has expired (SENDER or RECEIVER)
+   */
+  virtual void RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Updated the Rtt history
+   * \param seq Sequence inserted
+   * \param sz size
+   * \param isRetransmission self-explanatory
+   * \param who where the rtt history was updated
+   */
+  virtual void UpdatedRttHistory (const SequenceNumber32 & seq, uint32_t sz,
+                                  bool isRetransmission, SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Notifying application for sent data
+   *
+   * \param size the amount of bytes transmitted
+   * \param who where the RTO has expired (SENDER or RECEIVER)
+   */
+  virtual void DataSent (uint32_t size, SocketWho who)
+  {
+  }
+
+  /**
+   * \brief Performs the (eventual) final checks through test asserts
+   *
+   */
+  virtual void FinalChecks ()
+  {
+  }
+
+  /**
+   * \brief Get the channel Propagation Delay
+   * \return propagation delay of the channel
+   */
+  Time GetPropagationDelay () const
+  {
+    return m_propagationDelay;
+  }
+
+  /**
+   * \brief Get the data start time
+   * \return start time of data packets
+   */
+  Time GetStartTime () const
+  {
+    return m_startTime;
+  }
+
+  /**
+   * \brief Get the MTU of the environment
+   * \return MTU of the environment
+   */
+  uint32_t GetMtu () const
+  {
+    return m_mtu;
+  }
+
+  /**
+   * \brief Get the application packet size
+   * \return application packet size
+   */
+  uint32_t GetPktSize () const
+  {
+    return m_pktSize;
+  }
+
+  /**
+   * \brief Get the number of application packets
+   * \return count of application packets to be generated
+   */
+  uint32_t GetPktCount () const
+  {
+    return m_pktCount;
+  }
+
+  /**
+   * \brief Get the interval to wait for each packet sent down from application
+   * to TCP
+   * \return interval between packet
+   */
+  Time GetPktInterval () const
+  {
+    return m_interPacketInterval;
+  }
+
+  TypeId   m_congControlTypeId;      //!< Congestion control
+
+private:
+  // Member variables, accessible through getters
+  // giving write access to subclass can be dangerous
+  Time     m_propagationDelay;     //!< Propagation delay of the channel
+
+  Time     m_startTime;            //!< Data transmission time
+  uint32_t m_mtu;                  //!< MTU of the environment
+
+  uint32_t m_pktSize;              //!< Size of the application packet
+  uint32_t m_pktCount;             //!< Count of the application packet
+  Time     m_interPacketInterval;  //!< Time between sending application packet
+                                   //   down to tcp socket
+
+  Ptr<TcpSocketMsgBase> m_senderSocket;   //!< Pointer to sender socket
+  Ptr<TcpSocketMsgBase> m_receiverSocket; //!< Pointer to receiver socket
+
+private:
+  // De-multiplexing callbacks.
+  void NormalCloseCb  (Ptr<Socket> socket);
+  void ErrorCloseCb   (Ptr<Socket> socket);
+  void QueueDropCb    (std::string context, Ptr<const Packet> p);
+  void PhyDropCb      (std::string context, Ptr<const Packet> p);
+  void RcvAckCb       (Ptr<const Packet> p, const TcpHeader& h,
+                       Ptr<const TcpSocketBase> tcp);
+  void ProcessedAckCb (Ptr<const Packet> p, const TcpHeader& h,
+                       Ptr<const TcpSocketBase> tcp);
+  void TxPacketCb     (const Ptr<const Packet> p, const TcpHeader& h,
+                       const Ptr<const TcpSocketBase> tcp);
+  void RxPacketCb     (const Ptr<const Packet> p, const TcpHeader& h,
+                       const Ptr<const TcpSocketBase> tcp);
+  void RtoExpiredCb   (const Ptr<const TcpSocketState> tcb,
+                       const Ptr<const TcpSocketBase> tcp);
+  void UpdateRttHistoryCb (Ptr<const TcpSocketBase> tcp, const SequenceNumber32&seq,
+                           uint32_t sz, bool isRetransmission);
+  void DataSentCb     (Ptr<Socket> socket, uint32_t size);
+  void ForkCb         (Ptr<TcpSocketMsgBase> tcp);
+  void HandleAccept (Ptr<Socket> socket, const Address& from);
+
+  InetSocketAddress m_remoteAddr;
+};
+
+/**
+ * \brief Convenience function to retrieve the ACK state from a TCB
+ *
+ * \param tcb Transmission control block
+ * \return the state of the ACK state machine
+ */
+static inline TcpSocketState::TcpCongState_t
+GetCongStateFrom (Ptr<const TcpSocketState> tcb)
+{
+  return tcb->m_congState.Get ();
+}
+
+} // namespace ns3
+
+#endif // TCPGENERALTEST_H
+
diff -Naur ns-3.24.1/src/internet/test/tcp-header-test.cc ns-3.25/src/internet/test/tcp-header-test.cc
--- ns-3.24.1/src/internet/test/tcp-header-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/tcp-header-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -23,7 +23,7 @@
 #include "ns3/core-module.h"
 #include "ns3/tcp-header.h"
 #include "ns3/buffer.h"
-#include "ns3/private/tcp-option-rfc793.h"
+#include "../model/tcp-option-rfc793.h"
 
 namespace ns3 {
 
diff -Naur ns-3.24.1/src/internet/test/tcp-highspeed-test.cc ns-3.25/src/internet/test/tcp-highspeed-test.cc
--- ns-3.24.1/src/internet/test/tcp-highspeed-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-highspeed-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,242 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello, <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-highspeed.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHighSpeedTestSuite");
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpHighSpeed
+ */
+class TcpHighSpeedIncrementTest : public TestCase
+{
+public:
+  TcpHighSpeedIncrementTest (uint32_t cWnd, uint32_t segmentSize,
+                             const std::string &name);
+
+private:
+  virtual void DoRun (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpHighSpeedIncrementTest::TcpHighSpeedIncrementTest (uint32_t cWnd,
+                                                      uint32_t segmentSize,
+                                                      const std::string &name)
+  : TestCase (name),
+  m_cWnd (cWnd),
+  m_segmentSize (segmentSize)
+{
+}
+
+void
+TcpHighSpeedIncrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpHighSpeed> cong = CreateObject <TcpHighSpeed> ();
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+  uint32_t coeffA = TcpHighSpeed::TableLookupA (segCwnd);
+
+  // Each received ACK weight is "coeffA". To see an increase of 1 MSS, we need
+  // to ACK at least segCwnd/coeffA ACK.
+
+  cong->IncreaseWindow (m_state, (segCwnd / coeffA) + 1);
+
+  NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), m_cWnd + m_segmentSize,
+                         "CWnd has not increased");
+}
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpHighSpeed
+ */
+class TcpHighSpeedDecrementTest : public TestCase
+{
+public:
+  TcpHighSpeedDecrementTest (uint32_t ssThresh, uint32_t segmentSize,
+                             const std::string &name);
+
+private:
+  virtual void DoRun (void);
+
+  uint32_t m_cWnd;
+  uint32_t m_segmentSize;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpHighSpeedDecrementTest::TcpHighSpeedDecrementTest (uint32_t cWnd,
+                                                      uint32_t segmentSize,
+                                                      const std::string &name)
+  : TestCase (name),
+  m_cWnd (cWnd),
+  m_segmentSize (segmentSize)
+{
+}
+
+void
+TcpHighSpeedDecrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpHighSpeed> cong = CreateObject <TcpHighSpeed> ();
+
+  uint32_t segCwnd = m_cWnd / m_segmentSize;
+  double coeffB = 1.0 - TcpHighSpeed::TableLookupB (segCwnd);
+
+  uint32_t ret = cong->GetSsThresh (m_state, m_state->m_cWnd);
+
+  uint32_t ssThHS = std::max (2.0, segCwnd * coeffB);
+
+  NS_TEST_ASSERT_MSG_EQ (ret / m_segmentSize, ssThHS,
+                         "HighSpeed decrement fn not used");
+}
+
+
+// -------------------------------------------------------------------
+
+static const struct HighSpeedImportantValues
+{
+  unsigned int cwnd;
+  unsigned int md;
+} highSpeedImportantValues[] = {
+  {     38,  128, /*  0.50 */ },
+  {    118,  112, /*  0.44 */ },
+  {    221,  104, /*  0.41 */ },
+  {    347,   98, /*  0.38 */ },
+  {    495,   93, /*  0.37 */ },
+  {    663,   89, /*  0.35 */ },
+  {    851,   86, /*  0.34 */ },
+  {   1058,   83, /*  0.33 */ },
+  {   1284,   81, /*  0.32 */ },
+  {   1529,   78, /*  0.31 */ },
+  {   1793,   76, /*  0.30 */ },
+  {   2076,   74, /*  0.29 */ },
+  {   2378,   72, /*  0.28 */ },
+  {   2699,   71, /*  0.28 */ },
+  {   3039,   69, /*  0.27 */ },
+  {   3399,   68, /*  0.27 */ },
+  {   3778,   66, /*  0.26 */ },
+  {   4177,   65, /*  0.26 */ },
+  {   4596,   64, /*  0.25 */ },
+  {   5036,   62, /*  0.25 */ },
+  {   5497,   61, /*  0.24 */ },
+  {   5979,   60, /*  0.24 */ },
+  {   6483,   59, /*  0.23 */ },
+  {   7009,   58, /*  0.23 */ },
+  {   7558,   57, /*  0.22 */ },
+  {   8130,   56, /*  0.22 */ },
+  {   8726,   55, /*  0.22 */ },
+  {   9346,   54, /*  0.21 */ },
+  {   9991,   53, /*  0.21 */ },
+  {  10661,   52, /*  0.21 */ },
+  {  11358,   52, /*  0.20 */ },
+  {  12082,   51, /*  0.20 */ },
+  {  12834,   50, /*  0.20 */ },
+  {  13614,   49, /*  0.19 */ },
+  {  14424,   48, /*  0.19 */ },
+  {  15265,   48, /*  0.19 */ },
+  {  16137,   47, /*  0.19 */ },
+  {  17042,   46, /*  0.18 */ },
+  {  17981,   45, /*  0.18 */ },
+  {  18955,   45, /*  0.18 */ },
+  {  19965,   44, /*  0.17 */ },
+  {  21013,   43, /*  0.17 */ },
+  {  22101,   43, /*  0.17 */ },
+  {  23230,   42, /*  0.17 */ },
+  {  24402,   41, /*  0.16 */ },
+  {  25618,   41, /*  0.16 */ },
+  {  26881,   40, /*  0.16 */ },
+  {  28193,   39, /*  0.16 */ },
+  {  29557,   39, /*  0.15 */ },
+  {  30975,   38, /*  0.15 */ },
+  {  32450,   38, /*  0.15 */ },
+  {  33986,   37, /*  0.15 */ },
+  {  35586,   36, /*  0.14 */ },
+  {  37253,   36, /*  0.14 */ },
+  {  38992,   35, /*  0.14 */ },
+  {  40808,   35, /*  0.14 */ },
+  {  42707,   34, /*  0.13 */ },
+  {  44694,   33, /*  0.13 */ },
+  {  46776,   33, /*  0.13 */ },
+  {  48961,   32, /*  0.13 */ },
+  {  51258,   32, /*  0.13 */ },
+  {  53677,   31, /*  0.12 */ },
+  {  56230,   30, /*  0.12 */ },
+  {  58932,   30, /*  0.12 */ },
+  {  61799,   29, /*  0.12 */ },
+  {  64851,   28, /*  0.11 */ },
+  {  68113,   28, /*  0.11 */ },
+  {  71617,   27, /*  0.11 */ },
+  {  75401,   26, /*  0.10 */ },
+  {  79517,   26, /*  0.10 */ },
+  {  84035,   25, /*  0.10 */ },
+  {  89053,   24, /*  0.10 */ },
+};
+
+#define HIGHSPEED_VALUES_N 71
+
+static class TcpHighSpeedTestSuite : public TestSuite
+{
+public:
+  TcpHighSpeedTestSuite () : TestSuite ("tcp-highspeed-test", UNIT)
+  {
+    std::stringstream ss;
+
+    for (uint32_t i = 0; i < HIGHSPEED_VALUES_N; ++i)
+      {
+        ss << highSpeedImportantValues[i].cwnd;
+        AddTestCase (new TcpHighSpeedIncrementTest (highSpeedImportantValues[i].cwnd, 1,
+                                                    "Highspeed increment test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpHighSpeedIncrementTest (highSpeedImportantValues[i].cwnd * 536, 536,
+                                                    "Highspeed increment test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpHighSpeedIncrementTest (highSpeedImportantValues[i].cwnd * 1446, 1446,
+                                                    "Highspeed increment test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpHighSpeedDecrementTest (highSpeedImportantValues[i].cwnd, 1,
+                                                    "Highspeed Decrement test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpHighSpeedDecrementTest (highSpeedImportantValues[i].cwnd * 536, 536,
+                                                    "Highspeed Decrement test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpHighSpeedDecrementTest (highSpeedImportantValues[i].cwnd * 1446, 1446,
+                                                    "Highspeed Decrement test on cWnd " + ss.str ()),
+                     TestCase::QUICK);
+        ss.flush ();
+      }
+  }
+} g_tcpHighSpeedTest;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-highspeed-test.h ns-3.25/src/internet/test/tcp-highspeed-test.h
--- ns-3.24.1/src/internet/test/tcp-highspeed-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-highspeed-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,11 @@
+#ifndef TCPHIGHSPEEDTEST_H
+#define TCPHIGHSPEEDTEST_H
+
+
+class TcpHighSpeedTest
+{
+public:
+  TcpHighSpeedTest();
+};
+
+#endif // TCPHIGHSPEEDTEST_H
diff -Naur ns-3.24.1/src/internet/test/tcp-hybla-test.cc ns-3.25/src/internet/test/tcp-hybla-test.cc
--- ns-3.24.1/src/internet/test/tcp-hybla-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-hybla-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,149 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello, <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/log.h"
+#include "ns3/tcp-congestion-ops.h"
+#include "ns3/tcp-socket-base.h"
+#include "ns3/tcp-hybla.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpHyblaTestSuite");
+
+/**
+ * \brief Testing the congestion avoidance increment on TcpHybla
+ */
+class TcpHyblaIncrementTest : public TestCase
+{
+public:
+  TcpHyblaIncrementTest (uint32_t cWnd, uint32_t ssThresh,
+                         uint32_t segmentSize, const Time& rtt,
+                         const std::string &name);
+
+private:
+  virtual void DoRun (void);
+  void RhoUpdated (double oldVal, double newVal);
+
+  uint32_t m_cWnd;
+  uint32_t m_ssThresh;
+  uint32_t m_segmentSize;
+  Time m_rtt;
+  double m_rho;
+  Ptr<TcpSocketState> m_state;
+};
+
+TcpHyblaIncrementTest::TcpHyblaIncrementTest (uint32_t cWnd, uint32_t ssThresh,
+                                              uint32_t segmentSize, const Time &rtt,
+                                              const std::string &name)
+  : TestCase (name),
+  m_cWnd (cWnd),
+  m_ssThresh (ssThresh),
+  m_segmentSize (segmentSize),
+  m_rtt (rtt),
+  m_rho (0)
+{
+}
+
+void
+TcpHyblaIncrementTest::RhoUpdated (double oldVal, double newVal)
+{
+  m_rho = newVal;
+}
+
+void
+TcpHyblaIncrementTest::DoRun ()
+{
+  m_state = CreateObject<TcpSocketState> ();
+
+  m_state->m_cWnd = m_cWnd;
+  m_state->m_ssThresh = m_ssThresh;
+  m_state->m_segmentSize = m_segmentSize;
+
+  Ptr<TcpHybla> cong = CreateObject <TcpHybla> ();
+
+  cong->TraceConnectWithoutContext ("Rho",
+                                    MakeCallback (&TcpHyblaIncrementTest::RhoUpdated, this));
+
+  // Each received ACK weight is "coeffA". To see an increase of 1 MSS, we need
+  // to ACK at least segCwnd/coeffA ACK.
+
+  TimeValue rRtt;
+  cong->GetAttribute ("RRTT", rRtt);
+  cong->PktsAcked (m_state, 1, m_rtt);
+
+  double calcRho = std::max (m_rtt.GetSeconds () / rRtt.Get ().GetSeconds (), 1.0);
+
+  NS_TEST_ASSERT_MSG_NE (m_rho, 0,
+                         "Rho never updated by implementation");
+  NS_TEST_ASSERT_MSG_EQ_TOL (calcRho, m_rho, MilliSeconds (10),
+                         "Different rho values between implementation and test");
+
+  cong->IncreaseWindow (m_state, 1);
+
+  if (m_cWnd <= m_ssThresh)
+    {
+      // We expect an increment of 2^rho - 1, which does not go beyond ssThresh
+      double inc = std::pow (2, calcRho) - 1.0;
+      uint32_t cWndExpected = m_cWnd + (inc * m_segmentSize);
+      NS_TEST_ASSERT_MSG_LT_OR_EQ (m_state->m_cWnd.Get (), m_state->m_ssThresh.Get (),
+                                   "Congestion window has gone too far");
+      NS_TEST_ASSERT_MSG_EQ (m_state->m_cWnd.Get (), cWndExpected,
+                             "Congestion window different than expected");
+    }
+  else
+    {
+      // We expect an increment of rho^2 / cWnd
+      uint32_t segCwnd = m_cWnd / m_segmentSize;
+      double inc = std::pow (m_rho, 2) / ((double) segCwnd);
+      uint32_t cWndExpected = m_cWnd + (inc * m_segmentSize);
+
+      if (inc >= 1.0)
+        {
+          // LT because implementation does not add value less than MSS.
+          NS_TEST_ASSERT_MSG_LT_OR_EQ (m_state->m_cWnd.Get (), cWndExpected,
+                                       "Congestion window different than expected");
+        }
+    }
+
+}
+
+// -------------------------------------------------------------------
+
+static class TcpHyblaTestSuite : public TestSuite
+{
+public:
+  TcpHyblaTestSuite () : TestSuite ("tcp-hybla-test", UNIT)
+  {
+    AddTestCase (new TcpHyblaIncrementTest (1000, 0xFFFFFFFF, 500, MilliSeconds (55), "Rho=1.1, slow start"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpHyblaIncrementTest (1000, 0xFFFFFFFF, 500, MilliSeconds (100), "Rho=2, slow start"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpHyblaIncrementTest (1000, 0xFFFFFFFF, 500, MilliSeconds (750), "Rho=30, slow start"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpHyblaIncrementTest (1000, 500, 500, Seconds (0.55), "Rho=1.1, cong avoid"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpHyblaIncrementTest (1000, 500, 500, Seconds (0.1), "Rho=2, cong avoid"),
+                 TestCase::QUICK);
+    AddTestCase (new TcpHyblaIncrementTest (1000, 500, 500, Seconds (0.75), "Rho=30, cong avoid"),
+                 TestCase::QUICK);
+  }
+} g_tcpHyblaTest;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-pkts-acked-test.cc ns-3.25/src/internet/test/tcp-pkts-acked-test.cc
--- ns-3.24.1/src/internet/test/tcp-pkts-acked-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-pkts-acked-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,163 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-general-test.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpPktsAckedTestSuite");
+
+/**
+ * \brief Check the number of times that PktsAcked is called
+ *
+ * Set a custom congestion control class, which calls PktsAckedCalled
+ * each time the TCP implementation calls PktsAcked.
+ *
+ * The checks are performed in FinalChecks: the number of bytes acked divided
+ * by segment size should be the same as the number of segments passed through
+ * PktsAcked in the congestion control.
+ *
+ * \see DummyCongControl
+ * \see FinalChecks
+ */
+class DummyCongControl;
+
+class TcpPktsAckedOpenTest : public TcpGeneralTest
+{
+public:
+  TcpPktsAckedOpenTest (const std::string &desc);
+
+  void PktsAckedCalled (uint32_t segmentsAcked);
+
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+
+  virtual void ConfigureEnvironment ();
+
+  void FinalChecks ();
+
+private:
+  uint32_t m_segmentsAcked;    //! Contains the number of times PktsAcked is called
+  uint32_t m_segmentsReceived; //! Contains the ack number received
+
+  Ptr<DummyCongControl> m_congCtl;
+};
+
+/**
+ * \brief Behaves as NewReno, except that each time PktsAcked is called,
+ * a notification is sent to TcpPktsAckedOpenTest
+ */
+class DummyCongControl : public TcpNewReno
+{
+public:
+  static TypeId GetTypeId (void);
+  DummyCongControl ()
+  {
+  }
+  void SetCallback (Callback<void, uint32_t> test)
+  {
+    m_test = test;
+  }
+
+  void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
+                  const Time& rtt)
+  {
+    m_test (segmentsAcked);
+  }
+
+private:
+  Callback<void, uint32_t> m_test;
+};
+
+TypeId
+DummyCongControl::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::DummyCongControl")
+    .SetParent<TcpNewReno> ()
+    .AddConstructor<DummyCongControl> ()
+    .SetGroupName ("Internet")
+  ;
+  return tid;
+}
+
+TcpPktsAckedOpenTest::TcpPktsAckedOpenTest (const std::string &desc)
+  : TcpGeneralTest (desc),
+    m_segmentsAcked (0),
+    m_segmentsReceived (0)
+{
+}
+
+void
+TcpPktsAckedOpenTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (20);
+  SetMTU (500);
+}
+
+Ptr<TcpSocketMsgBase>
+TcpPktsAckedOpenTest::CreateSenderSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> s = TcpGeneralTest::CreateSenderSocket (node);
+  m_congCtl = CreateObject<DummyCongControl> ();
+  m_congCtl->SetCallback (MakeCallback (&ns3::TcpPktsAckedOpenTest::PktsAckedCalled, this));
+  s->SetCongestionControlAlgorithm (m_congCtl);
+
+  return s;
+}
+
+void
+TcpPktsAckedOpenTest::PktsAckedCalled (uint32_t segmentsAcked)
+{
+  m_segmentsAcked += segmentsAcked;
+}
+
+void
+TcpPktsAckedOpenTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER && (!(h.GetFlags () & TcpHeader::SYN)))
+    {
+      m_segmentsReceived = h.GetAckNumber ().GetValue ();
+    }
+}
+
+void
+TcpPktsAckedOpenTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_segmentsReceived / GetSegSize (SENDER), m_segmentsAcked,
+                         "Not all acked segments have been passed to PktsAcked method");
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpPktsAckedTestSuite : public TestSuite
+{
+public:
+  TcpPktsAckedTestSuite () : TestSuite ("tcp-pkts-acked-test", UNIT)
+  {
+    AddTestCase (new TcpPktsAckedOpenTest ("PktsAcked check while in OPEN state"),
+                 TestCase::QUICK);
+    // Add DISORDER, RECOVERY and LOSS state check
+  }
+} g_TcpPktsAckedTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-rto-test.cc ns-3.25/src/internet/test/tcp-rto-test.cc
--- ns-3.24.1/src/internet/test/tcp-rto-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-rto-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,299 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "tcp-rto-test.h"
+#include "tcp-error-model.h"
+
+#include "ns3/node.h"
+#include "ns3/log.h"
+#include "ns3/tcp-westwood.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpRtoTest");
+
+TcpRtoTest::TcpRtoTest (TypeId &congControl, const std::string &desc)
+  : TcpGeneralTest (desc),
+    m_rtoExpired (false),
+    m_segmentReceived (false)
+{
+  m_congControlTypeId = congControl;
+}
+
+void
+TcpRtoTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (100);
+}
+
+void
+TcpRtoTest::ConfigureProperties ()
+{
+  TcpGeneralTest::ConfigureProperties ();
+  SetInitialSsThresh (SENDER, 0);
+}
+
+Ptr<TcpSocketMsgBase>
+TcpRtoTest::CreateSenderSocket (Ptr<Node> node)
+{
+  // Get a really low RTO, and let them fire as soon as possible since
+  // we are interested only in what happen after it expires
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateSenderSocket (node);
+  socket->SetAttribute ("MinRto", TimeValue (Seconds (0.5)));
+
+  return socket;
+}
+
+void
+TcpRtoTest::RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who)
+{
+  // In this test, the RTO fires for the first segment (and no more).
+  // This function is called after the management of the RTO expiration,
+  // and because of this we must check all the involved variables.
+  NS_TEST_ASSERT_MSG_EQ (m_rtoExpired, false,
+                         "Second RTO expired");
+  NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_LOSS,
+                         "Ack state machine not in LOSS state after a loss");
+
+  m_rtoExpired = true;
+}
+
+void
+TcpRtoTest::RcvAck (const Ptr<const TcpSocketState> tcb, const TcpHeader& h,
+                    SocketWho who)
+{
+  // Called after the first ack is received (the lost segment has been
+  // successfully retransmitted. We must check on the sender that variables
+  // are in the same state as they where after RTOExpired if it is the first
+  // ACK after the loss; in every other case, all must be OPEN and the counter
+  // set to 0.
+
+  if (m_rtoExpired && who == SENDER)
+    {
+      NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_LOSS,
+                             "Ack state machine not in LOSS state after a loss");
+    }
+  else
+    {
+      NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                             "Ack state machine not in OPEN state after recovering "
+                             "from loss");
+    }
+}
+
+void
+TcpRtoTest::ProcessedAck (const Ptr<const TcpSocketState> tcb, const TcpHeader &h,
+                          SocketWho who)
+{
+  // Called after the ACK processing. Every time we should be in OPEN state,
+  // without any packet lost or marked as retransmitted, in both the sockets
+
+  NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (tcb), TcpSocketState::CA_OPEN,
+                         "Ack state machine not in OPEN state after recovering "
+                         "from loss");
+
+  if (who == SENDER)
+    {
+      m_rtoExpired = false;
+      m_segmentReceived = true;
+    }
+}
+
+void
+TcpRtoTest::FinalChecks ()
+{
+  // At least one time we should process an ACK; otherwise, the segment
+  // has not been retransmitted, and this is bad
+
+  NS_TEST_ASSERT_MSG_EQ (m_segmentReceived, true,
+                         "Retransmission has not been done");
+}
+
+// TcpTimeRtoTest
+
+TcpTimeRtoTest::TcpTimeRtoTest (TypeId &congControl, const std::string &desc)
+  :   TcpGeneralTest (desc),
+    m_senderSentSegments (0),
+    m_closed (false)
+{
+  m_congControlTypeId = congControl;
+}
+
+void
+TcpTimeRtoTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (100);
+}
+
+
+Ptr<TcpSocketMsgBase>
+TcpTimeRtoTest::CreateSenderSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> s = TcpGeneralTest::CreateSenderSocket (node);
+  s->SetAttribute ("DataRetries", UintegerValue (6));
+
+  return s;
+}
+
+Ptr<ErrorModel>
+TcpTimeRtoTest::CreateReceiverErrorModel ()
+{
+  Ptr<TcpSeqErrorModel> errorModel = CreateObject<TcpSeqErrorModel> ();
+
+  // Drop packet for 7 times. At the 7th, the connection should be dropped.
+  for (uint32_t i = 0; i<7; ++i)
+    {
+      errorModel->AddSeqToKill (SequenceNumber32 (1));
+    }
+
+  errorModel->SetDropCallback (MakeCallback (&TcpTimeRtoTest::PktDropped, this));
+
+  return errorModel;
+}
+
+void
+TcpTimeRtoTest::Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << p << h << who);
+
+  if (who == SENDER)
+    {
+      ++m_senderSentSegments;
+      NS_LOG_INFO (Simulator::Now ().GetSeconds () << "\tMeasured RTO:" <<
+                   GetRto (SENDER).GetSeconds ());
+
+      if (h.GetFlags () & TcpHeader::SYN)
+        {
+          NS_ASSERT (m_senderSentSegments == 1);
+
+          Time s_rto = GetRto (SENDER);
+          NS_TEST_ASSERT_MSG_EQ (s_rto, GetConnTimeout (SENDER),
+                                 "SYN packet sent without respecting "
+                                 "ConnTimeout attribute");
+        }
+      else
+        {
+          NS_LOG_INFO (Simulator::Now ().GetSeconds () << "\tTX: " << h <<
+                       m_senderSentSegments);
+
+          NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber ().GetValue (), 1,
+                                 "First packet has been correctly sent");
+
+          // Remember, from RFC:
+          // m_rto = Max (m_rtt->GetEstimate () +
+          //              Max (m_clockGranularity, m_rtt->GetVariation ()*4), m_minRto);
+
+          if (m_senderSentSegments == 2)
+            { // ACK of SYN-ACK, rto set for the first time, since now we have
+              // an estimation of RTT
+
+              Ptr<RttEstimator> rttEstimator = GetRttEstimator (SENDER);
+              Time clockGranularity = GetClockGranularity (SENDER);
+              m_previousRTO = rttEstimator->GetEstimate ();
+
+              if (clockGranularity > rttEstimator->GetVariation ()*4)
+                {
+                  m_previousRTO += clockGranularity;
+                }
+              else
+                {
+                  m_previousRTO += rttEstimator->GetVariation ()*4;
+                }
+
+              m_previousRTO = Max (m_previousRTO, GetMinRto (SENDER));
+
+              NS_TEST_ASSERT_MSG_EQ_TOL (GetRto (SENDER), m_previousRTO, Seconds (0.01),
+                                         "RTO value differs from calculation");
+            }
+          else if (m_senderSentSegments == 3)
+            { // First data packet. RTO should be the same as before
+
+              NS_TEST_ASSERT_MSG_EQ_TOL (GetRto (SENDER), m_previousRTO, Seconds (0.01),
+                                         "RTO value has changed unexpectedly");
+
+            }
+        }
+    }
+  else if (who == RECEIVER)
+    {
+
+    }
+}
+
+void
+TcpTimeRtoTest::ErrorClose  (SocketWho who)
+{
+  m_closed = true;
+}
+
+void
+TcpTimeRtoTest::RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who)
+{
+  NS_TEST_ASSERT_MSG_EQ (who, SENDER, "RTO in Receiver. That's unexpected");
+
+  Time actualRto = GetRto (SENDER);
+
+  if (actualRto < Seconds (60))
+    {
+      NS_TEST_ASSERT_MSG_EQ_TOL (actualRto, m_previousRTO+m_previousRTO, Seconds (0.01),
+                                 "RTO has not doubled after an expiration");
+      m_previousRTO += m_previousRTO;
+    }
+  else
+    {
+      NS_TEST_ASSERT_MSG_EQ (actualRto, Seconds (60),
+                             "RTO goes beyond 60 second limit");
+    }
+}
+
+void
+TcpTimeRtoTest::PktDropped (const Ipv4Header &ipH, const TcpHeader& tcpH,
+                            Ptr<const Packet> p)
+{
+  NS_LOG_INFO (Simulator::Now ().GetSeconds () << "\tDROPPED! " << tcpH);
+}
+
+void
+TcpTimeRtoTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_closed, true,
+                         "Socket has not been closed after retrying data retransmissions");
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpRtoTestSuite : public TestSuite
+{
+public:
+  TcpRtoTestSuite () : TestSuite ("tcp-rto-test", UNIT)
+  {
+    std::list<TypeId> types;
+    types.insert (types.begin (), TcpNewReno::GetTypeId ());
+    types.insert (types.begin (), TcpWestwood::GetTypeId ());
+
+    for (std::list<TypeId>::iterator it = types.begin (); it != types.end (); ++it)
+      {
+        AddTestCase (new TcpRtoTest ((*it), "RTO retransmit testing"), TestCase::QUICK);
+        AddTestCase (new TcpTimeRtoTest ((*it), "RTO timing testing"), TestCase::QUICK);
+      }
+  }
+} g_TcpRtoTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-rto-test.h ns-3.25/src/internet/test/tcp-rto-test.h
--- ns-3.24.1/src/internet/test/tcp-rto-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-rto-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,88 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPRTOTEST_H
+#define TCPRTOTEST_H
+
+#include "tcp-fast-retr-test.h"
+
+namespace ns3 {
+
+/**
+ * \brief Testing the moments after an RTO expiration
+ *
+ * The scope of this test is to be sure that, after an RTO expiration,
+ * the TCP implementation set the correct state in the ACK state machine,
+ * and marks the lost segment as lost; then, after the retransmission, the
+ * state is fully recovered. This is the base check, where only one segment
+ * (the first) is lost and retransmitted.
+ *
+ */
+class TcpRtoTest : public TcpGeneralTest
+{
+public:
+  TcpRtoTest (TypeId &congControl, const std::string &msg);
+
+protected:
+
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+  virtual void RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who);
+  virtual void RcvAck      (const Ptr<const TcpSocketState> tcb,
+                            const TcpHeader& h, SocketWho who);
+  virtual void ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                             const TcpHeader& h, SocketWho who);
+  virtual void FinalChecks ();
+  virtual void ConfigureProperties ();
+  virtual void ConfigureEnvironment ();
+
+private:
+  bool m_rtoExpired;
+  bool m_segmentReceived;
+};
+
+/**
+ * \brief Testing the timing of RTO
+ *
+ * Checking if RTO is doubled ONLY after a retransmission.
+ */
+class TcpTimeRtoTest : public TcpGeneralTest
+{
+public:
+  TcpTimeRtoTest (TypeId &congControl, const std::string &msg);
+
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+  virtual Ptr<ErrorModel> CreateReceiverErrorModel ();
+  virtual void ErrorClose  (SocketWho who);
+  virtual void RTOExpired (const Ptr<const TcpSocketState> tcb, SocketWho who);
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void FinalChecks ();
+
+  virtual void ConfigureEnvironment ();
+
+  void PktDropped (const Ipv4Header &ipH, const TcpHeader& tcpH, Ptr<const Packet> p);
+
+private:
+  uint32_t m_senderSentSegments;
+  Time m_previousRTO;
+  bool m_closed;
+};
+
+} // namespace ns3
+
+#endif // TCPRTOTEST_H
diff -Naur ns-3.24.1/src/internet/test/tcp-rtt-estimation.cc ns-3.25/src/internet/test/tcp-rtt-estimation.cc
--- ns-3.24.1/src/internet/test/tcp-rtt-estimation.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-rtt-estimation.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,271 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-general-test.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+#include "tcp-error-model.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpRttEstimationTestSuite");
+
+/**
+ * \brief Check Rtt calculations
+ *
+ * First check is that, for each ACK, we have a valid estimation of the RTT.
+ * The second check is that, when updating RTT history, we should consider
+ * retransmission only segments which sequence number is lower than the highest
+ * already transmitted.
+ */
+class TcpRttEstimationTest : public TcpGeneralTest
+{
+public:
+  TcpRttEstimationTest (const std::string &desc, bool enableTs, uint32_t dataPkt);
+
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
+
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void UpdatedRttHistory (const SequenceNumber32 & seq, uint32_t sz,
+                                  bool isRetransmission, SocketWho who);
+  virtual void RttTrace (Time oldTime, Time newTime);
+  void FinalChecks ();
+
+  virtual void ConfigureEnvironment ();
+
+private:
+  bool m_enableTs;
+  bool m_rttChanged;
+  SequenceNumber32 m_highestTxSeq;
+  uint32_t m_pktCount;
+  uint32_t m_dataCount;
+};
+
+TcpRttEstimationTest::TcpRttEstimationTest (const std::string &desc, bool enableTs,
+                                            uint32_t pktCount)
+  : TcpGeneralTest (desc),
+    m_enableTs (enableTs),
+    m_rttChanged (false),
+    m_highestTxSeq (0),
+    m_pktCount (pktCount),
+    m_dataCount (0)
+{
+}
+
+void
+TcpRttEstimationTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (m_pktCount);
+  SetPropagationDelay (MilliSeconds (50));
+  SetTransmitStart (Seconds (2.0));
+  SetMTU (500);
+}
+
+Ptr<TcpSocketMsgBase>
+TcpRttEstimationTest::CreateReceiverSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> s = TcpGeneralTest::CreateReceiverSocket (node);
+  if (!m_enableTs)
+    {
+      s->SetAttribute ("Timestamp", BooleanValue (false));
+    }
+
+  return s;
+}
+
+Ptr<TcpSocketMsgBase>
+TcpRttEstimationTest::CreateSenderSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> s = TcpGeneralTest::CreateSenderSocket (node);
+  if (!m_enableTs)
+    {
+      s->SetAttribute ("Timestamp", BooleanValue (false));
+    }
+
+  return s;
+}
+
+void
+TcpRttEstimationTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER && h.GetFlags () != TcpHeader::SYN)
+    {
+      if (m_highestTxSeq < h.GetSequenceNumber ())
+        {
+          m_highestTxSeq = h.GetSequenceNumber ();
+          m_dataCount = 0;
+        }
+
+      Ptr<RttEstimator> rttEstimator = GetRttEstimator (SENDER);
+      NS_ASSERT (rttEstimator != 0);
+      NS_LOG_DEBUG ("S Tx: seq=" << h.GetSequenceNumber () << " ack=" << h.GetAckNumber ());
+      NS_TEST_ASSERT_MSG_NE (rttEstimator->GetEstimate (), Seconds (1),
+                             "Default Estimate for the RTT");
+    }
+}
+
+void
+TcpRttEstimationTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == RECEIVER)
+    {
+      NS_LOG_DEBUG ("R Rx: seq=" << h.GetSequenceNumber () << " ack=" << h.GetAckNumber ());
+    }
+}
+
+void
+TcpRttEstimationTest::UpdatedRttHistory (const SequenceNumber32 & seq, uint32_t sz,
+                                         bool isRetransmission, SocketWho who)
+{
+  if (sz == 0)
+    {
+      return;
+    }
+
+  if (seq < m_highestTxSeq)
+    {
+      NS_TEST_ASSERT_MSG_EQ (isRetransmission, true,
+                             "A retransmission is not flagged as such");
+    }
+  else if (seq == m_highestTxSeq && m_dataCount == 0)
+    {
+      NS_TEST_ASSERT_MSG_EQ (isRetransmission, false,
+                             "Incorrectly flagging seq as retransmission");
+      m_dataCount++;
+    }
+  else if (seq == m_highestTxSeq && m_dataCount > 0)
+    {
+      NS_TEST_ASSERT_MSG_EQ (isRetransmission, true,
+                             "A retransmission is not flagged as such");
+    }
+}
+
+void
+TcpRttEstimationTest::RttTrace (Time oldTime, Time newTime)
+{
+  NS_LOG_DEBUG ("Rtt changed to " << newTime.GetSeconds ());
+  m_rttChanged = true;
+}
+
+void
+TcpRttEstimationTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_rttChanged, true, "Rtt was not updated");
+}
+
+//-----------------------------------------------------------------------------
+class TcpRttEstimationWithLossTest : public TcpRttEstimationTest
+{
+public:
+  TcpRttEstimationWithLossTest (const std::string &desc, bool enableTs,
+                                uint32_t pktCount, std::vector<uint32_t> toDrop);
+
+protected:
+  Ptr<ErrorModel> CreateReceiverErrorModel ();
+
+private:
+  std::vector<uint32_t> m_toDrop;
+};
+
+TcpRttEstimationWithLossTest::TcpRttEstimationWithLossTest (const std::string &desc,
+                                                            bool enableTs,
+                                                            uint32_t pktCount,
+                                                            std::vector<uint32_t> toDrop)
+  : TcpRttEstimationTest (desc, enableTs, pktCount),
+    m_toDrop (toDrop)
+{
+
+}
+
+Ptr<ErrorModel>
+TcpRttEstimationWithLossTest::CreateReceiverErrorModel ()
+{
+  Ptr<TcpSeqErrorModel> errorModel = CreateObject<TcpSeqErrorModel> ();
+
+  std::vector<uint32_t>::iterator it;
+
+  for (it = m_toDrop.begin (); it != m_toDrop.end (); ++it)
+    {
+      errorModel->AddSeqToKill (SequenceNumber32 ((*it)));
+    }
+
+  return errorModel;
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpRttEstimationTestSuite : public TestSuite
+{
+public:
+  TcpRttEstimationTestSuite () : TestSuite ("tcp-rtt-estimation-test", UNIT)
+  {
+    AddTestCase (new TcpRttEstimationTest ("RTT estimation, ts, no data", true, 0),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationTest ("RTT estimation, no ts, no data", false, 0),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationTest ("RTT estimation, ts, some data", true, 10),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationTest ("RTT estimation, no ts, some data", false, 10),
+                 TestCase::QUICK);
+
+    std::vector<uint32_t> toDrop;
+    toDrop.push_back (501);
+
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, no ts,"
+                                                   " some data, with retr",
+                                                   false, 10, toDrop),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, ts,"
+                                                   " some data, with retr",
+                                                   true, 10, toDrop),
+                 TestCase::QUICK);
+
+    toDrop.push_back (501);
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, no ts,"
+                                                   " some data, with retr",
+                                                   false, 10, toDrop),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, ts,"
+                                                   " some data, with retr",
+                                                   true, 10, toDrop),
+                 TestCase::QUICK);
+
+    toDrop.push_back (54001);
+    toDrop.push_back (58001);
+    toDrop.push_back (58501);
+    toDrop.push_back (60001);
+    toDrop.push_back (68501);
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, no ts,"
+                                                   " a lot of data, with retr",
+                                                   false, 1000, toDrop),
+                 TestCase::QUICK);
+    AddTestCase (new TcpRttEstimationWithLossTest ("RTT estimation, ts,"
+                                                   " a lot of data, with retr",
+                                                   true, 1000, toDrop),
+                 TestCase::QUICK);
+  }
+
+} g_tcpRttEstimationTestSuite;
+
+} // namespace ns3
+
diff -Naur ns-3.24.1/src/internet/test/tcp-slow-start-test.cc ns-3.25/src/internet/test/tcp-slow-start-test.cc
--- ns-3.24.1/src/internet/test/tcp-slow-start-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-slow-start-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,210 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#include "tcp-slow-start-test.h"
+#include "ns3/log.h"
+#include "ns3/simple-channel.h"
+#include "ns3/internet-module.h"
+#include "ns3/config.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpSlowStartTest");
+
+// TcpSlowStartNormalTest
+
+TcpSlowStartNormalTest::TcpSlowStartNormalTest (uint32_t segmentSize,
+                                                uint32_t packetSize,
+                                                uint32_t initSsTh,
+                                                uint32_t packets,
+                                                TypeId &typeId,
+                                                const std::string &desc)
+  : TcpGeneralTest (desc),
+    m_ackedBytes (0),
+    m_sentBytes (0),
+    m_totalAckedBytes (0),
+    m_allowedIncrease (0),
+    m_initial (true),
+    m_segmentSize (segmentSize),
+    m_packetSize (packetSize),
+    m_packets (packets)
+{
+  m_congControlTypeId = typeId;
+}
+
+void
+TcpSlowStartNormalTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (m_packets);
+  SetAppPktSize (m_packetSize);
+}
+
+void
+TcpSlowStartNormalTest::ConfigureProperties ()
+{
+  TcpGeneralTest::ConfigureProperties ();
+  SetInitialSsThresh (SENDER, 400000);
+  SetSegmentSize (SENDER, m_segmentSize);
+  SetSegmentSize (RECEIVER, m_segmentSize);
+}
+
+void
+TcpSlowStartNormalTest::QueueDrop (SocketWho who)
+{
+  NS_FATAL_ERROR ("Drop on the queue; cannot validate slow start");
+}
+
+void
+TcpSlowStartNormalTest::PhyDrop (SocketWho who)
+{
+  NS_FATAL_ERROR ("Drop on the phy: cannot validate slow start");
+}
+
+/**
+ * \brief Trace the cWnd over the slow start
+ *
+ * This method is called each time the cWnd changes. It should be updated only
+ * by MSS bytes at time. Since the size doubles each RTT, a timing test is also
+ * performed: the doubling should be made in 0.5s from the first (0.5s is
+ * the delay of the SimpleChannel which connect the two socket).
+ *
+ * \param oldValue old value of cWnd
+ * \param newValue new value of cWnd
+ */
+void
+TcpSlowStartNormalTest::CWndTrace (uint32_t oldValue, uint32_t newValue)
+{
+  uint32_t segSize = GetSegSize (TcpGeneralTest::SENDER);
+  uint32_t increase = newValue - oldValue;
+
+  if (m_initial)
+    {
+      m_initial = false;
+      NS_LOG_INFO ("Ignored update to " << newValue <<
+                   " with a segsize of " << segSize);
+      return;
+    }
+
+  // The increase in RFC should be <= of segSize. In ns-3 we force = segSize
+  NS_TEST_ASSERT_MSG_EQ (increase, segSize, "Increase different than segsize");
+  NS_TEST_ASSERT_MSG_LT_OR_EQ (newValue, GetInitialSsThresh (SENDER), "cWnd increased over ssth");
+
+  NS_LOG_INFO ("Incremented cWnd by " << segSize << " bytes in Slow Start " <<
+               "achieving a value of " << newValue);
+
+  NS_TEST_ASSERT_MSG_GT_OR_EQ (m_allowedIncrease, 1, "Increase not allowed");
+  m_allowedIncrease--;
+}
+
+void
+TcpSlowStartNormalTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << p << h << who);
+
+  if (who == SENDER && Simulator::Now ().GetSeconds () > 5.0)
+    {
+      m_sentBytes += GetSegSize (TcpGeneralTest::SENDER);
+    }
+}
+
+void
+TcpSlowStartNormalTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  NS_LOG_FUNCTION (this << p << h << who);
+
+  if (who == SENDER && Simulator::Now ().GetSeconds () > 5.0)
+    {
+      uint32_t acked = h.GetAckNumber ().GetValue () - m_totalAckedBytes - 1;
+      m_totalAckedBytes += acked;
+      m_ackedBytes += acked;
+
+      NS_LOG_INFO ("Ack of " << acked << " bytes, acked this round=" << m_ackedBytes);
+
+      if (m_ackedBytes >= GetSegSize (SENDER))
+        {
+          NS_LOG_INFO ("FULL ACK achieved, bytes=" << m_ackedBytes);
+          m_allowedIncrease += 1;
+          m_ackedBytes -= GetSegSize (SENDER);
+        }
+
+      while (m_ackedBytes >= GetSegSize (SENDER))
+        {
+          m_ackedBytes -= GetSegSize (SENDER);
+        }
+    }
+}
+
+// TcpSlowStartAttackerTest
+TcpSlowStartAttackerTest::TcpSlowStartAttackerTest (uint32_t segmentSize,
+                                                    uint32_t packetSize,
+                                                    uint32_t initSsTh,
+                                                    uint32_t packets,
+                                                    TypeId &typeId, const std::string &msg)
+  : TcpSlowStartNormalTest (segmentSize, packetSize, initSsTh, packets, typeId, msg)
+{
+
+}
+
+Ptr<TcpSocketMsgBase>
+TcpSlowStartAttackerTest::CreateReceiverSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketSmallAcks> socket = DynamicCast<TcpSocketSmallAcks> (
+      CreateSocket (node,
+                    TcpSocketSmallAcks::GetTypeId (),
+                    m_congControlTypeId));
+  socket->SetBytesToAck (125);
+
+  return socket;
+}
+
+
+//-----------------------------------------------------------------------------
+
+static class TcpSlowStartTestSuite : public TestSuite
+{
+public:
+  TcpSlowStartTestSuite () : TestSuite ("tcp-slow-start-test", UNIT)
+  {
+    // This test have less packets to transmit than SsTh
+    std::list<TypeId> types;
+    types.insert (types.begin (), TcpNewReno::GetTypeId ());
+    types.insert (types.begin (), TcpWestwood::GetTypeId ());
+
+    for (std::list<TypeId>::iterator it = types.begin (); it != types.end (); ++it)
+      {
+        AddTestCase (new TcpSlowStartNormalTest (500, 500, 10000, 10, (*it),
+                                                 "slow start 500 byte, " + (*it).GetName ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpSlowStartNormalTest (1000, 1000, 10000, 9, (*it),
+                                                 "slow start 1000 byte, " + (*it).GetName ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpSlowStartNormalTest (500, 250, 10000, 10, (*it),
+                                                 "slow start small packets, " + (*it).GetName ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpSlowStartAttackerTest (500, 500, 10000, 10, (*it),
+                                                   "slow start ack attacker, 500 byte, " + (*it).GetName ()),
+                     TestCase::QUICK);
+        AddTestCase (new TcpSlowStartAttackerTest (1000, 1000, 10000, 9, (*it),
+                                                   "slow start ack attacker, 1000 byte, " + (*it).GetName ()),
+                     TestCase::QUICK);
+      }
+  }
+} g_tcpSlowStartTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/tcp-slow-start-test.h ns-3.25/src/internet/test/tcp-slow-start-test.h
--- ns-3.24.1/src/internet/test/tcp-slow-start-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-slow-start-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,92 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+#ifndef TCPSLOWSTARTTEST_H
+#define TCPSLOWSTARTTEST_H
+
+#include "ns3/test.h"
+#include "tcp-general-test.h"
+
+namespace ns3 {
+
+/**
+ * \brief Test the normal behavior for slow start
+ *
+ * As method for checking the slow start, a callback is attached to the
+ * congestion window. With the knowledge of the number of segments, we can calculate
+ * if the value of the cWnd is right. Also, with a fixed delay for each packet,
+ * we can know if the timing is correct.
+ *
+ * Check what is done inside CWndTrace.
+ *
+ * \see CWndTrace
+ */
+class
+TcpSlowStartNormalTest : public TcpGeneralTest
+{
+public:
+  TcpSlowStartNormalTest (uint32_t segmentSize, uint32_t packetSize,
+                          uint32_t initSsTh, uint32_t packets, TypeId& congControl,
+                          const std::string &desc);
+
+protected:
+  virtual void CWndTrace (uint32_t oldValue, uint32_t newValue);
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who);
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who);
+  void QueueDrop (SocketWho who);
+  void PhyDrop (SocketWho who);
+
+  virtual void ConfigureEnvironment ();
+  virtual void ConfigureProperties ();
+
+  uint32_t m_ackedBytes;
+  uint32_t m_sentBytes;
+  uint32_t m_totalAckedBytes;
+  uint32_t m_allowedIncrease;
+
+  bool   m_initial;
+
+private:
+  uint32_t m_segmentSize;
+  uint32_t m_packetSize;
+  uint32_t m_packets;
+};
+
+/**
+ * \brief A slow start test using a socket which sends smaller ACKs
+ *
+ * The same test are performed over a connection where, on one side, there is
+ * a malicious socket which sends smaller ACKs than the segment received.
+ *
+ * Slow start behavior should not change.
+ */
+class
+TcpSlowStartAttackerTest : public TcpSlowStartNormalTest
+{
+public:
+  TcpSlowStartAttackerTest (uint32_t segmentSize, uint32_t packetSize,
+                            uint32_t initSsTh, uint32_t packets, TypeId& congControl,
+                            const std::string &desc);
+
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+};
+
+} //namespace ns3
+#endif // TCPSLOWSTARTTEST_H
+
diff -Naur ns-3.24.1/src/internet/test/tcp-test.cc ns-3.25/src/internet/test/tcp-test.cc
--- ns-3.24.1/src/internet/test/tcp-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/tcp-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -2,7 +2,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2009 INRIA
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation;
@@ -45,6 +45,7 @@
 #include "ns3/icmpv6-l4-protocol.h"
 #include "ns3/udp-l4-protocol.h"
 #include "ns3/tcp-l4-protocol.h"
+#include "ns3/traffic-control-layer.h"
 
 #include <string>
 
@@ -101,7 +102,7 @@
                          bool useIpv6)
 {
   std::ostringstream oss;
-  oss << str << " total=" << totalStreamSize << " sourceWrite=" << sourceWriteSize 
+  oss << str << " total=" << totalStreamSize << " sourceWrite=" << sourceWriteSize
       << " sourceRead=" << sourceReadSize << " serverRead=" << serverReadSize
       << " serverWrite=" << serverWriteSize << " useIpv6=" << useIpv6;
   return oss.str ();
@@ -120,8 +121,8 @@
                           uint32_t serverWriteSize,
                           uint32_t serverReadSize,
                           bool useIpv6)
-  : TestCase (Name ("Send string data from client to server and back", 
-                    totalStreamSize, 
+  : TestCase (Name ("Send string data from client to server and back",
+                    totalStreamSize,
                     sourceWriteSize,
                     serverReadSize,
                     serverWriteSize,
@@ -168,9 +169,9 @@
   NS_TEST_EXPECT_MSG_EQ (m_currentSourceTxBytes, m_totalBytes, "Source sent all bytes");
   NS_TEST_EXPECT_MSG_EQ (m_currentServerRxBytes, m_totalBytes, "Server received all bytes");
   NS_TEST_EXPECT_MSG_EQ (m_currentSourceRxBytes, m_totalBytes, "Source received all bytes");
-  NS_TEST_EXPECT_MSG_EQ (memcmp (m_sourceTxPayload, m_serverRxPayload, m_totalBytes), 0, 
+  NS_TEST_EXPECT_MSG_EQ (memcmp (m_sourceTxPayload, m_serverRxPayload, m_totalBytes), 0,
                          "Server received expected data buffers");
-  NS_TEST_EXPECT_MSG_EQ (memcmp (m_sourceTxPayload, m_sourceRxPayload, m_totalBytes), 0, 
+  NS_TEST_EXPECT_MSG_EQ (memcmp (m_sourceTxPayload, m_sourceRxPayload, m_totalBytes), 0,
                          "Source received back expected data buffers");
 }
 void
@@ -200,7 +201,7 @@
         {
           NS_FATAL_ERROR ("Server could not read stream at byte " << m_currentServerRxBytes);
         }
-      NS_TEST_EXPECT_MSG_EQ ((m_currentServerRxBytes + p->GetSize () <= m_totalBytes), true, 
+      NS_TEST_EXPECT_MSG_EQ ((m_currentServerRxBytes + p->GetSize () <= m_totalBytes), true,
                              "Server received too many bytes");
       NS_LOG_DEBUG ("Server recv data=\"" << GetString (p) << "\"");
       p->CopyData (&m_serverRxPayload[m_currentServerRxBytes], p->GetSize ());
@@ -256,7 +257,7 @@
         {
           NS_FATAL_ERROR ("Source could not read stream at byte " << m_currentSourceRxBytes);
         }
-      NS_TEST_EXPECT_MSG_EQ ((m_currentSourceRxBytes + p->GetSize () <= m_totalBytes), true, 
+      NS_TEST_EXPECT_MSG_EQ ((m_currentSourceRxBytes + p->GetSize () <= m_totalBytes), true,
                              "Source received too many bytes");
       NS_LOG_DEBUG ("Source recv data=\"" << GetString (p) << "\"");
       p->CopyData (&m_sourceRxPayload[m_currentSourceRxBytes], p->GetSize ());
@@ -292,6 +293,9 @@
   //TCP
   Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
   node->AggregateObject (tcp);
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
   return node;
 }
 
@@ -342,7 +346,17 @@
   source->SetRecvCallback (MakeCallback (&TcpTestCase::SourceHandleRecv, this));
   source->SetSendCallback (MakeCallback (&TcpTestCase::SourceHandleSend, this));
 
-  source->Connect (serverremoteaddr);
+  Address peerAddress;
+  int err = source->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (source->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  err = source->Connect (serverremoteaddr);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = source->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, serverremoteaddr, "address from socket GetPeerName() should equal the connected address");
 }
 
 void
@@ -378,7 +392,17 @@
   source->SetRecvCallback (MakeCallback (&TcpTestCase::SourceHandleRecv, this));
   source->SetSendCallback (MakeCallback (&TcpTestCase::SourceHandleSend, this));
 
-  source->Connect (serverremoteaddr);
+  Address peerAddress;
+  int err = source->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (source->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  err = source->Connect (serverremoteaddr);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = source->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, serverremoteaddr, "address from socket GetPeerName() should equal the connected address");
 }
 
 Ptr<Node>
@@ -405,6 +429,9 @@
   //TCP
   Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
   node->AggregateObject (tcp);
+  // Traffic Control
+  Ptr<TrafficControlLayer> tc = CreateObject<TrafficControlLayer> ();
+  node->AggregateObject (tc);
   return node;
 }
 
diff -Naur ns-3.24.1/src/internet/test/tcp-timestamp-test.cc ns-3.25/src/internet/test/tcp-timestamp-test.cc
--- ns-3.24.1/src/internet/test/tcp-timestamp-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/tcp-timestamp-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,316 +17,177 @@
  *
  */
 
-#include "ns3/test.h"
-#include "ns3/socket-factory.h"
-#include "ns3/tcp-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/config.h"
-#include "ns3/ipv4-static-routing.h"
-#include "ns3/ipv4-list-routing.h"
-#include "ns3/ipv6-static-routing.h"
-#include "ns3/ipv6-list-routing.h"
+#include "tcp-general-test.h"
 #include "ns3/node.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/inet6-socket-address.h"
-#include "ns3/uinteger.h"
 #include "ns3/log.h"
-#include "ns3/tcp-socket-base.h"
-
-#include "ns3/arp-l3-protocol.h"
-#include "ns3/ipv4-l3-protocol.h"
-#include "ns3/ipv6-l3-protocol.h"
-#include "ns3/icmpv4-l4-protocol.h"
-#include "ns3/icmpv6-l4-protocol.h"
-#include "ns3/udp-l4-protocol.h"
-#include "ns3/tcp-l4-protocol.h"
-
 #include "ns3/private/tcp-option-ts.h"
 
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("TimestampTestSuite");
 
-class TimestampTestCase : public TestCase
+class TimestampTestCase : public TcpGeneralTest
 {
 public:
   enum Configuration
   {
     DISABLED,
-    ENABLED_CLIENT,
-    ENABLED_SERVER,
+    ENABLED_RECEIVER,
+    ENABLED_SENDER,
     ENABLED
   };
 
   TimestampTestCase (TimestampTestCase::Configuration conf);
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
 
-private:
-  virtual void DoRun (void);
-  virtual void DoTeardown (void);
-
-  void SetupDefaultSim (void);
-  //void SetupDefaultSim6 (void);
-
-  Ptr<Node> CreateInternetNode (void);
-  Ptr<Node> CreateInternetNode6 (void);
-  Ptr<SimpleNetDevice> AddSimpleNetDevice (Ptr<Node> node, const char* ipaddr, const char* netmask);
-  Ptr<SimpleNetDevice> AddSimpleNetDevice6 (Ptr<Node> node, Ipv6Address ipaddr, Ipv6Prefix prefix);
-  void ServerHandleConnectionCreated (Ptr<Socket> s, const Address & addr);
-  void ServerHandleRecv (Ptr<Socket> sock);
-  void ServerHandleSend (Ptr<Socket> sock, uint32_t sendB);
-  void SourceHandleSend (Ptr<Socket> sock, uint32_t available);
-  void SourceHandleRecv (Ptr<Socket> sock);
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
 
   Configuration m_configuration;
-
-  uint32_t m_totalBytes;
-  uint32_t m_sourceWriteSize;
-  uint32_t m_sourceReadSize;
-  uint32_t m_serverWriteSize;
-  uint32_t m_serverReadSize;
-  uint32_t m_currentSourceTxBytes;
-  uint32_t m_currentSourceRxBytes;
-  uint32_t m_currentServerRxBytes;
-  uint32_t m_currentServerTxBytes;
 };
 
 TimestampTestCase::TimestampTestCase (TimestampTestCase::Configuration conf)
-  : TestCase ("Testing the TCP Timestamp option")
+  : TcpGeneralTest ("Testing the TCP Timestamp option")
 {
   m_configuration = conf;
-  m_totalBytes = 2000;
-  m_sourceWriteSize = 500;
-  m_sourceReadSize = 500;
-  m_serverWriteSize = 500;
-  m_serverReadSize = 500;
 }
 
-void
-TimestampTestCase::DoRun (void)
-{
-  m_currentSourceTxBytes = 0;
-  m_currentSourceRxBytes = 0;
-  m_currentServerRxBytes = 0;
-  m_currentServerTxBytes = 0;
-
-
-//  if (m_useIpv6 == true)
-//    {
-//      SetupDefaultSim6 ();
-//    }
-//  else
-//    {
-  SetupDefaultSim ();
-//    }
-
-  Simulator::Run ();
-
-  NS_TEST_EXPECT_MSG_EQ (m_currentSourceTxBytes, m_totalBytes, "Source sent all bytes");
-  NS_TEST_EXPECT_MSG_EQ (m_currentServerRxBytes, m_totalBytes, "Server received all bytes");
-  NS_TEST_EXPECT_MSG_EQ (m_currentSourceRxBytes, m_totalBytes, "Source received all bytes");
-}
-
-void
-TimestampTestCase::DoTeardown (void)
-{
-  Simulator::Destroy ();
-}
-
-void
-TimestampTestCase::ServerHandleConnectionCreated (Ptr<Socket> s, const Address & addr)
+Ptr<TcpSocketMsgBase>
+TimestampTestCase::CreateReceiverSocket (Ptr<Node> node)
 {
-  s->SetRecvCallback (MakeCallback (&TimestampTestCase::ServerHandleRecv, this));
-  s->SetSendCallback (MakeCallback (&TimestampTestCase::ServerHandleSend, this));
-}
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket (node);
 
-void
-TimestampTestCase::ServerHandleRecv (Ptr<Socket> sock)
-{
-  while (sock->GetRxAvailable () > 0)
+  switch (m_configuration)
     {
-      uint32_t toRead = std::min (m_serverReadSize, sock->GetRxAvailable ());
-      Ptr<Packet> p = sock->Recv (toRead, 0);
+    case DISABLED:
+      socket->SetAttribute ("Timestamp", BooleanValue (false));
+      break;
 
-      if (p == 0 && sock->GetErrno () != Socket::ERROR_NOTERROR)
-        {
-          NS_FATAL_ERROR ("Server could not read stream at byte " << m_currentServerRxBytes);
-        }
+    case ENABLED_RECEIVER:
+      socket->SetAttribute ("Timestamp", BooleanValue (true));
+      break;
 
-      m_currentServerRxBytes += p->GetSize ();
+    case ENABLED_SENDER:
+      socket->SetAttribute ("Timestamp", BooleanValue (false));
+      break;
 
-      ServerHandleSend (sock, sock->GetTxAvailable ());
+    case ENABLED:
+      socket->SetAttribute ("Timestamp", BooleanValue (true));
+      break;
     }
+
+  return socket;
 }
 
-void
-TimestampTestCase::ServerHandleSend (Ptr<Socket> sock, uint32_t sendB)
+Ptr<TcpSocketMsgBase>
+TimestampTestCase::CreateSenderSocket (Ptr<Node> node)
 {
-  while (sock->GetTxAvailable () > 0 && m_currentServerTxBytes < m_currentServerRxBytes)
-    {
-      uint32_t left = m_currentServerRxBytes - m_currentServerTxBytes;
-      uint32_t toSend = std::min (left, sock->GetTxAvailable ());
-      toSend = std::min (toSend, m_serverWriteSize);
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateSenderSocket (node);
 
-      Ptr<Packet> p = Create<Packet> (toSend);
+  switch (m_configuration)
+    {
+    case DISABLED:
+      socket->SetAttribute ("Timestamp", BooleanValue (false));
+      break;
 
-      int sent = sock->Send (p);
+    case ENABLED_RECEIVER:
+      socket->SetAttribute ("Timestamp", BooleanValue (false));
+      break;
 
-      NS_TEST_EXPECT_MSG_EQ ((sent != -1), true, "Server error during send ?");
+    case ENABLED_SENDER:
+      socket->SetAttribute ("Timestamp", BooleanValue (true));
+      break;
 
-      m_currentServerTxBytes += sent;
+    case ENABLED:
+      socket->SetAttribute ("Timestamp", BooleanValue (true));
+      break;
     }
 
-  if (m_currentServerTxBytes == m_totalBytes)
-    {
-      sock->Close ();
-    }
+  return socket;
 }
 
 void
-TimestampTestCase::SourceHandleSend (Ptr<Socket> sock, uint32_t available)
+TimestampTestCase::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
 {
-  while (sock->GetTxAvailable () > 0 && m_currentSourceTxBytes < m_totalBytes)
+  if (m_configuration == DISABLED)
     {
-      uint32_t left = m_totalBytes - m_currentSourceTxBytes;
-      uint32_t toSend = std::min (left, sock->GetTxAvailable ());
-      toSend = std::min (toSend, m_sourceWriteSize);
-
-      Ptr<Packet> p = Create<Packet> (toSend);
-
-      int sent = sock->Send (p);
-      NS_TEST_EXPECT_MSG_EQ ((sent != -1), true, "Error during send ?");
-      m_currentSourceTxBytes += sent;
+      NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                             "timestamp disabled but option enabled");
     }
-}
-
-void
-TimestampTestCase::SourceHandleRecv (Ptr<Socket> sock)
-{
-  while (sock->GetRxAvailable () > 0 && m_currentSourceRxBytes < m_totalBytes)
+  else if (m_configuration == ENABLED)
     {
-      uint32_t toRead = std::min (m_sourceReadSize, sock->GetRxAvailable ());
-      Ptr<Packet> p = sock->Recv (toRead, 0);
+      NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), true,
+                             "timestamp enabled but option disabled");
+    }
 
-      if (p == 0 && sock->GetErrno () != Socket::ERROR_NOTERROR)
+  NS_LOG_INFO (h);
+  if (who == SENDER)
+    {
+      if (h.GetFlags () & TcpHeader::SYN)
         {
-          NS_FATAL_ERROR ("Source could not read stream at byte " << m_currentSourceRxBytes);
+          if (m_configuration == ENABLED_RECEIVER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                                     "timestamp disabled but option enabled");
+            }
+          else if (m_configuration == ENABLED_SENDER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), true,
+                                     "timestamp enabled but option disabled");
+            }
+        }
+      else
+        {
+          if (m_configuration != ENABLED)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                                     "timestamp disabled but option enabled");
+            }
         }
-
-      m_currentSourceRxBytes += p->GetSize ();
     }
-
-  if (m_currentSourceRxBytes == m_totalBytes)
+  else if (who == RECEIVER)
     {
-      sock->Close ();
+      if (h.GetFlags () & TcpHeader::SYN)
+        {
+          // Sender has not sent timestamp, so implementation should disable ts
+          if (m_configuration == ENABLED_RECEIVER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                                     "sender has not ts, but receiver sent anyway");
+            }
+          else if (m_configuration == ENABLED_SENDER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                                     "receiver has not ts enabled but sent anyway");
+            }
+        }
+      else
+        {
+          if (m_configuration != ENABLED)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::TS), false,
+                                     "timestamp disabled but option enabled");
+            }
+        }
     }
 }
 
-Ptr<Node>
-TimestampTestCase::CreateInternetNode ()
-{
-  Ptr<Node> node = CreateObject<Node> ();
-  //ARP
-  Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> ();
-  node->AggregateObject (arp);
-  //IPV4
-  Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> ();
-  //Routing for Ipv4
-  Ptr<Ipv4ListRouting> ipv4Routing = CreateObject<Ipv4ListRouting> ();
-  ipv4->SetRoutingProtocol (ipv4Routing);
-  Ptr<Ipv4StaticRouting> ipv4staticRouting = CreateObject<Ipv4StaticRouting> ();
-  ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0);
-  node->AggregateObject (ipv4);
-  //ICMP
-  Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> ();
-  node->AggregateObject (icmp);
-  //UDP
-  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  node->AggregateObject (udp);
-  //TCP
-  Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
-  node->AggregateObject (tcp);
-  return node;
-}
-
-Ptr<SimpleNetDevice>
-TimestampTestCase::AddSimpleNetDevice (Ptr<Node> node, const char* ipaddr, const char* netmask)
-{
-  Ptr<SimpleNetDevice> dev = CreateObject<SimpleNetDevice> ();
-  dev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
-  node->AddDevice (dev);
-  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-  uint32_t ndid = ipv4->AddInterface (dev);
-  Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address (ipaddr), Ipv4Mask (netmask));
-  ipv4->AddAddress (ndid, ipv4Addr);
-  ipv4->SetUp (ndid);
-  return dev;
-}
-
 void
-TimestampTestCase::SetupDefaultSim (void)
+TimestampTestCase::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
 {
-  const char* netmask = "255.255.255.0";
-  const char* ipaddr0 = "192.168.1.1";
-  const char* ipaddr1 = "192.168.1.2";
-  Ptr<Node> node0 = CreateInternetNode ();
-  Ptr<Node> node1 = CreateInternetNode ();
-  Ptr<SimpleNetDevice> dev0 = AddSimpleNetDevice (node0, ipaddr0, netmask);
-  Ptr<SimpleNetDevice> dev1 = AddSimpleNetDevice (node1, ipaddr1, netmask);
-
-  Ptr<SimpleChannel> channel = CreateObject<SimpleChannel> ();
-  dev0->SetChannel (channel);
-  dev1->SetChannel (channel);
-
-  Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory> ();
-  Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory> ();
-
-  Ptr<TcpSocketBase> server = DynamicCast<TcpSocketBase> (sockFactory0->CreateSocket ());
-  Ptr<TcpSocketBase> source = DynamicCast<TcpSocketBase> (sockFactory1->CreateSocket ());
-
-  NS_ASSERT (server != 0);
-  NS_ASSERT (source != 0);
-
-  switch (m_configuration)
+  if (who == SENDER)
     {
-    case DISABLED:
-      server->SetAttribute ("Timestamp", BooleanValue (false));
-      source->SetAttribute ("Timestamp", BooleanValue (false));
-      break;
 
-    case ENABLED_CLIENT:
-      server->SetAttribute ("Timestamp", BooleanValue (false));
-      source->SetAttribute ("Timestamp", BooleanValue (true));
-      break;
-
-    case ENABLED_SERVER:
-      server->SetAttribute ("Timestamp", BooleanValue (true));
-      source->SetAttribute ("Timestamp", BooleanValue (false));
-      break;
-
-    case ENABLED:
-      server->SetAttribute ("Timestamp", BooleanValue (true));
-      source->SetAttribute ("Timestamp", BooleanValue (true));
-      break;
     }
+  else if (who == RECEIVER)
+    {
 
-  uint16_t port = 50000;
-  InetSocketAddress serverlocaladdr (Ipv4Address::GetAny (), port);
-  InetSocketAddress serverremoteaddr (Ipv4Address (ipaddr0), port);
-
-  server->Bind (serverlocaladdr);
-  server->Listen ();
-  server->SetAcceptCallback (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
-                             MakeCallback (&TimestampTestCase::ServerHandleConnectionCreated,this));
-
-  source->SetRecvCallback (MakeCallback (&TimestampTestCase::SourceHandleRecv, this));
-  source->SetSendCallback (MakeCallback (&TimestampTestCase::SourceHandleSend, this));
-
-  source->Connect (serverremoteaddr);
+    }
 }
 
+// TimestampValueTestCase
 class TimestampValueTestCase : public TestCase
 {
 public:
@@ -396,8 +257,8 @@
     : TestSuite ("tcp-timestamp", UNIT)
   {
     AddTestCase (new TimestampTestCase (TimestampTestCase::DISABLED), TestCase::QUICK);
-    AddTestCase (new TimestampTestCase (TimestampTestCase::ENABLED_CLIENT), TestCase::QUICK);
-    AddTestCase (new TimestampTestCase (TimestampTestCase::ENABLED_SERVER), TestCase::QUICK);
+    AddTestCase (new TimestampTestCase (TimestampTestCase::ENABLED_RECEIVER), TestCase::QUICK);
+    AddTestCase (new TimestampTestCase (TimestampTestCase::ENABLED_SENDER), TestCase::QUICK);
     AddTestCase (new TimestampTestCase (TimestampTestCase::ENABLED), TestCase::QUICK);
     AddTestCase (new TimestampValueTestCase (0.0, 0.01, "Value Check"), TestCase::QUICK);
     AddTestCase (new TimestampValueTestCase (3.0, 0.5,  "Value Check"), TestCase::QUICK);
diff -Naur ns-3.24.1/src/internet/test/tcp-wscaling-test.cc ns-3.25/src/internet/test/tcp-wscaling-test.cc
--- ns-3.24.1/src/internet/test/tcp-wscaling-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/tcp-wscaling-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -18,390 +18,155 @@
  */
 
 #include "ns3/test.h"
-
-#define private public
-#define protected public
-
-#include "ns3/socket-factory.h"
-#include "ns3/tcp-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/config.h"
-#include "ns3/ipv4-static-routing.h"
-#include "ns3/ipv4-list-routing.h"
-#include "ns3/ipv6-static-routing.h"
-#include "ns3/ipv6-list-routing.h"
+#include "tcp-general-test.h"
 #include "ns3/node.h"
-#include "ns3/inet-socket-address.h"
-#include "ns3/inet6-socket-address.h"
-#include "ns3/uinteger.h"
 #include "ns3/log.h"
 
-#include "ns3/arp-l3-protocol.h"
-#include "ns3/ipv4-l3-protocol.h"
-#include "ns3/ipv6-l3-protocol.h"
-#include "ns3/icmpv4-l4-protocol.h"
-#include "ns3/icmpv6-l4-protocol.h"
-#include "ns3/udp-l4-protocol.h"
-#include "ns3/tcp-l4-protocol.h"
-
-#include "ns3/tcp-socket-base.h"
-
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("WScalingTestSuite");
 
-class WScalingTestCase : public TestCase
+// TODO: Check the buffer size and scaling option value
+class WScalingTestCase : public TcpGeneralTest
 {
 public:
   enum Configuration
   {
     DISABLED,
-    ENABLED_CLIENT,
-    ENABLED_SERVER,
+    ENABLED_SENDER,
+    ENABLED_RECEIVER,
     ENABLED
   };
 
   WScalingTestCase (WScalingTestCase::Configuration conf,
-                    uint32_t maxServerBufferSize,
-                    uint32_t maxSourceBufferSize, std::string name);
-
-private:
-  virtual void DoRun (void);
-  virtual void DoTeardown (void);
-
-  void SetupDefaultSim (void);
-  //void SetupDefaultSim6 (void);
-
-  Ptr<Node> CreateInternetNode (void);
-  Ptr<Node> CreateInternetNode6 (void);
-
-  Ptr<SimpleNetDevice> AddSimpleNetDevice (Ptr<Node> node, const char* ipaddr, const char* netmask);
-  Ptr<SimpleNetDevice> AddSimpleNetDevice6 (Ptr<Node> node, Ipv6Address ipaddr, Ipv6Prefix prefix);
-
-  void ServerHandleConnectionCreated (Ptr<Socket> s, const Address & addr);
-  void SourceHandleConnectionCreated (Ptr<Socket> sock);
-  void ServerHandleRecv (Ptr<Socket> sock);
-  void ServerHandleSend (Ptr<Socket> sock, uint32_t sendB);
-  void SourceHandleSend (Ptr<Socket> sock, uint32_t available);
-  void SourceHandleRecv (Ptr<Socket> sock);
-
-  Configuration m_configuration;
+                    uint32_t maxRcvBufferSize,
+                    uint32_t maxSndBufferSize, std::string name);
 
-  uint32_t m_totalBytes;
-  uint32_t m_sourceWriteSize;
-  uint32_t m_sourceReadSize;
-  uint32_t m_serverWriteSize;
-  uint32_t m_serverReadSize;
-  uint32_t m_currentSourceTxBytes;
-  uint32_t m_currentSourceRxBytes;
-  uint32_t m_currentServerRxBytes;
-  uint32_t m_currentServerTxBytes;
+protected:
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+  virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node);
 
-  uint32_t m_maxServerBufferSize;
-  uint32_t m_maxSourceBufferSize;
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
 
-  Ptr<TcpSocketBase> m_server;
-  Ptr<TcpSocketBase> m_source;
+  Configuration m_configuration;
+  uint32_t m_maxRcvBufferSize;
+  uint32_t m_maxSndBufferSize;
 };
 
 WScalingTestCase::WScalingTestCase (WScalingTestCase::Configuration conf,
-                                    uint32_t maxServerBufferSize,
-                                    uint32_t maxSourceBufferSize, std::string name)
-  : TestCase (name)
+                                    uint32_t maxRcvBufferSize,
+                                    uint32_t maxSndBufferSize, std::string name)
+  : TcpGeneralTest (name)
 {
   m_configuration = conf;
-  m_totalBytes = 2000;
-  m_sourceWriteSize = 500;
-  m_sourceReadSize = 500;
-  m_serverWriteSize = 500;
-  m_serverReadSize = 500;
-
-  m_maxServerBufferSize = maxServerBufferSize;
-  m_maxSourceBufferSize = maxSourceBufferSize;
+  m_maxRcvBufferSize = maxRcvBufferSize;
+  m_maxSndBufferSize = maxSndBufferSize;
 }
 
-void
-WScalingTestCase::DoRun (void)
-{
-  m_currentSourceTxBytes = 0;
-  m_currentSourceRxBytes = 0;
-  m_currentServerRxBytes = 0;
-  m_currentServerTxBytes = 0;
-
-
-//  if (m_useIpv6 == true)
-//    {
-//      SetupDefaultSim6 ();
-//    }
-//  else
-//    {
-  SetupDefaultSim ();
-//    }
-
-  Simulator::Run ();
-
-  NS_TEST_EXPECT_MSG_EQ (m_currentSourceTxBytes,
-                         m_totalBytes,
-                         "Source sent all bytes");
-
-  NS_TEST_EXPECT_MSG_EQ (m_currentServerRxBytes,
-                         m_totalBytes,
-                         "Server received all bytes");
-
-  NS_TEST_EXPECT_MSG_EQ (m_currentSourceRxBytes,
-                         m_totalBytes,
-                         "Source received all bytes");
-}
-
-void
-WScalingTestCase::DoTeardown (void)
+Ptr<TcpSocketMsgBase>
+WScalingTestCase::CreateReceiverSocket (Ptr<Node> node)
 {
-  Simulator::Destroy ();
-}
-
-void
-WScalingTestCase::ServerHandleConnectionCreated (Ptr<Socket> s,
-                                                 const Address & addr)
-{
-  s->SetRecvCallback (MakeCallback (&WScalingTestCase::ServerHandleRecv, this));
-  s->SetSendCallback (MakeCallback (&WScalingTestCase::ServerHandleSend, this));
-
-  Ptr<TcpSocketBase> b = DynamicCast <TcpSocketBase> (s);
-
-  if (m_configuration == ENABLED)
-    {
-      NS_TEST_EXPECT_MSG_EQ ((b->m_rWnd.Get ()), m_maxSourceBufferSize,
-                             "Miscalculating source window");
-
-      NS_TEST_EXPECT_MSG_LT_OR_EQ ((b->m_rWnd.Get () >> b->m_rcvScaleFactor),
-                                   b->m_maxWinSize, "Violating maximum adv window");
-
-      NS_TEST_EXPECT_MSG_LT_OR_EQ (b->m_rcvScaleFactor, 14,
-                                   "Violating RFC for max value of the scale factor");
-    }
-  else
-    {
-      NS_TEST_EXPECT_MSG_EQ (b->m_rcvScaleFactor, 0, "Using Window scale while disabled");
-      NS_TEST_EXPECT_MSG_EQ (b->m_sndScaleFactor, 0, "Using Window scale while disabled");
-      NS_TEST_EXPECT_MSG_LT_OR_EQ (b->m_rWnd.Get (), m_source->m_maxWinSize, "Violating max adv window");
-    }
-}
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket (node);
 
-void
-WScalingTestCase::ServerHandleRecv (Ptr<Socket> sock)
-{
-  while (sock->GetRxAvailable () > 0)
+  switch (m_configuration)
     {
-      uint32_t toRead = std::min (m_serverReadSize, sock->GetRxAvailable ());
-      Ptr<Packet> p = sock->Recv (toRead, 0);
+    case DISABLED:
+      socket->SetAttribute ("WindowScaling", BooleanValue (false));
+      break;
 
-      if (p == 0 && sock->GetErrno () != Socket::ERROR_NOTERROR)
-        {
-          NS_FATAL_ERROR ("Server could not read stream at byte " << m_currentServerRxBytes);
-        }
+    case ENABLED_RECEIVER:
+      socket->SetAttribute ("WindowScaling", BooleanValue (true));
+      break;
 
-      m_currentServerRxBytes += p->GetSize ();
+    case ENABLED_SENDER:
+      socket->SetAttribute ("WindowScaling", BooleanValue (false));
+      break;
 
-      ServerHandleSend (sock, sock->GetTxAvailable ());
+    case ENABLED:
+      socket->SetAttribute ("WindowScaling", BooleanValue (true));
+      break;
     }
-}
 
-void
-WScalingTestCase::SourceHandleConnectionCreated (Ptr<Socket> sock)
-{
-  Ptr<TcpSocketBase> b = DynamicCast <TcpSocketBase> (sock);
-
-  if (m_configuration == ENABLED)
-    {
-      NS_TEST_EXPECT_MSG_EQ ((b->m_rWnd.Get ()), m_maxServerBufferSize,
-                             "Miscalculating server window " << (int)b->m_rcvScaleFactor);
-
-      NS_TEST_EXPECT_MSG_LT_OR_EQ ((b->m_rWnd.Get () >> b->m_rcvScaleFactor),
-                                   b->m_maxWinSize, "Violating maximum adv window");
-
-      NS_TEST_EXPECT_MSG_LT_OR_EQ (b->m_rcvScaleFactor, 14,
-                                   "Violating RFC for max value of the scale factor");
-    }
-  else
-    {
-      NS_TEST_EXPECT_MSG_EQ (b->m_rcvScaleFactor, 0, "Using Window scale while disabled");
-      NS_TEST_EXPECT_MSG_EQ (b->m_sndScaleFactor, 0, "Using Window scale while disabled");
-      NS_TEST_EXPECT_MSG_LT_OR_EQ (b->m_rWnd.Get (), m_server->m_maxWinSize, "Violating max adv window");
-    }
+  return socket;
 }
 
-void
-WScalingTestCase::ServerHandleSend (Ptr<Socket> sock, uint32_t sendB)
+Ptr<TcpSocketMsgBase>
+WScalingTestCase::CreateSenderSocket (Ptr<Node> node)
 {
-  while (sock->GetTxAvailable () > 0 && m_currentServerTxBytes < m_currentServerRxBytes)
-    {
-      uint32_t left = m_currentServerRxBytes - m_currentServerTxBytes;
-      uint32_t toSend = std::min (left, sock->GetTxAvailable ());
-      toSend = std::min (toSend, m_serverWriteSize);
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateSenderSocket (node);
 
-      Ptr<Packet> p = Create<Packet> (toSend);
+  switch (m_configuration)
+    {
+    case DISABLED:
+      socket->SetAttribute ("WindowScaling", BooleanValue (false));
+      break;
 
-      int sent = sock->Send (p);
+    case ENABLED_RECEIVER:
+      socket->SetAttribute ("WindowScaling", BooleanValue (false));
+      break;
 
-      NS_TEST_EXPECT_MSG_EQ ((sent != -1), true, "Server error during send ?");
+    case ENABLED_SENDER:
+      socket->SetAttribute ("WindowScaling", BooleanValue (true));
+      break;
 
-      m_currentServerTxBytes += sent;
+    case ENABLED:
+      socket->SetAttribute ("WindowScaling", BooleanValue (true));
+      break;
     }
 
-  if (m_currentServerTxBytes == m_totalBytes)
-    {
-      sock->Close ();
-    }
+  return socket;
 }
 
 void
-WScalingTestCase::SourceHandleSend (Ptr<Socket> sock, uint32_t available)
+WScalingTestCase::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
 {
-  while (sock->GetTxAvailable () > 0 && m_currentSourceTxBytes < m_totalBytes)
+  NS_LOG_INFO (h);
+
+  if (! (h.GetFlags() & TcpHeader::SYN))
     {
-      uint32_t left = m_totalBytes - m_currentSourceTxBytes;
-      uint32_t toSend = std::min (left, sock->GetTxAvailable ());
-      toSend = std::min (toSend, m_sourceWriteSize);
-
-      Ptr<Packet> p = Create<Packet> (toSend);
-
-      int sent = sock->Send (p);
-      NS_TEST_EXPECT_MSG_EQ ((sent != -1), true, "Error during send ?");
-      m_currentSourceTxBytes += sent;
+      NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), false,
+                             "wscale present in non-SYN packets");
     }
-}
-
-void
-WScalingTestCase::SourceHandleRecv (Ptr<Socket> sock)
-{
-  while (sock->GetRxAvailable () > 0 && m_currentSourceRxBytes < m_totalBytes)
+  else
     {
-      uint32_t toRead = std::min (m_sourceReadSize, sock->GetRxAvailable ());
-      Ptr<Packet> p = sock->Recv (toRead, 0);
-
-      if (p == 0 && sock->GetErrno () != Socket::ERROR_NOTERROR)
+      if (m_configuration == DISABLED)
         {
-          NS_FATAL_ERROR ("Source could not read stream at byte " << m_currentSourceRxBytes);
+          NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), false,
+                                 "wscale disabled but option enabled");
+        }
+      else if (m_configuration == ENABLED)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), true,
+                                 "wscale enabled but option disabled");
         }
 
-      m_currentSourceRxBytes += p->GetSize ();
-    }
-
-  if (m_currentSourceRxBytes == m_totalBytes)
-    {
-      sock->Close ();
-    }
-}
-
-Ptr<Node>
-WScalingTestCase::CreateInternetNode ()
-{
-  Ptr<Node> node = CreateObject<Node> ();
-  //ARP
-  Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> ();
-  node->AggregateObject (arp);
-  //IPV4
-  Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> ();
-  //Routing for Ipv4
-  Ptr<Ipv4ListRouting> ipv4Routing = CreateObject<Ipv4ListRouting> ();
-  ipv4->SetRoutingProtocol (ipv4Routing);
-  Ptr<Ipv4StaticRouting> ipv4staticRouting = CreateObject<Ipv4StaticRouting> ();
-  ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0);
-  node->AggregateObject (ipv4);
-  //ICMP
-  Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> ();
-  node->AggregateObject (icmp);
-  //UDP
-  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  node->AggregateObject (udp);
-  //TCP
-  Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
-  node->AggregateObject (tcp);
-  return node;
-}
-
-Ptr<SimpleNetDevice>
-WScalingTestCase::AddSimpleNetDevice (Ptr<Node> node, const char* ipaddr, const char* netmask)
-{
-  Ptr<SimpleNetDevice> dev = CreateObject<SimpleNetDevice> ();
-  dev->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ()));
-  node->AddDevice (dev);
-  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-  uint32_t ndid = ipv4->AddInterface (dev);
-  Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address (ipaddr), Ipv4Mask (netmask));
-  ipv4->AddAddress (ndid, ipv4Addr);
-  ipv4->SetUp (ndid);
-  return dev;
-}
-
-void
-WScalingTestCase::SetupDefaultSim (void)
-{
-  const char* netmask = "255.255.255.0";
-  const char* ipaddr0 = "192.168.1.1";
-  const char* ipaddr1 = "192.168.1.2";
-  Ptr<Node> node0 = CreateInternetNode ();
-  Ptr<Node> node1 = CreateInternetNode ();
-  Ptr<SimpleNetDevice> dev0 = AddSimpleNetDevice (node0, ipaddr0, netmask);
-  Ptr<SimpleNetDevice> dev1 = AddSimpleNetDevice (node1, ipaddr1, netmask);
-
-  Ptr<SimpleChannel> channel = CreateObject<SimpleChannel> ();
-  dev0->SetChannel (channel);
-  dev1->SetChannel (channel);
-
-  Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory> ();
-  Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory> ();
-
-  m_server = DynamicCast<TcpSocketBase> (sockFactory0->CreateSocket ());
-  m_source = DynamicCast<TcpSocketBase> (sockFactory1->CreateSocket ());
-
-  NS_ASSERT (m_server != 0);
-  NS_ASSERT (m_source != 0);
-
-  switch (m_configuration)
-    {
-    case DISABLED:
-      m_server->SetAttribute ("WindowScaling", BooleanValue (false));
-      m_source->SetAttribute ("WindowScaling", BooleanValue (false));
-      break;
-
-    case ENABLED_CLIENT:
-      m_server->SetAttribute ("WindowScaling", BooleanValue (false));
-      m_source->SetAttribute ("WindowScaling", BooleanValue (true));
-      break;
-
-    case ENABLED_SERVER:
-      m_server->SetAttribute ("WindowScaling", BooleanValue (true));
-      m_source->SetAttribute ("WindowScaling", BooleanValue (false));
-      break;
-
-    case ENABLED:
-      m_server->SetAttribute ("WindowScaling", BooleanValue (true));
-      m_source->SetAttribute ("WindowScaling", BooleanValue (true));
-      break;
+      if (who == SENDER)
+        {
+          if (m_configuration == ENABLED_RECEIVER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), false,
+                                     "wscale disabled but option enabled");
+            }
+          else if (m_configuration == ENABLED_SENDER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), true,
+                                     "wscale enabled but option disabled");
+            }
+        }
+      else if (who == RECEIVER)
+        {
+          if (m_configuration == ENABLED_RECEIVER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), false,
+                                     "sender has not ws, but receiver sent anyway");
+            }
+          else if (m_configuration == ENABLED_SENDER)
+            {
+              NS_TEST_ASSERT_MSG_EQ (h.HasOption (TcpOption::WINSCALE), false,
+                                     "receiver has not ws enabled but sent anyway");
+            }
+        }
     }
-
-  m_server->m_rxBuffer->SetMaxBufferSize (m_maxServerBufferSize);
-  m_source->m_rxBuffer->SetMaxBufferSize (m_maxSourceBufferSize);
-
-  uint16_t port = 50000;
-  InetSocketAddress serverlocaladdr (Ipv4Address::GetAny (), port);
-  InetSocketAddress serverremoteaddr (Ipv4Address (ipaddr0), port);
-
-  m_server->Bind (serverlocaladdr);
-  m_server->Listen ();
-  m_server->SetAcceptCallback (MakeNullCallback<bool, Ptr< Socket >, const Address &> (),
-                               MakeCallback (&WScalingTestCase::ServerHandleConnectionCreated,this));
-
-  m_source->SetRecvCallback (MakeCallback (&WScalingTestCase::SourceHandleRecv, this));
-  m_source->SetSendCallback (MakeCallback (&WScalingTestCase::SourceHandleSend, this));
-  m_source->SetConnectCallback (MakeCallback (&WScalingTestCase::SourceHandleConnectionCreated, this),
-                                MakeNullCallback<void, Ptr<Socket> > ());
-
-  m_source->Connect (serverremoteaddr);
 }
 
 static class TcpWScalingTestSuite : public TestSuite
@@ -413,8 +178,8 @@
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 200000, 65535, "WS only server"), TestCase::QUICK);
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 65535, 65535, "Window scaling not used, all enabled"), TestCase::QUICK);
     AddTestCase (new WScalingTestCase (WScalingTestCase::DISABLED, 65535, 65535, "WS disabled"), TestCase::QUICK);
-    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED_CLIENT, 65535, 65535, "WS enabled client"), TestCase::QUICK);
-    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED_SERVER, 65535, 65535, "WS disabled client"), TestCase::QUICK);
+    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED_SENDER, 65535, 65535, "WS enabled client"), TestCase::QUICK);
+    AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED_RECEIVER, 65535, 65535, "WS disabled client"), TestCase::QUICK);
 
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 65535, 200000, "WS only client"), TestCase::QUICK);
     AddTestCase (new WScalingTestCase (WScalingTestCase::ENABLED, 131072, 65535, "WS only server"), TestCase::QUICK);
diff -Naur ns-3.24.1/src/internet/test/tcp-zero-window-test.cc ns-3.25/src/internet/test/tcp-zero-window-test.cc
--- ns-3.24.1/src/internet/test/tcp-zero-window-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet/test/tcp-zero-window-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,253 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *
+ * 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
+ *
+ */
+
+#include "tcp-general-test.h"
+#include "tcp-error-model.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TcpZeroWindowTestSuite");
+
+class TcpZeroWindowTest : public TcpGeneralTest
+{
+public:
+  TcpZeroWindowTest (const std::string &desc);
+
+protected:
+  //virtual void ReceivePacket (Ptr<Socket> socket);
+  virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node);
+
+  virtual void Tx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
+  virtual void ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                             const TcpHeader& h, SocketWho who);
+  void NormalClose (SocketWho who);
+  void FinalChecks ();
+
+  virtual void ConfigureEnvironment ();
+  virtual void ConfigureProperties ();
+
+  void IncreaseBufSize ();
+
+protected:
+  EventId m_receivePktEvent;
+  bool m_zeroWindowProbe;
+  bool m_windowUpdated;
+  bool m_senderFinished;
+  bool m_receiverFinished;
+};
+
+TcpZeroWindowTest::TcpZeroWindowTest (const std::string &desc)
+  : TcpGeneralTest (desc),
+    m_zeroWindowProbe (false),
+    m_windowUpdated (false),
+    m_senderFinished (false),
+    m_receiverFinished (false)
+{
+}
+
+void
+TcpZeroWindowTest::ConfigureEnvironment ()
+{
+  TcpGeneralTest::ConfigureEnvironment ();
+  SetAppPktCount (20);
+  SetMTU (500);
+  SetTransmitStart (Seconds (2.0));
+  SetPropagationDelay (MilliSeconds (50));
+}
+
+void
+TcpZeroWindowTest::ConfigureProperties ()
+{
+  TcpGeneralTest::ConfigureProperties ();
+  SetInitialCwnd (SENDER, 10);
+}
+
+void
+TcpZeroWindowTest::IncreaseBufSize ()
+{
+  SetRcvBufSize (RECEIVER, 2500);
+}
+
+Ptr<TcpSocketMsgBase>
+TcpZeroWindowTest::CreateReceiverSocket (Ptr<Node> node)
+{
+  Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket (node);
+
+  socket->SetAttribute ("RcvBufSize", UintegerValue (0));
+  Simulator::Schedule (Seconds (10.0),
+                       &TcpZeroWindowTest::IncreaseBufSize, this);
+
+  return socket;
+}
+
+void
+TcpZeroWindowTest::Tx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      NS_LOG_INFO ("\tSENDER TX " << h << " size " << p->GetSize ());
+
+      if (Simulator::Now ().GetSeconds () <= 6.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (p->GetSize (), 0,
+                                 "Data packet sent anyway");
+        }
+      else if (Simulator::Now ().GetSeconds () > 6.0
+               && Simulator::Now ().GetSeconds () <= 7.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (m_zeroWindowProbe, false, "Sent another probe");
+
+          if (!m_zeroWindowProbe)
+            {
+              NS_TEST_ASSERT_MSG_EQ (p->GetSize (), 1,
+                                     "Data packet sent instead of window probe");
+              NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber (), SequenceNumber32 (1),
+                                     "Data packet sent instead of window probe");
+              m_zeroWindowProbe = true;
+            }
+        }
+      else if (Simulator::Now ().GetSeconds () > 7.0
+               && Simulator::Now ().GetSeconds () < 10.0)
+        {
+          NS_FATAL_ERROR ("No packets should be sent before the window update");
+        }
+    }
+  else if (who == RECEIVER)
+    {
+      NS_LOG_INFO ("\tRECEIVER TX " << h << " size " << p->GetSize ());
+
+      if (h.GetFlags () & TcpHeader::SYN)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize (), 0,
+                                 "RECEIVER window size is not 0 in the SYN-ACK");
+        }
+
+      if (Simulator::Now ().GetSeconds () > 6.0
+          && Simulator::Now ().GetSeconds () <= 7.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetSequenceNumber (), SequenceNumber32 (1),
+                                 "Data packet sent instead of window probe");
+          NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize (), 0,
+                                 "No zero window advertised by RECEIVER");
+        }
+      else if (Simulator::Now ().GetSeconds () > 7.0
+               && Simulator::Now ().GetSeconds () < 10.0)
+        {
+          NS_FATAL_ERROR ("No packets should be sent before the window update");
+        }
+      else if (Simulator::Now ().GetSeconds () >= 10.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize (), 2500,
+                                 "Receiver window not updated");
+        }
+    }
+
+  NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (GetTcb (SENDER)), TcpSocketState::CA_OPEN,
+                         "Sender State is not OPEN");
+  NS_TEST_ASSERT_MSG_EQ (GetCongStateFrom (GetTcb (RECEIVER)), TcpSocketState::CA_OPEN,
+                         "Receiver State is not OPEN");
+}
+
+void
+TcpZeroWindowTest::Rx (const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      NS_LOG_INFO ("\tSENDER RX " << h << " size " << p->GetSize ());
+
+      if (h.GetFlags () & TcpHeader::SYN)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize (), 0,
+                                 "RECEIVER window size is not 0 in the SYN-ACK");
+        }
+
+      if (Simulator::Now ().GetSeconds () >= 10.0)
+        {
+          NS_TEST_ASSERT_MSG_EQ (h.GetWindowSize (), 2500,
+                                 "Receiver window not updated");
+          m_windowUpdated = true;
+        }
+    }
+  else if (who == RECEIVER)
+    {
+      NS_LOG_INFO ("\tRECEIVER RX " << h << " size " << p->GetSize ());
+    }
+}
+
+void
+TcpZeroWindowTest::NormalClose (SocketWho who)
+{
+  if (who == SENDER)
+    {
+      m_senderFinished = true;
+    }
+  else if (who == RECEIVER)
+    {
+      m_receiverFinished = true;
+    }
+}
+
+void
+TcpZeroWindowTest::FinalChecks ()
+{
+  NS_TEST_ASSERT_MSG_EQ (m_zeroWindowProbe, true,
+                         "Zero window probe not sent");
+  NS_TEST_ASSERT_MSG_EQ (m_windowUpdated, true,
+                         "Window has not updated during the connection");
+  NS_TEST_ASSERT_MSG_EQ (m_senderFinished, true,
+                         "Connection not closed successfully (SENDER)");
+  NS_TEST_ASSERT_MSG_EQ (m_receiverFinished, true,
+                         "Connection not closed successfully (RECEIVER)");
+}
+
+void
+TcpZeroWindowTest::ProcessedAck (const Ptr<const TcpSocketState> tcb,
+                                 const TcpHeader& h, SocketWho who)
+{
+  if (who == SENDER)
+    {
+      if (h.GetFlags () & TcpHeader::SYN)
+        {
+          EventId persistentEvent = GetPersistentEvent (SENDER);
+          NS_TEST_ASSERT_MSG_EQ (persistentEvent.IsRunning (), true,
+                                 "Persistent event not started");
+        }
+    }
+  else if (who == RECEIVER)
+    {
+
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+static class TcpZeroWindowTestSuite : public TestSuite
+{
+public:
+  TcpZeroWindowTestSuite () : TestSuite ("tcp-zero-window-test", UNIT)
+  {
+    AddTestCase (new TcpZeroWindowTest ("zero window test"),
+                 TestCase::QUICK);
+  }
+} g_tcpZeroWindowTestSuite;
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet/test/udp-test.cc ns-3.25/src/internet/test/udp-test.cc
--- ns-3.24.1/src/internet/test/udp-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/test/udp-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -322,6 +322,21 @@
   m_receivedPacket->RemoveAllByteTags ();
   m_receivedPacket2->RemoveAllByteTags ();
 
+  // Simple getpeername tests
+
+  Address peerAddress;
+  int err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (txSocket->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  InetSocketAddress peer ("10.0.0.1", 1234);
+  err = txSocket->Connect (peer);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, peer, "address from socket GetPeerName() should equal the connected address");
+
   Simulator::Destroy ();
 
 }
@@ -500,6 +515,20 @@
   m_receivedPacket->RemoveAllByteTags ();
   m_receivedPacket2->RemoveAllByteTags ();
 
+  // Simple getpeername tests
+  Address peerAddress;
+  int err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, -1, "socket GetPeerName() should fail when socket is not connected");
+  NS_TEST_EXPECT_MSG_EQ (txSocket->GetErrno (), Socket::ERROR_NOTCONN, "socket error code should be ERROR_NOTCONN");
+
+  Inet6SocketAddress peer ("2001:0100::1", 1234);
+  err = txSocket->Connect (peer);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket Connect() should succeed");
+
+  err = txSocket->GetPeerName (peerAddress);
+  NS_TEST_EXPECT_MSG_EQ (err, 0, "socket GetPeerName() should succeed when socket is connected");
+  NS_TEST_EXPECT_MSG_EQ (peerAddress, peer, "address from socket GetPeerName() should equal the connected address");
+
   Simulator::Destroy ();
 
 }
diff -Naur ns-3.24.1/src/internet/wscript ns-3.25/src/internet/wscript
--- ns-3.24.1/src/internet/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/internet/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -104,7 +104,7 @@
 
 def build(bld):
     # bridge and mpi dependencies are due to global routing
-    obj = bld.create_ns3_module('internet', ['bridge', 'mpi', 'network', 'core'])
+    obj = bld.create_ns3_module('internet', ['bridge', 'mpi', 'traffic-control', 'network', 'core'])
     obj.source = [
         'model/ip-l4-protocol.cc',
         'model/udp-header.cc',
@@ -145,10 +145,9 @@
         'model/ipv6-option-demux.cc',
         'model/icmpv6-l4-protocol.cc',
         'model/tcp-socket-base.cc',
-        'model/tcp-rfc793.cc',
-        'model/tcp-tahoe.cc',
-        'model/tcp-reno.cc',
-        'model/tcp-newreno.cc',
+        'model/tcp-highspeed.cc',
+        'model/tcp-hybla.cc',
+        'model/tcp-congestion-ops.cc',
         'model/tcp-westwood.cc',
         'model/tcp-rx-buffer.cc',
         'model/tcp-tx-buffer.cc',
@@ -161,6 +160,8 @@
         'model/ipv4-interface-address.cc',
         'model/ipv4-address-generator.cc',
         'model/ipv4-header.cc',
+        'model/ipv4-queue-disc-item.cc',
+        'model/ipv4-packet-filter.cc',
         'model/ipv4-route.cc',
         'model/ipv4-routing-protocol.cc',
         'model/udp-socket.cc',
@@ -170,6 +171,8 @@
         'model/ipv4.cc',
         'model/ipv4-raw-socket-factory.cc',
         'model/ipv6-header.cc',
+        'model/ipv6-queue-disc-item.cc',
+        'model/ipv6-packet-filter.cc',
         'model/ipv6-interface-address.cc',
         'model/ipv6-route.cc',
         'model/ipv6.cc',
@@ -189,7 +192,6 @@
         'model/global-route-manager.cc',
         'model/global-route-manager-impl.cc',
         'model/candidate-queue.cc',
-        'model/codel-queue.cc',
         'model/ipv4-global-routing.cc',
         'helper/ipv4-global-routing-helper.cc',
         'helper/internet-stack-helper.cc',
@@ -207,6 +209,9 @@
         'model/ripng.cc',
         'model/ripng-header.cc',
         'helper/ripng-helper.cc',
+        'model/rip.cc',
+        'model/rip-header.cc',
+        'helper/rip-helper.cc',
         ]
 
     internet_test = bld.create_ns3_module_test_library('internet')
@@ -229,20 +234,36 @@
         'test/ipv6-packet-info-tag-test-suite.cc',
         'test/ipv6-test.cc',
         'test/ipv6-raw-test.cc',
+        'test/pfifo-fast-queue-disc-test-suite.cc',
         'test/tcp-test.cc',
         'test/tcp-timestamp-test.cc',
         'test/tcp-wscaling-test.cc',
         'test/tcp-option-test.cc',
         'test/tcp-header-test.cc',
+        'test/tcp-general-test.cc',
+        'test/tcp-error-model.cc',
+        'test/tcp-slow-start-test.cc',
+        'test/tcp-cong-avoid-test.cc',
+        'test/tcp-fast-retr-test.cc',
+        'test/tcp-rto-test.cc',
+        'test/tcp-highspeed-test.cc',
+        'test/tcp-hybla-test.cc',
+        'test/tcp-zero-window-test.cc',
+        'test/tcp-pkts-acked-test.cc',
+        'test/tcp-rtt-estimation.cc',
+        'test/tcp-bytes-in-flight-test.cc',
         'test/udp-test.cc',
         'test/ipv6-address-generator-test-suite.cc',
         'test/ipv6-dual-stack-test-suite.cc',
         'test/ipv6-fragmentation-test.cc',
         'test/ipv6-forwarding-test.cc',
         'test/ipv6-ripng-test.cc',
-     	'test/ipv6-address-helper-test-suite.cc',
+        'test/ipv6-address-helper-test-suite.cc',
         'test/rtt-test.cc',
-        'test/codel-queue-test-suite.cc',
+        'test/tcp-endpoint-bug2211.cc',
+        'test/tcp-datasentcb-test.cc',
+        'test/ipv4-rip-test.cc',
+        
         ]
     privateheaders = bld(features='ns3privateheader')
     privateheaders.module = 'internet'
@@ -283,6 +304,8 @@
         'model/ipv4-interface-address.h',
         'model/ipv4-address-generator.h',
         'model/ipv4-header.h',
+        'model/ipv4-queue-disc-item.h',
+        'model/ipv4-packet-filter.h',
         'model/ipv4-route.h',
         'model/ipv4-routing-protocol.h',
         'model/udp-socket.h',
@@ -293,6 +316,8 @@
         'model/ipv4-raw-socket-factory.h',
         'model/ipv4-raw-socket-impl.h',
         'model/ipv6-header.h',
+        'model/ipv6-queue-disc-item.h',
+        'model/ipv6-packet-filter.h',
         'model/ipv6-interface-address.h',
         'model/ipv6-route.h',
         'model/ipv6.h',
@@ -312,7 +337,6 @@
         'model/global-route-manager.h',
         'model/global-route-manager-impl.h',
         'model/candidate-queue.h',
-        'model/codel-queue.h',
         'model/ipv4-global-routing.h',
         'helper/ipv4-global-routing-helper.h',
         'helper/internet-stack-helper.h',
@@ -324,10 +348,9 @@
         'helper/ipv6-interface-container.h',
         'helper/ipv6-routing-helper.h',
         'model/ipv6-address-generator.h',
-        'model/tcp-rfc793.h',        
-        'model/tcp-tahoe.h',
-        'model/tcp-reno.h',
-        'model/tcp-newreno.h',
+        'model/tcp-highspeed.h',
+        'model/tcp-hybla.h',
+        'model/tcp-congestion-ops.h',
         'model/tcp-westwood.h',
         'model/tcp-socket-base.h',
         'model/tcp-tx-buffer.h',
@@ -339,6 +362,9 @@
         'model/ripng.h',
         'model/ripng-header.h',
         'helper/ripng-helper.h',
+        'model/rip.h',
+        'model/rip-header.h',
+        'helper/rip-helper.h',
        ]
 
     if bld.env['NSC_ENABLED']:
diff -Naur ns-3.24.1/src/internet-apps/bindings/callbacks_list.py ns-3.25/src/internet-apps/bindings/callbacks_list.py
--- ns-3.24.1/src/internet-apps/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,9 @@
+callback_classes = [
+    ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+]
diff -Naur ns-3.24.1/src/internet-apps/bindings/modulegen__gcc_ILP32.py ns-3.25/src/internet-apps/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/internet-apps/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,5343 @@
+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.internet_apps', cpp_namespace='::ns3')
+    return root_module
+
+def register_types(module):
+    root_module = module.get_root()
+    
+    ## address.h (module 'network'): ns3::Address [class]
+    module.add_class('Address', import_from_module='ns.network')
+    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
+    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## application-container.h (module 'network'): ns3::ApplicationContainer [class]
+    module.add_class('ApplicationContainer', 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'])
+    ## average.h (module 'stats'): ns3::Average<double> [class]
+    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
+    ## callback.h (module 'core'): ns3::CallbackBase [class]
+    module.add_class('CallbackBase', import_from_module='ns.core')
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
+    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
+    ## 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]
+    module.add_class('Inet6SocketAddress', import_from_module='ns.network')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    root_module['ns3::Inet6SocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    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'])
+    ## 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')
+    ## 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')
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper [class]
+    module.add_class('Ping6Helper')
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper [class]
+    module.add_class('RadvdHelper')
+    ## 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')
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
+    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
+    ## 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'])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper [class]
+    module.add_class('V4PingHelper')
+    ## 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')
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
+    module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
+    module.add_class('SequentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdInterface', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdInterface>'], 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::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdPrefix', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdPrefix>'], 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'))
+    ## socket.h (module 'network'): ns3::Socket [class]
+    module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+    module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+    module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::SocketAddressTag [class]
+    module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
+    module.add_class('SocketIpTosTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
+    module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag [class]
+    module.add_class('SocketIpv6HopLimitTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
+    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', ['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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
+    module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
+    module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
+    module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
+    module.add_class('ZipfRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## application.h (module 'network'): ns3::Application [class]
+    module.add_class('Application', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
+    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
+    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
+    module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
+    module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
+    module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
+    module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
+    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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
+    ## 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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## node.h (module 'network'): ns3::Node [class]
+    module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ping6.h (module 'internet-apps'): ns3::Ping6 [class]
+    module.add_class('Ping6', parent=root_module['ns3::Application'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    ## radvd.h (module 'internet-apps'): ns3::Radvd [class]
+    module.add_class('Radvd', parent=root_module['ns3::Application'])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface [class]
+    module.add_class('RadvdInterface', parent=root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix [class]
+    module.add_class('RadvdPrefix', parent=root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    ## 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'])
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping [class]
+    module.add_class('V4Ping', parent=root_module['ns3::Application'])
+    ## 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'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type=u'list')
+    
+    ## 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)
+    
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+
+def register_types_ns3_FatalImpl(module):
+    root_module = module.get_root()
+    
+
+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_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
+def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
+    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3Average__Double_methods(root_module, root_module['ns3::Average< double >'])
+    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
+    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_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_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_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
+    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
+    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_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
+    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_Ns3V4PingHelper_methods(root_module, root_module['ns3::V4PingHelper'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    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'])
+    register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
+    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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
+    register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
+    register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+    register_Ns3SocketIpTosTag_methods(root_module, root_module['ns3::SocketIpTosTag'])
+    register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+    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_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
+    register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
+    register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    register_Ns3Application_methods(root_module, root_module['ns3::Application'])
+    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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
+    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_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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
+    register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
+    register_Ns3Node_methods(root_module, root_module['ns3::Node'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
+    register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
+    register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
+    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_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    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_Ns3ApplicationContainer_methods(root_module, cls):
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::ApplicationContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationContainer const &', 'arg0')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer() [constructor]
+    cls.add_constructor([])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::Ptr<ns3::Application> application) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(std::string name) [constructor]
+    cls.add_constructor([param('std::string', 'name')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::ApplicationContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ApplicationContainer', 'other')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name')])
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): ns3::Ptr<ns3::Application> ns3::ApplicationContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## application-container.h (module 'network'): uint32_t ns3::ApplicationContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Start(ns3::Time start) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Stop(ns3::Time stop) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    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_Ns3Average__Double_methods(root_module, cls):
+    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
+    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
+    cls.add_constructor([])
+    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
+    cls.add_method('Avg', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
+    cls.add_method('Count', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
+    cls.add_method('Error90', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
+    cls.add_method('Error95', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
+    cls.add_method('Error99', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
+    cls.add_method('Max', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
+    cls.add_method('Mean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
+    cls.add_method('Min', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
+    cls.add_method('Stddev', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('double const &', 'x')])
+    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
+    cls.add_method('Var', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    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')
+    return
+
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
+    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_Ns3Inet6SocketAddress_methods(root_module, cls):
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): static ns3::Inet6SocketAddress ns3::Inet6SocketAddress::ConvertFrom(ns3::Address const & addr) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Inet6SocketAddress', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): ns3::Ipv6Address ns3::Inet6SocketAddress::GetIpv6() const [member function]
+    cls.add_method('GetIpv6', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): uint16_t ns3::Inet6SocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): static bool ns3::Inet6SocketAddress::IsMatchingType(ns3::Address const & addr) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetIpv6(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3InetSocketAddress_methods(root_module, cls):
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::InetSocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InetSocketAddress const &', 'arg0')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): static ns3::InetSocketAddress ns3::InetSocketAddress::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::InetSocketAddress', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): ns3::Ipv4Address ns3::InetSocketAddress::GetIpv4() const [member function]
+    cls.add_method('GetIpv4', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): uint16_t ns3::InetSocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): static bool ns3::InetSocketAddress::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetIpv4(ns3::Ipv4Address address) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    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::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=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'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
+                   [], 
+                   deprecated=True, 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_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 & value) const [member function]
+    cls.add_method('GetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
+                   is_const=True)
+    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   '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_Ns3Ping6Helper_methods(root_module, cls):
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper::Ping6Helper(ns3::Ping6Helper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ping6Helper const &', 'arg0')])
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper::Ping6Helper() [constructor]
+    cls.add_constructor([])
+    ## ping6-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::Ping6Helper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetIfIndex(uint32_t ifIndex) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t', 'ifIndex')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetLocal(ns3::Ipv6Address ip) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ip')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetRemote(ns3::Ipv6Address ip) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ip')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetRoutersAddress(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
+    cls.add_method('SetRoutersAddress', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
+    return
+
+def register_Ns3RadvdHelper_methods(root_module, cls):
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper::RadvdHelper() [constructor]
+    cls.add_constructor([])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
+    cls.add_method('AddAnnouncedPrefix', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::ClearPrefixes() [member function]
+    cls.add_method('ClearPrefixes', 
+                   'void', 
+                   [])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('DisableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('EnableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
+    cls.add_method('GetRadvdInterface', 
+                   'ns3::Ptr< ns3::RadvdInterface >', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    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 & delay) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'delay')], 
+                   is_static=True)
+    return
+
+def register_Ns3StatisticalSummary_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=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')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [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'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
+    cls.add_method('GetTraceSource', 
+                   'ns3::TypeId::TraceSourceInformation', 
+                   [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'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
+    ## 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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    return
+
+def register_Ns3V4PingHelper_methods(root_module, cls):
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper::V4PingHelper(ns3::V4PingHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::V4PingHelper const &', 'arg0')])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper::V4PingHelper(ns3::Ipv4Address remote) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'remote')])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::NodeContainer nodes) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'nodes')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('std::string', 'nodeName')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): void ns3::V4PingHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    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_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_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3SequentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable::SequentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): ns3::Ptr<ns3::RandomVariableStream> ns3::SequentialRandomVariable::GetIncrement() const [member function]
+    cls.add_method('GetIncrement', 
+                   'ns3::Ptr< ns3::RandomVariableStream >', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetConsecutive() const [member function]
+    cls.add_method('GetConsecutive', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter< ns3::RadvdInterface > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter< ns3::RadvdPrefix > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::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_Ns3Socket_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::Socket::Socket() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind6() [member function]
+    cls.add_method('Bind6', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+    cls.add_method('BindToNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+    cls.add_method('Close', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+    cls.add_method('Connect', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+    cls.add_method('CreateSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+    cls.add_method('GetAllowBroadcast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+    cls.add_method('GetBoundNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+    cls.add_method('GetErrno', 
+                   'ns3::Socket::SocketErrno', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTos() const [member function]
+    cls.add_method('GetIpTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6HopLimit() const [member function]
+    cls.add_method('GetIpv6HopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6Tclass() const [member function]
+    cls.add_method('GetIpv6Tclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+    cls.add_method('GetRxAvailable', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+    cls.add_method('GetSockName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+    cls.add_method('GetSocketType', 
+                   'ns3::Socket::SocketType', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+    cls.add_method('GetTxAvailable', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::Socket::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+    cls.add_method('IsRecvPktInfo', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+    cls.add_method('Listen', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [])
+    ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+    ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+    cls.add_method('SetAcceptCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+    ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+    cls.add_method('SetAllowBroadcast', 
+                   'bool', 
+                   [param('bool', 'allowBroadcast')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+    cls.add_method('SetCloseCallbacks', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+    ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+    cls.add_method('SetConnectCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+    ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+    cls.add_method('SetDataSentCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTos(bool ipv4RecvTos) [member function]
+    cls.add_method('SetIpRecvTos', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTtl(bool ipv4RecvTtl) [member function]
+    cls.add_method('SetIpRecvTtl', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTtl')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTos(uint8_t ipTos) [member function]
+    cls.add_method('SetIpTos', 
+                   'void', 
+                   [param('uint8_t', 'ipTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTtl(uint8_t ipTtl) [member function]
+    cls.add_method('SetIpTtl', 
+                   'void', 
+                   [param('uint8_t', 'ipTtl')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6HopLimit(uint8_t ipHopLimit) [member function]
+    cls.add_method('SetIpv6HopLimit', 
+                   'void', 
+                   [param('uint8_t', 'ipHopLimit')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvHopLimit(bool ipv6RecvHopLimit) [member function]
+    cls.add_method('SetIpv6RecvHopLimit', 
+                   'void', 
+                   [param('bool', 'ipv6RecvHopLimit')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvTclass(bool ipv6RecvTclass) [member function]
+    cls.add_method('SetIpv6RecvTclass', 
+                   'void', 
+                   [param('bool', 'ipv6RecvTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6Tclass(int ipTclass) [member function]
+    cls.add_method('SetIpv6Tclass', 
+                   'void', 
+                   [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
+    cls.add_method('SetRecvCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+    cls.add_method('SetRecvPktInfo', 
+                   'void', 
+                   [param('bool', 'flag')])
+    ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+    cls.add_method('SetSendCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'sendCb')])
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+    cls.add_method('ShutdownRecv', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+    cls.add_method('ShutdownSend', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+    cls.add_method('NotifyConnectionFailed', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+    cls.add_method('NotifyConnectionRequest', 
+                   'bool', 
+                   [param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+    cls.add_method('NotifyConnectionSucceeded', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+    cls.add_method('NotifyDataRecv', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+    cls.add_method('NotifyDataSent', 
+                   'void', 
+                   [param('uint32_t', 'size')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+    cls.add_method('NotifyErrorClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+    cls.add_method('NotifyNewConnectionCreated', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+    cls.add_method('NotifyNormalClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+    cls.add_method('NotifySend', 
+                   'void', 
+                   [param('uint32_t', 'spaceAvailable')], 
+                   visibility='protected')
+    return
+
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
+    return
+
+def register_Ns3SocketIpTosTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag(ns3::SocketIpTosTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTosTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTosTag::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTosTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    return
+
+def register_Ns3SocketIpTtlTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    return
+
+def register_Ns3SocketIpv6HopLimitTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag(ns3::SocketIpv6HopLimitTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6HopLimitTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6HopLimitTag::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6HopLimitTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    return
+
+def register_Ns3SocketIpv6TclassTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag(ns3::SocketIpv6TclassTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6TclassTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6TclassTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6TclassTag::GetTclass() const [member function]
+    cls.add_method('GetTclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6TclassTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::SetTclass(uint8_t tclass) [member function]
+    cls.add_method('SetTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    return
+
+def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   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('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(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
+    cls.add_constructor([param('std::string const &', 's')])
+    ## nstime.h (module 'core'): ns3::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 & 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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   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 unit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   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_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable::TriangularRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue(double mean, double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger(uint32_t mean, uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3UniformRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable::UniformRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue(double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger(uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ZetaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZetaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable::ZetaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue(double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger(uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ZipfRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZipfRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable::ZipfRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue(uint32_t n, double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'n'), param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger(uint32_t n, uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3Application_methods(root_module, cls):
+    ## application.h (module 'network'): ns3::Application::Application(ns3::Application const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Application const &', 'arg0')])
+    ## application.h (module 'network'): ns3::Application::Application() [constructor]
+    cls.add_constructor([])
+    ## application.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Application::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True)
+    ## application.h (module 'network'): static ns3::TypeId ns3::Application::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## application.h (module 'network'): void ns3::Application::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## application.h (module 'network'): void ns3::Application::SetStartTime(ns3::Time start) [member function]
+    cls.add_method('SetStartTime', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application.h (module 'network'): void ns3::Application::SetStopTime(ns3::Time stop) [member function]
+    cls.add_method('SetStopTime', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    ## application.h (module 'network'): void ns3::Application::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', 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'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
+    return
+
+def register_Ns3CallbackValue_methods(root_module, cls):
+    ## 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_Ns3ConstantRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable::ConstantRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetConstant() const [member function]
+    cls.add_method('GetConstant', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue(double constant) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'constant')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger(uint32_t constant) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'constant')])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3DataCalculator_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
+    cls.add_method('GetEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
+    cls.add_method('GetKey', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
+    cls.add_method('SetContext', 
+                   'void', 
+                   [param('std::string const', 'context')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
+    cls.add_method('SetKey', 
+                   'void', 
+                   [param('std::string const', 'key')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time const &', 'startTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'stopTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DataOutputInterface_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
+    cls.add_method('GetFilePrefix', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataCollector &', 'dc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
+    cls.add_method('SetFilePrefix', 
+                   'void', 
+                   [param('std::string const', 'prefix')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::DeterministicRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable::DeterministicRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::DeterministicRandomVariable::SetValueArray(double * values, uint64_t length) [member function]
+    cls.add_method('SetValueArray', 
+                   'void', 
+                   [param('double *', 'values'), param('uint64_t', 'length')])
+    ## random-variable-stream.h (module 'core'): double ns3::DeterministicRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::CDF(double v, double c) [member function]
+    cls.add_method('CDF', 
+                   'void', 
+                   [param('double', 'v'), param('double', 'c')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::EmpiricalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::EmpiricalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
+    cls.add_method('Interpolate', 
+                   'double', 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
+                   visibility='private', is_virtual=True)
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
+    cls.add_method('Validate', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    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_Ns3ErlangRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable::ErlangRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetK() const [member function]
+    cls.add_method('GetK', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue(uint32_t k, double lambda) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'k'), param('double', 'lambda')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger(uint32_t k, uint32_t lambda) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'k'), param('uint32_t', 'lambda')])
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ExponentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ExponentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable::ExponentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue(double mean, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger(uint32_t mean, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3GammaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::GammaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable::GammaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue(double alpha, double beta) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha'), param('double', 'beta')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger(uint32_t alpha, uint32_t beta) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha'), param('uint32_t', 'beta')])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3LogNormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable::LogNormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetMu() const [member function]
+    cls.add_method('GetMu', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetSigma() const [member function]
+    cls.add_method('GetSigma', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue(double mu, double sigma) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mu'), param('double', 'sigma')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger(uint32_t mu, uint32_t sigma) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mu'), param('uint32_t', 'sigma')])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('double const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    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<const ns3::Packet>,short unsigned int,const ns3::Address&,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 >, short unsigned int, 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_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   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_Ns3NormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::INFINITE_VALUE [variable]
+    cls.add_static_attribute('INFINITE_VALUE', 'double const', is_const=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::NormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::NormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetVariance() const [member function]
+    cls.add_method('GetVariance', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue(double mean, double variance, double bound=ns3::NormalRandomVariable::INFINITE_VALUE) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'variance'), param('double', 'bound', default_value='ns3::NormalRandomVariable::INFINITE_VALUE')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger(uint32_t mean, uint32_t variance, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'variance'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable::ParetoRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue(double mean, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger(uint32_t mean, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3Ping6_methods(root_module, cls):
+    ## ping6.h (module 'internet-apps'): ns3::Ping6::Ping6(ns3::Ping6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ping6 const &', 'arg0')])
+    ## ping6.h (module 'internet-apps'): ns3::Ping6::Ping6() [constructor]
+    cls.add_constructor([])
+    ## ping6.h (module 'internet-apps'): static ns3::TypeId ns3::Ping6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetIfIndex(uint32_t ifIndex) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t', 'ifIndex')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetLocal(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetRemote(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetRouters(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
+    cls.add_method('SetRouters', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Radvd_methods(root_module, cls):
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::Radvd() [constructor]
+    cls.add_constructor([])
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::AddConfiguration(ns3::Ptr<ns3::RadvdInterface> routerInterface) [member function]
+    cls.add_method('AddConfiguration', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::RadvdInterface >', 'routerInterface')])
+    ## radvd.h (module 'internet-apps'): int64_t ns3::Radvd::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## radvd.h (module 'internet-apps'): static ns3::TypeId ns3::Radvd::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
+    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
+    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3RadvdInterface_methods(root_module, cls):
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(ns3::RadvdInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdInterface const &', 'arg0')])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(uint32_t interface) [constructor]
+    cls.add_constructor([param('uint32_t', 'interface')])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval) [constructor]
+    cls.add_constructor([param('uint32_t', 'interface'), param('uint32_t', 'maxRtrAdvInterval'), param('uint32_t', 'minRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::AddPrefix(ns3::Ptr<ns3::RadvdPrefix> routerPrefix) [member function]
+    cls.add_method('AddPrefix', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::RadvdPrefix >', 'routerPrefix')])
+    ## radvd-interface.h (module 'internet-apps'): uint8_t ns3::RadvdInterface::GetCurHopLimit() const [member function]
+    cls.add_method('GetCurHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetDefaultLifeTime() const [member function]
+    cls.add_method('GetDefaultLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint8_t ns3::RadvdInterface::GetDefaultPreference() const [member function]
+    cls.add_method('GetDefaultPreference', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetHomeAgentLifeTime() const [member function]
+    cls.add_method('GetHomeAgentLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetHomeAgentPreference() const [member function]
+    cls.add_method('GetHomeAgentPreference', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetInterface() const [member function]
+    cls.add_method('GetInterface', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
+    cls.add_method('GetLastRaTxTime', 
+                   'ns3::Time', 
+                   [])
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
+    cls.add_method('GetLinkMtu', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMaxRtrAdvInterval() const [member function]
+    cls.add_method('GetMaxRtrAdvInterval', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMinDelayBetweenRAs() const [member function]
+    cls.add_method('GetMinDelayBetweenRAs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMinRtrAdvInterval() const [member function]
+    cls.add_method('GetMinRtrAdvInterval', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): std::list<ns3::Ptr<ns3::RadvdPrefix>, std::allocator<ns3::Ptr<ns3::RadvdPrefix> > > ns3::RadvdInterface::GetPrefixes() const [member function]
+    cls.add_method('GetPrefixes', 
+                   'std::list< ns3::Ptr< ns3::RadvdPrefix > >', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetReachableTime() const [member function]
+    cls.add_method('GetReachableTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetRetransTimer() const [member function]
+    cls.add_method('GetRetransTimer', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsHomeAgentFlag() const [member function]
+    cls.add_method('IsHomeAgentFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsHomeAgentInfo() const [member function]
+    cls.add_method('IsHomeAgentInfo', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
+    cls.add_method('IsInitialRtrAdv', 
+                   'bool', 
+                   [])
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
+    cls.add_method('IsIntervalOpt', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsManagedFlag() const [member function]
+    cls.add_method('IsManagedFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsMobRtrSupportFlag() const [member function]
+    cls.add_method('IsMobRtrSupportFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsOtherConfigFlag() const [member function]
+    cls.add_method('IsOtherConfigFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsSendAdvert() const [member function]
+    cls.add_method('IsSendAdvert', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsSourceLLAddress() const [member function]
+    cls.add_method('IsSourceLLAddress', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetCurHopLimit(uint8_t curHopLimit) [member function]
+    cls.add_method('SetCurHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'curHopLimit')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetDefaultLifeTime(uint32_t defaultLifeTime) [member function]
+    cls.add_method('SetDefaultLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'defaultLifeTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetDefaultPreference(uint8_t defaultPreference) [member function]
+    cls.add_method('SetDefaultPreference', 
+                   'void', 
+                   [param('uint8_t', 'defaultPreference')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentFlag(bool homeAgentFlag) [member function]
+    cls.add_method('SetHomeAgentFlag', 
+                   'void', 
+                   [param('bool', 'homeAgentFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentInfo(bool homeAgentFlag) [member function]
+    cls.add_method('SetHomeAgentInfo', 
+                   'void', 
+                   [param('bool', 'homeAgentFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentLifeTime(uint32_t homeAgentLifeTime) [member function]
+    cls.add_method('SetHomeAgentLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'homeAgentLifeTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentPreference(uint32_t homeAgentPreference) [member function]
+    cls.add_method('SetHomeAgentPreference', 
+                   'void', 
+                   [param('uint32_t', 'homeAgentPreference')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetIntervalOpt(bool intervalOpt) [member function]
+    cls.add_method('SetIntervalOpt', 
+                   'void', 
+                   [param('bool', 'intervalOpt')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
+    cls.add_method('SetLastRaTxTime', 
+                   'void', 
+                   [param('ns3::Time', 'now')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
+    cls.add_method('SetLinkMtu', 
+                   'void', 
+                   [param('uint32_t', 'linkMtu')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetManagedFlag(bool managedFlag) [member function]
+    cls.add_method('SetManagedFlag', 
+                   'void', 
+                   [param('bool', 'managedFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMaxRtrAdvInterval(uint32_t maxRtrAdvInterval) [member function]
+    cls.add_method('SetMaxRtrAdvInterval', 
+                   'void', 
+                   [param('uint32_t', 'maxRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMinDelayBetweenRAs(uint32_t minDelayBetweenRAs) [member function]
+    cls.add_method('SetMinDelayBetweenRAs', 
+                   'void', 
+                   [param('uint32_t', 'minDelayBetweenRAs')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMinRtrAdvInterval(uint32_t minRtrAdvInterval) [member function]
+    cls.add_method('SetMinRtrAdvInterval', 
+                   'void', 
+                   [param('uint32_t', 'minRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMobRtrSupportFlag(bool mobRtrSupportFlag) [member function]
+    cls.add_method('SetMobRtrSupportFlag', 
+                   'void', 
+                   [param('bool', 'mobRtrSupportFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetOtherConfigFlag(bool otherConfigFlag) [member function]
+    cls.add_method('SetOtherConfigFlag', 
+                   'void', 
+                   [param('bool', 'otherConfigFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetReachableTime(uint32_t reachableTime) [member function]
+    cls.add_method('SetReachableTime', 
+                   'void', 
+                   [param('uint32_t', 'reachableTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetRetransTimer(uint32_t retransTimer) [member function]
+    cls.add_method('SetRetransTimer', 
+                   'void', 
+                   [param('uint32_t', 'retransTimer')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetSendAdvert(bool sendAdvert) [member function]
+    cls.add_method('SetSendAdvert', 
+                   'void', 
+                   [param('bool', 'sendAdvert')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetSourceLLAddress(bool sourceLLAddress) [member function]
+    cls.add_method('SetSourceLLAddress', 
+                   'void', 
+                   [param('bool', 'sourceLLAddress')])
+    return
+
+def register_Ns3RadvdPrefix_methods(root_module, cls):
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix::RadvdPrefix(ns3::RadvdPrefix const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdPrefix const &', 'arg0')])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix::RadvdPrefix(ns3::Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime=604800, uint32_t validLifeTime=2592000, bool onLinkFlag=true, bool autonomousFlag=true, bool routerAddrFlag=false) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('uint8_t', 'prefixLength'), param('uint32_t', 'preferredLifeTime', default_value='604800'), param('uint32_t', 'validLifeTime', default_value='2592000'), param('bool', 'onLinkFlag', default_value='true'), param('bool', 'autonomousFlag', default_value='true'), param('bool', 'routerAddrFlag', default_value='false')])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::Ipv6Address ns3::RadvdPrefix::GetNetwork() const [member function]
+    cls.add_method('GetNetwork', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint32_t ns3::RadvdPrefix::GetPreferredLifeTime() const [member function]
+    cls.add_method('GetPreferredLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint8_t ns3::RadvdPrefix::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint32_t ns3::RadvdPrefix::GetValidLifeTime() const [member function]
+    cls.add_method('GetValidLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsAutonomousFlag() const [member function]
+    cls.add_method('IsAutonomousFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsOnLinkFlag() const [member function]
+    cls.add_method('IsOnLinkFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsRouterAddrFlag() const [member function]
+    cls.add_method('IsRouterAddrFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetAutonomousFlag(bool autonomousFlag) [member function]
+    cls.add_method('SetAutonomousFlag', 
+                   'void', 
+                   [param('bool', 'autonomousFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetNetwork(ns3::Ipv6Address network) [member function]
+    cls.add_method('SetNetwork', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'network')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetOnLinkFlag(bool onLinkFlag) [member function]
+    cls.add_method('SetOnLinkFlag', 
+                   'void', 
+                   [param('bool', 'onLinkFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetPreferredLifeTime(uint32_t preferredLifeTime) [member function]
+    cls.add_method('SetPreferredLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'preferredLifeTime')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetPrefixLength(uint8_t prefixLength) [member function]
+    cls.add_method('SetPrefixLength', 
+                   'void', 
+                   [param('uint8_t', 'prefixLength')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetRouterAddrFlag(bool routerAddrFlag) [member function]
+    cls.add_method('SetRouterAddrFlag', 
+                   'void', 
+                   [param('bool', 'routerAddrFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetValidLifeTime(uint32_t validLifeTime) [member function]
+    cls.add_method('SetValidLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'validLifeTime')])
+    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_Ns3V4Ping_methods(root_module, cls):
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping::V4Ping() [constructor]
+    cls.add_constructor([])
+    ## v4ping.h (module 'internet-apps'): static ns3::TypeId ns3::V4Ping::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3AddressChecker_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3AddressValue_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Address const &', 'value')])
+    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Address const &', 'value')])
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## 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)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), 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 register_functions_ns3_TracedValueCallback(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.24.1/src/internet-apps/bindings/modulegen__gcc_LP64.py ns-3.25/src/internet-apps/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/internet-apps/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,5343 @@
+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.internet_apps', cpp_namespace='::ns3')
+    return root_module
+
+def register_types(module):
+    root_module = module.get_root()
+    
+    ## address.h (module 'network'): ns3::Address [class]
+    module.add_class('Address', import_from_module='ns.network')
+    ## address.h (module 'network'): ns3::Address::MaxSize_e [enumeration]
+    module.add_enum('MaxSize_e', ['MAX_SIZE'], outer_class=root_module['ns3::Address'], import_from_module='ns.network')
+    ## application-container.h (module 'network'): ns3::ApplicationContainer [class]
+    module.add_class('ApplicationContainer', 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'])
+    ## average.h (module 'stats'): ns3::Average<double> [class]
+    module.add_class('Average', import_from_module='ns.stats', template_parameters=['double'])
+    ## callback.h (module 'core'): ns3::CallbackBase [class]
+    module.add_class('CallbackBase', import_from_module='ns.core')
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback [class]
+    module.add_class('DataOutputCallback', allow_subclassing=True, import_from_module='ns.stats')
+    ## 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]
+    module.add_class('Inet6SocketAddress', import_from_module='ns.network')
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress [class]
+    root_module['ns3::Inet6SocketAddress'].implicitly_converts_to(root_module['ns3::Address'])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress [class]
+    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'])
+    ## 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')
+    ## 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')
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper [class]
+    module.add_class('Ping6Helper')
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper [class]
+    module.add_class('RadvdHelper')
+    ## 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')
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary [class]
+    module.add_class('StatisticalSummary', allow_subclassing=True, import_from_module='ns.stats')
+    ## 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'])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper [class]
+    module.add_class('V4PingHelper')
+    ## 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')
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream [class]
+    module.add_class('RandomVariableStream', import_from_module='ns.core', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable [class]
+    module.add_class('SequentialRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdInterface', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdInterface>'], 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::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::RadvdPrefix', 'ns3::empty', 'ns3::DefaultDeleter<ns3::RadvdPrefix>'], 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'))
+    ## socket.h (module 'network'): ns3::Socket [class]
+    module.add_class('Socket', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno [enumeration]
+    module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
+    module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::SocketAddressTag [class]
+    module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
+    module.add_class('SocketIpTosTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag [class]
+    module.add_class('SocketIpTtlTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag [class]
+    module.add_class('SocketIpv6HopLimitTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag [class]
+    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', ['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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable [class]
+    module.add_class('TriangularRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable [class]
+    module.add_class('UniformRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
+    module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable [class]
+    module.add_class('ZetaRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable [class]
+    module.add_class('ZipfRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## application.h (module 'network'): ns3::Application [class]
+    module.add_class('Application', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator [class]
+    module.add_class('DataCalculator', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface [class]
+    module.add_class('DataOutputInterface', import_from_module='ns.stats', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable [class]
+    module.add_class('DeterministicRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable [class]
+    module.add_class('EmpiricalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
+    module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable [class]
+    module.add_class('ErlangRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
+    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'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable [class]
+    module.add_class('LogNormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double> [class]
+    module.add_class('MinMaxAvgTotalCalculator', import_from_module='ns.stats', template_parameters=['double'], parent=[root_module['ns3::DataCalculator'], root_module['ns3::StatisticalSummary']])
+    ## 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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## node.h (module 'network'): ns3::Node [class]
+    module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
+    module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## 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'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## ping6.h (module 'internet-apps'): ns3::Ping6 [class]
+    module.add_class('Ping6', parent=root_module['ns3::Application'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    ## radvd.h (module 'internet-apps'): ns3::Radvd [class]
+    module.add_class('Radvd', parent=root_module['ns3::Application'])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface [class]
+    module.add_class('RadvdInterface', parent=root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix [class]
+    module.add_class('RadvdPrefix', parent=root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    ## 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'])
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping [class]
+    module.add_class('V4Ping', parent=root_module['ns3::Application'])
+    ## 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'])
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::list< ns3::Ptr< ns3::RadvdPrefix > >', 'ns3::Ptr< ns3::RadvdPrefix >', container_type=u'list')
+    
+    ## 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)
+    
+    
+    ## Register a nested module for the namespace TracedValueCallback
+    
+    nested_module = module.add_cpp_namespace('TracedValueCallback')
+    register_types_ns3_TracedValueCallback(nested_module)
+    
+
+def register_types_ns3_FatalImpl(module):
+    root_module = module.get_root()
+    
+
+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_types_ns3_TracedValueCallback(module):
+    root_module = module.get_root()
+    
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+
+def register_methods(root_module):
+    register_Ns3Address_methods(root_module, root_module['ns3::Address'])
+    register_Ns3ApplicationContainer_methods(root_module, root_module['ns3::ApplicationContainer'])
+    register_Ns3AttributeConstructionList_methods(root_module, root_module['ns3::AttributeConstructionList'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3Average__Double_methods(root_module, root_module['ns3::Average< double >'])
+    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3DataOutputCallback_methods(root_module, root_module['ns3::DataOutputCallback'])
+    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_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_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_Ns3Ping6Helper_methods(root_module, root_module['ns3::Ping6Helper'])
+    register_Ns3RadvdHelper_methods(root_module, root_module['ns3::RadvdHelper'])
+    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_Ns3StatisticalSummary_methods(root_module, root_module['ns3::StatisticalSummary'])
+    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_Ns3V4PingHelper_methods(root_module, root_module['ns3::V4PingHelper'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    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'])
+    register_Ns3SequentialRandomVariable_methods(root_module, root_module['ns3::SequentialRandomVariable'])
+    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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
+    register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >'])
+    register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >'])
+    register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3Socket_methods(root_module, root_module['ns3::Socket'])
+    register_Ns3SocketAddressTag_methods(root_module, root_module['ns3::SocketAddressTag'])
+    register_Ns3SocketIpTosTag_methods(root_module, root_module['ns3::SocketIpTosTag'])
+    register_Ns3SocketIpTtlTag_methods(root_module, root_module['ns3::SocketIpTtlTag'])
+    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_Ns3TriangularRandomVariable_methods(root_module, root_module['ns3::TriangularRandomVariable'])
+    register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
+    register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
+    register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
+    register_Ns3Application_methods(root_module, root_module['ns3::Application'])
+    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_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    register_Ns3DataCalculator_methods(root_module, root_module['ns3::DataCalculator'])
+    register_Ns3DataOutputInterface_methods(root_module, root_module['ns3::DataOutputInterface'])
+    register_Ns3DeterministicRandomVariable_methods(root_module, root_module['ns3::DeterministicRandomVariable'])
+    register_Ns3EmpiricalRandomVariable_methods(root_module, root_module['ns3::EmpiricalRandomVariable'])
+    register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
+    register_Ns3ErlangRandomVariable_methods(root_module, root_module['ns3::ErlangRandomVariable'])
+    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_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_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
+    register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, root_module['ns3::MinMaxAvgTotalCalculator< double >'])
+    register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
+    register_Ns3Node_methods(root_module, root_module['ns3::Node'])
+    register_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3Ping6_methods(root_module, root_module['ns3::Ping6'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3Radvd_methods(root_module, root_module['ns3::Radvd'])
+    register_Ns3RadvdInterface_methods(root_module, root_module['ns3::RadvdInterface'])
+    register_Ns3RadvdPrefix_methods(root_module, root_module['ns3::RadvdPrefix'])
+    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_Ns3V4Ping_methods(root_module, root_module['ns3::V4Ping'])
+    register_Ns3AddressChecker_methods(root_module, root_module['ns3::AddressChecker'])
+    register_Ns3AddressValue_methods(root_module, root_module['ns3::AddressValue'])
+    register_Ns3HashImplementation_methods(root_module, root_module['ns3::Hash::Implementation'])
+    register_Ns3HashFunctionFnv1a_methods(root_module, root_module['ns3::Hash::Function::Fnv1a'])
+    register_Ns3HashFunctionHash32_methods(root_module, root_module['ns3::Hash::Function::Hash32'])
+    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_Ns3ApplicationContainer_methods(root_module, cls):
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::ApplicationContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ApplicationContainer const &', 'arg0')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer() [constructor]
+    cls.add_constructor([])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(ns3::Ptr<ns3::Application> application) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): ns3::ApplicationContainer::ApplicationContainer(std::string name) [constructor]
+    cls.add_constructor([param('std::string', 'name')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::ApplicationContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ApplicationContainer', 'other')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Add(std::string name) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name')])
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::Application>*,std::vector<ns3::Ptr<ns3::Application>, std::allocator<ns3::Ptr<ns3::Application> > > > ns3::ApplicationContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): ns3::Ptr<ns3::Application> ns3::ApplicationContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## application-container.h (module 'network'): uint32_t ns3::ApplicationContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Start(ns3::Time start) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application-container.h (module 'network'): void ns3::ApplicationContainer::Stop(ns3::Time stop) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    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_Ns3Average__Double_methods(root_module, cls):
+    ## average.h (module 'stats'): ns3::Average<double>::Average(ns3::Average<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Average< double > const &', 'arg0')])
+    ## average.h (module 'stats'): ns3::Average<double>::Average() [constructor]
+    cls.add_constructor([])
+    ## average.h (module 'stats'): double ns3::Average<double>::Avg() const [member function]
+    cls.add_method('Avg', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): uint32_t ns3::Average<double>::Count() const [member function]
+    cls.add_method('Count', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error90() const [member function]
+    cls.add_method('Error90', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error95() const [member function]
+    cls.add_method('Error95', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Error99() const [member function]
+    cls.add_method('Error99', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Max() const [member function]
+    cls.add_method('Max', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Mean() const [member function]
+    cls.add_method('Mean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): double ns3::Average<double>::Min() const [member function]
+    cls.add_method('Min', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): void ns3::Average<double>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## average.h (module 'stats'): double ns3::Average<double>::Stddev() const [member function]
+    cls.add_method('Stddev', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## average.h (module 'stats'): void ns3::Average<double>::Update(double const & x) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('double const &', 'x')])
+    ## average.h (module 'stats'): double ns3::Average<double>::Var() const [member function]
+    cls.add_method('Var', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    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')
+    return
+
+def register_Ns3DataOutputCallback_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputCallback::DataOutputCallback(ns3::DataOutputCallback const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputCallback const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, int val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('int', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, uint32_t val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('uint32_t', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, double val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('double', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, std::string val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('std::string', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputSingleton(std::string key, std::string variable, ns3::Time val) [member function]
+    cls.add_method('OutputSingleton', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::Time', 'val')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputCallback::OutputStatistic(std::string key, std::string variable, ns3::StatisticalSummary const * statSum) [member function]
+    cls.add_method('OutputStatistic', 
+                   'void', 
+                   [param('std::string', 'key'), param('std::string', 'variable'), param('ns3::StatisticalSummary const *', 'statSum')], 
+                   is_pure_virtual=True, is_virtual=True)
+    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_Ns3Inet6SocketAddress_methods(root_module, cls):
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Inet6SocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Inet6SocketAddress const &', 'arg0')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(ns3::Ipv6Address ipv6) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6'), param('uint16_t', 'port')])
+    ## inet6-socket-address.h (module 'network'): ns3::Inet6SocketAddress::Inet6SocketAddress(char const * ipv6) [constructor]
+    cls.add_constructor([param('char const *', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): static ns3::Inet6SocketAddress ns3::Inet6SocketAddress::ConvertFrom(ns3::Address const & addr) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Inet6SocketAddress', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): ns3::Ipv6Address ns3::Inet6SocketAddress::GetIpv6() const [member function]
+    cls.add_method('GetIpv6', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): uint16_t ns3::Inet6SocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet6-socket-address.h (module 'network'): static bool ns3::Inet6SocketAddress::IsMatchingType(ns3::Address const & addr) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'addr')], 
+                   is_static=True)
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetIpv6(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetIpv6', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## inet6-socket-address.h (module 'network'): void ns3::Inet6SocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    return
+
+def register_Ns3InetSocketAddress_methods(root_module, cls):
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::InetSocketAddress const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::InetSocketAddress const &', 'arg0')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(ns3::Ipv4Address ipv4) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(uint16_t port) [constructor]
+    cls.add_constructor([param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4, uint16_t port) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4'), param('uint16_t', 'port')])
+    ## inet-socket-address.h (module 'network'): ns3::InetSocketAddress::InetSocketAddress(char const * ipv4) [constructor]
+    cls.add_constructor([param('char const *', 'ipv4')])
+    ## inet-socket-address.h (module 'network'): static ns3::InetSocketAddress ns3::InetSocketAddress::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::InetSocketAddress', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): ns3::Ipv4Address ns3::InetSocketAddress::GetIpv4() const [member function]
+    cls.add_method('GetIpv4', 
+                   'ns3::Ipv4Address', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): uint16_t ns3::InetSocketAddress::GetPort() const [member function]
+    cls.add_method('GetPort', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## inet-socket-address.h (module 'network'): static bool ns3::InetSocketAddress::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetIpv4(ns3::Ipv4Address address) [member function]
+    cls.add_method('SetIpv4', 
+                   'void', 
+                   [param('ns3::Ipv4Address', 'address')])
+    ## inet-socket-address.h (module 'network'): void ns3::InetSocketAddress::SetPort(uint16_t port) [member function]
+    cls.add_method('SetPort', 
+                   'void', 
+                   [param('uint16_t', 'port')])
+    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::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=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'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
+                   [], 
+                   deprecated=True, 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_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 & value) const [member function]
+    cls.add_method('GetAttributeFailSafe', 
+                   'bool', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue &', 'value')], 
+                   is_const=True)
+    ## object-base.h (module 'core'): ns3::TypeId ns3::ObjectBase::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   '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_Ns3Ping6Helper_methods(root_module, cls):
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper::Ping6Helper(ns3::Ping6Helper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ping6Helper const &', 'arg0')])
+    ## ping6-helper.h (module 'internet-apps'): ns3::Ping6Helper::Ping6Helper() [constructor]
+    cls.add_constructor([])
+    ## ping6-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::Ping6Helper::Install(ns3::NodeContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'c')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetIfIndex(uint32_t ifIndex) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t', 'ifIndex')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetLocal(ns3::Ipv6Address ip) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ip')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetRemote(ns3::Ipv6Address ip) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ip')])
+    ## ping6-helper.h (module 'internet-apps'): void ns3::Ping6Helper::SetRoutersAddress(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
+    cls.add_method('SetRoutersAddress', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
+    return
+
+def register_Ns3RadvdHelper_methods(root_module, cls):
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper::RadvdHelper(ns3::RadvdHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdHelper const &', 'arg0')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::RadvdHelper::RadvdHelper() [constructor]
+    cls.add_constructor([])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::AddAnnouncedPrefix(uint32_t interface, ns3::Ipv6Address prefix, uint32_t prefixLength) [member function]
+    cls.add_method('AddAnnouncedPrefix', 
+                   'void', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv6Address', 'prefix'), param('uint32_t', 'prefixLength')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::ClearPrefixes() [member function]
+    cls.add_method('ClearPrefixes', 
+                   'void', 
+                   [])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::DisableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('DisableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::EnableDefaultRouterForInterface(uint32_t interface) [member function]
+    cls.add_method('EnableDefaultRouterForInterface', 
+                   'void', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::Ptr<ns3::RadvdInterface> ns3::RadvdHelper::GetRadvdInterface(uint32_t interface) [member function]
+    cls.add_method('GetRadvdInterface', 
+                   'ns3::Ptr< ns3::RadvdInterface >', 
+                   [param('uint32_t', 'interface')])
+    ## radvd-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::RadvdHelper::Install(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## radvd-helper.h (module 'internet-apps'): void ns3::RadvdHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    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 & delay) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'delay')], 
+                   is_static=True)
+    return
+
+def register_Ns3StatisticalSummary_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): ns3::StatisticalSummary::StatisticalSummary(ns3::StatisticalSummary const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::StatisticalSummary const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): long int ns3::StatisticalSummary::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): double ns3::StatisticalSummary::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=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')], 
+                   deprecated=True)
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::AddTraceSource(std::string name, std::string help, ns3::Ptr<ns3::TraceSourceAccessor const> accessor, std::string callback) [member function]
+    cls.add_method('AddTraceSource', 
+                   'ns3::TypeId', 
+                   [param('std::string', 'name'), param('std::string', 'help'), param('ns3::Ptr< ns3::TraceSourceAccessor const >', 'accessor'), param('std::string', 'callback')])
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation ns3::TypeId::GetAttribute(uint32_t i) const [member function]
+    cls.add_method('GetAttribute', 
+                   'ns3::TypeId::AttributeInformation', 
+                   [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'): std::size_t ns3::TypeId::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'std::size_t', 
+                   [], 
+                   is_const=True)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation ns3::TypeId::GetTraceSource(uint32_t i) const [member function]
+    cls.add_method('GetTraceSource', 
+                   'ns3::TypeId::TraceSourceInformation', 
+                   [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'): ns3::TypeId ns3::TypeId::SetParent() [member function]
+    cls.add_method('SetParent', 
+                   'ns3::TypeId', 
+                   [], 
+                   template_parameters=['ns3::Object'])
+    ## type-id.h (module 'core'): ns3::TypeId ns3::TypeId::SetSize(std::size_t size) [member function]
+    cls.add_method('SetSize', 
+                   'ns3::TypeId', 
+                   [param('std::size_t', 'size')])
+    ## 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::callback [variable]
+    cls.add_instance_attribute('callback', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::help [variable]
+    cls.add_instance_attribute('help', 'std::string', is_const=False)
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    return
+
+def register_Ns3V4PingHelper_methods(root_module, cls):
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper::V4PingHelper(ns3::V4PingHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::V4PingHelper const &', 'arg0')])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::V4PingHelper::V4PingHelper(ns3::Ipv4Address remote) [constructor]
+    cls.add_constructor([param('ns3::Ipv4Address', 'remote')])
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::NodeContainer nodes) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::NodeContainer', 'nodes')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(ns3::Ptr<ns3::Node> node) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): ns3::ApplicationContainer ns3::V4PingHelper::Install(std::string nodeName) const [member function]
+    cls.add_method('Install', 
+                   'ns3::ApplicationContainer', 
+                   [param('std::string', 'nodeName')], 
+                   is_const=True)
+    ## v4ping-helper.h (module 'internet-apps'): void ns3::V4PingHelper::SetAttribute(std::string name, ns3::AttributeValue const & value) [member function]
+    cls.add_method('SetAttribute', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::AttributeValue const &', 'value')])
+    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_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_Ns3RandomVariableStream_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::RandomVariableStream::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::RandomVariableStream::RandomVariableStream() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetStream(int64_t stream) [member function]
+    cls.add_method('SetStream', 
+                   'void', 
+                   [param('int64_t', 'stream')])
+    ## random-variable-stream.h (module 'core'): int64_t ns3::RandomVariableStream::GetStream() const [member function]
+    cls.add_method('GetStream', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): void ns3::RandomVariableStream::SetAntithetic(bool isAntithetic) [member function]
+    cls.add_method('SetAntithetic', 
+                   'void', 
+                   [param('bool', 'isAntithetic')])
+    ## random-variable-stream.h (module 'core'): bool ns3::RandomVariableStream::IsAntithetic() const [member function]
+    cls.add_method('IsAntithetic', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::RandomVariableStream::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::RandomVariableStream::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## random-variable-stream.h (module 'core'): ns3::RngStream * ns3::RandomVariableStream::Peek() const [member function]
+    cls.add_method('Peek', 
+                   'ns3::RngStream *', 
+                   [], 
+                   is_const=True, visibility='protected')
+    return
+
+def register_Ns3SequentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::SequentialRandomVariable::SequentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): ns3::Ptr<ns3::RandomVariableStream> ns3::SequentialRandomVariable::GetIncrement() const [member function]
+    cls.add_method('GetIncrement', 
+                   'ns3::Ptr< ns3::RandomVariableStream >', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetConsecutive() const [member function]
+    cls.add_method('GetConsecutive', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::SequentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::SequentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3RadvdInterface_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdInterface__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter< ns3::RadvdInterface > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdInterface, ns3::empty, ns3::DefaultDeleter<ns3::RadvdInterface> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3RadvdPrefix_Ns3Empty_Ns3DefaultDeleter__lt__ns3RadvdPrefix__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::SimpleRefCount(ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter< ns3::RadvdPrefix > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::RadvdPrefix, ns3::empty, ns3::DefaultDeleter<ns3::RadvdPrefix> >::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_Ns3Socket_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::Socket::Socket(ns3::Socket const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Socket const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::Socket::Socket() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): int ns3::Socket::Bind(ns3::Address const & address) [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind() [member function]
+    cls.add_method('Bind', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Bind6() [member function]
+    cls.add_method('Bind6', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::BindToNetDevice(ns3::Ptr<ns3::NetDevice> netdevice) [member function]
+    cls.add_method('BindToNetDevice', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'netdevice')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Close() [member function]
+    cls.add_method('Close', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Connect(ns3::Address const & address) [member function]
+    cls.add_method('Connect', 
+                   'int', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::Ptr<ns3::Socket> ns3::Socket::CreateSocket(ns3::Ptr<ns3::Node> node, ns3::TypeId tid) [member function]
+    cls.add_method('CreateSocket', 
+                   'ns3::Ptr< ns3::Socket >', 
+                   [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::TypeId', 'tid')], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::Socket::GetAllowBroadcast() const [member function]
+    cls.add_method('GetAllowBroadcast', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Socket::GetBoundNetDevice() [member function]
+    cls.add_method('GetBoundNetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [])
+    ## socket.h (module 'network'): ns3::Socket::SocketErrno ns3::Socket::GetErrno() const [member function]
+    cls.add_method('GetErrno', 
+                   'ns3::Socket::SocketErrno', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTos() const [member function]
+    cls.add_method('GetIpTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpTtl() const [member function]
+    cls.add_method('GetIpTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6HopLimit() const [member function]
+    cls.add_method('GetIpv6HopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::Socket::GetIpv6Tclass() const [member function]
+    cls.add_method('GetIpv6Tclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Socket::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
+    cls.add_method('GetRxAvailable', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetSockName(ns3::Address & address) const [member function]
+    cls.add_method('GetSockName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Socket::SocketType ns3::Socket::GetSocketType() const [member function]
+    cls.add_method('GetSocketType', 
+                   'ns3::Socket::SocketType', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::Socket::GetTxAvailable() const [member function]
+    cls.add_method('GetTxAvailable', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::Socket::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
+    cls.add_method('IsIpRecvTos', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTtl() const [member function]
+    cls.add_method('IsIpRecvTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvHopLimit() const [member function]
+    cls.add_method('IsIpv6RecvHopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsIpv6RecvTclass() const [member function]
+    cls.add_method('IsIpv6RecvTclass', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsRecvPktInfo() const [member function]
+    cls.add_method('IsRecvPktInfo', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): int ns3::Socket::Listen() [member function]
+    cls.add_method('Listen', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv(uint32_t maxSize, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::Recv() [member function]
+    cls.add_method('Recv', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [])
+    ## socket.h (module 'network'): int ns3::Socket::Recv(uint8_t * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Recv', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(uint32_t maxSize, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'maxSize'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Socket::RecvFrom(ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::RecvFrom(uint8_t * buf, uint32_t size, uint32_t flags, ns3::Address & fromAddress) [member function]
+    cls.add_method('RecvFrom', 
+                   'int', 
+                   [param('uint8_t *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address &', 'fromAddress')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::Send(ns3::Ptr<ns3::Packet> p) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## socket.h (module 'network'): int ns3::Socket::Send(uint8_t const * buf, uint32_t size, uint32_t flags) [member function]
+    cls.add_method('Send', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags')])
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(ns3::Ptr<ns3::Packet> p, uint32_t flags, ns3::Address const & toAddress) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('ns3::Ptr< ns3::Packet >', 'p'), param('uint32_t', 'flags'), param('ns3::Address const &', 'toAddress')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::SendTo(uint8_t const * buf, uint32_t size, uint32_t flags, ns3::Address const & address) [member function]
+    cls.add_method('SendTo', 
+                   'int', 
+                   [param('uint8_t const *', 'buf'), param('uint32_t', 'size'), param('uint32_t', 'flags'), param('ns3::Address const &', 'address')])
+    ## socket.h (module 'network'): void ns3::Socket::SetAcceptCallback(ns3::Callback<bool, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionRequest, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> newConnectionCreated) [member function]
+    cls.add_method('SetAcceptCallback', 
+                   'void', 
+                   [param('ns3::Callback< bool, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionRequest'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'newConnectionCreated')])
+    ## socket.h (module 'network'): bool ns3::Socket::SetAllowBroadcast(bool allowBroadcast) [member function]
+    cls.add_method('SetAllowBroadcast', 
+                   'bool', 
+                   [param('bool', 'allowBroadcast')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetCloseCallbacks(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> normalClose, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> errorClose) [member function]
+    cls.add_method('SetCloseCallbacks', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'normalClose'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'errorClose')])
+    ## socket.h (module 'network'): void ns3::Socket::SetConnectCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionSucceeded, ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> connectionFailed) [member function]
+    cls.add_method('SetConnectCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionSucceeded'), param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'connectionFailed')])
+    ## socket.h (module 'network'): void ns3::Socket::SetDataSentCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> dataSent) [member function]
+    cls.add_method('SetDataSentCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'dataSent')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTos(bool ipv4RecvTos) [member function]
+    cls.add_method('SetIpRecvTos', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpRecvTtl(bool ipv4RecvTtl) [member function]
+    cls.add_method('SetIpRecvTtl', 
+                   'void', 
+                   [param('bool', 'ipv4RecvTtl')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTos(uint8_t ipTos) [member function]
+    cls.add_method('SetIpTos', 
+                   'void', 
+                   [param('uint8_t', 'ipTos')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpTtl(uint8_t ipTtl) [member function]
+    cls.add_method('SetIpTtl', 
+                   'void', 
+                   [param('uint8_t', 'ipTtl')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6HopLimit(uint8_t ipHopLimit) [member function]
+    cls.add_method('SetIpv6HopLimit', 
+                   'void', 
+                   [param('uint8_t', 'ipHopLimit')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvHopLimit(bool ipv6RecvHopLimit) [member function]
+    cls.add_method('SetIpv6RecvHopLimit', 
+                   'void', 
+                   [param('bool', 'ipv6RecvHopLimit')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6RecvTclass(bool ipv6RecvTclass) [member function]
+    cls.add_method('SetIpv6RecvTclass', 
+                   'void', 
+                   [param('bool', 'ipv6RecvTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetIpv6Tclass(int ipTclass) [member function]
+    cls.add_method('SetIpv6Tclass', 
+                   'void', 
+                   [param('int', 'ipTclass')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> arg0) [member function]
+    cls.add_method('SetRecvCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'arg0')])
+    ## socket.h (module 'network'): void ns3::Socket::SetRecvPktInfo(bool flag) [member function]
+    cls.add_method('SetRecvPktInfo', 
+                   'void', 
+                   [param('bool', 'flag')])
+    ## socket.h (module 'network'): void ns3::Socket::SetSendCallback(ns3::Callback<void, ns3::Ptr<ns3::Socket>, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> sendCb) [member function]
+    cls.add_method('SetSendCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Socket >, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'sendCb')])
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownRecv() [member function]
+    cls.add_method('ShutdownRecv', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::ShutdownSend() [member function]
+    cls.add_method('ShutdownSend', 
+                   'int', 
+                   [], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTos() const [member function]
+    cls.add_method('IsManualIpTos', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpTtl() const [member function]
+    cls.add_method('IsManualIpTtl', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6HopLimit() const [member function]
+    cls.add_method('IsManualIpv6HopLimit', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::IsManualIpv6Tclass() const [member function]
+    cls.add_method('IsManualIpv6Tclass', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionFailed() [member function]
+    cls.add_method('NotifyConnectionFailed', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): bool ns3::Socket::NotifyConnectionRequest(ns3::Address const & from) [member function]
+    cls.add_method('NotifyConnectionRequest', 
+                   'bool', 
+                   [param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyConnectionSucceeded() [member function]
+    cls.add_method('NotifyConnectionSucceeded', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataRecv() [member function]
+    cls.add_method('NotifyDataRecv', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyDataSent(uint32_t size) [member function]
+    cls.add_method('NotifyDataSent', 
+                   'void', 
+                   [param('uint32_t', 'size')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyErrorClose() [member function]
+    cls.add_method('NotifyErrorClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNewConnectionCreated(ns3::Ptr<ns3::Socket> socket, ns3::Address const & from) [member function]
+    cls.add_method('NotifyNewConnectionCreated', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Socket >', 'socket'), param('ns3::Address const &', 'from')], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifyNormalClose() [member function]
+    cls.add_method('NotifyNormalClose', 
+                   'void', 
+                   [], 
+                   visibility='protected')
+    ## socket.h (module 'network'): void ns3::Socket::NotifySend(uint32_t spaceAvailable) [member function]
+    cls.add_method('NotifySend', 
+                   'void', 
+                   [param('uint32_t', 'spaceAvailable')], 
+                   visibility='protected')
+    return
+
+def register_Ns3SocketAddressTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag(ns3::SocketAddressTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketAddressTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketAddressTag::SocketAddressTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::Address ns3::SocketAddressTag::GetAddress() const [member function]
+    cls.add_method('GetAddress', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketAddressTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketAddressTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketAddressTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketAddressTag::SetAddress(ns3::Address addr) [member function]
+    cls.add_method('SetAddress', 
+                   'void', 
+                   [param('ns3::Address', 'addr')])
+    return
+
+def register_Ns3SocketIpTosTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag(ns3::SocketIpTosTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTosTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTosTag::SocketIpTosTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTosTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTosTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTosTag::GetTos() const [member function]
+    cls.add_method('GetTos', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTosTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTosTag::SetTos(uint8_t tos) [member function]
+    cls.add_method('SetTos', 
+                   'void', 
+                   [param('uint8_t', 'tos')])
+    return
+
+def register_Ns3SocketIpTtlTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag(ns3::SocketIpTtlTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpTtlTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpTtlTag::SocketIpTtlTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpTtlTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpTtlTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpTtlTag::GetTtl() const [member function]
+    cls.add_method('GetTtl', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpTtlTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpTtlTag::SetTtl(uint8_t ttl) [member function]
+    cls.add_method('SetTtl', 
+                   'void', 
+                   [param('uint8_t', 'ttl')])
+    return
+
+def register_Ns3SocketIpv6HopLimitTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag(ns3::SocketIpv6HopLimitTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6HopLimitTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6HopLimitTag::SocketIpv6HopLimitTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6HopLimitTag::GetHopLimit() const [member function]
+    cls.add_method('GetHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6HopLimitTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6HopLimitTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6HopLimitTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6HopLimitTag::SetHopLimit(uint8_t hopLimit) [member function]
+    cls.add_method('SetHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'hopLimit')])
+    return
+
+def register_Ns3SocketIpv6TclassTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag(ns3::SocketIpv6TclassTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketIpv6TclassTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketIpv6TclassTag::SocketIpv6TclassTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketIpv6TclassTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketIpv6TclassTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint8_t ns3::SocketIpv6TclassTag::GetTclass() const [member function]
+    cls.add_method('GetTclass', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketIpv6TclassTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketIpv6TclassTag::SetTclass(uint8_t tclass) [member function]
+    cls.add_method('SetTclass', 
+                   'void', 
+                   [param('uint8_t', 'tclass')])
+    return
+
+def register_Ns3SocketSetDontFragmentTag_methods(root_module, cls):
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag(ns3::SocketSetDontFragmentTag const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::SocketSetDontFragmentTag const &', 'arg0')])
+    ## socket.h (module 'network'): ns3::SocketSetDontFragmentTag::SocketSetDontFragmentTag() [constructor]
+    cls.add_constructor([])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Deserialize(ns3::TagBuffer i) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## socket.h (module 'network'): ns3::TypeId ns3::SocketSetDontFragmentTag::GetInstanceTypeId() const [member function]
+    cls.add_method('GetInstanceTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): uint32_t ns3::SocketSetDontFragmentTag::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): static ns3::TypeId ns3::SocketSetDontFragmentTag::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## socket.h (module 'network'): bool ns3::SocketSetDontFragmentTag::IsEnabled() const [member function]
+    cls.add_method('IsEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): void ns3::SocketSetDontFragmentTag::Serialize(ns3::TagBuffer i) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'i')], 
+                   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('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(ns3::int64x64_t const & v) [constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'v')])
+    ## nstime.h (module 'core'): ns3::Time::Time(std::string const & s) [constructor]
+    cls.add_constructor([param('std::string const &', 's')])
+    ## nstime.h (module 'core'): ns3::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 & 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::From(ns3::int64x64_t const & value, ns3::Time::Unit unit) [member function]
+    cls.add_method('From', 
+                   'ns3::Time', 
+                   [param('ns3::int64x64_t const &', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromDouble(double value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromDouble', 
+                   'ns3::Time', 
+                   [param('double', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   is_static=True)
+    ## nstime.h (module 'core'): static ns3::Time ns3::Time::FromInteger(uint64_t value, ns3::Time::Unit unit) [member function]
+    cls.add_method('FromInteger', 
+                   'ns3::Time', 
+                   [param('uint64_t', 'value'), param('ns3::Time::Unit', 'unit')], 
+                   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 unit) const [member function]
+    cls.add_method('To', 
+                   'ns3::int64x64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): double ns3::Time::ToDouble(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToDouble', 
+                   'double', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   is_const=True)
+    ## nstime.h (module 'core'): int64_t ns3::Time::ToInteger(ns3::Time::Unit unit) const [member function]
+    cls.add_method('ToInteger', 
+                   'int64_t', 
+                   [param('ns3::Time::Unit', 'unit')], 
+                   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_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::TriangularRandomVariable::TriangularRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue(double mean, double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger(uint32_t mean, uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::TriangularRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::TriangularRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3UniformRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::UniformRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::UniformRandomVariable::UniformRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMin() const [member function]
+    cls.add_method('GetMin', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetMax() const [member function]
+    cls.add_method('GetMax', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue(double min, double max) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'min'), param('double', 'max')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger(uint32_t min, uint32_t max) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'min'), param('uint32_t', 'max')])
+    ## random-variable-stream.h (module 'core'): double ns3::UniformRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::UniformRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3WeibullRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::WeibullRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable::WeibullRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetScale() const [member function]
+    cls.add_method('GetScale', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue(double scale, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'scale'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'scale'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::WeibullRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::WeibullRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ZetaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZetaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ZetaRandomVariable::ZetaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue(double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger(uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZetaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZetaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3ZipfRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ZipfRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ZipfRandomVariable::ZipfRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue(uint32_t n, double alpha) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'n'), param('double', 'alpha')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger(uint32_t n, uint32_t alpha) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'n'), param('uint32_t', 'alpha')])
+    ## random-variable-stream.h (module 'core'): double ns3::ZipfRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ZipfRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3Application_methods(root_module, cls):
+    ## application.h (module 'network'): ns3::Application::Application(ns3::Application const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Application const &', 'arg0')])
+    ## application.h (module 'network'): ns3::Application::Application() [constructor]
+    cls.add_constructor([])
+    ## application.h (module 'network'): ns3::Ptr<ns3::Node> ns3::Application::GetNode() const [member function]
+    cls.add_method('GetNode', 
+                   'ns3::Ptr< ns3::Node >', 
+                   [], 
+                   is_const=True)
+    ## application.h (module 'network'): static ns3::TypeId ns3::Application::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## application.h (module 'network'): void ns3::Application::SetNode(ns3::Ptr<ns3::Node> node) [member function]
+    cls.add_method('SetNode', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Node >', 'node')])
+    ## application.h (module 'network'): void ns3::Application::SetStartTime(ns3::Time start) [member function]
+    cls.add_method('SetStartTime', 
+                   'void', 
+                   [param('ns3::Time', 'start')])
+    ## application.h (module 'network'): void ns3::Application::SetStopTime(ns3::Time stop) [member function]
+    cls.add_method('SetStopTime', 
+                   'void', 
+                   [param('ns3::Time', 'stop')])
+    ## application.h (module 'network'): void ns3::Application::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## application.h (module 'network'): void ns3::Application::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', 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'): std::string ns3::CallbackImplBase::GetTypeid() const [member function]
+    cls.add_method('GetTypeid', 
+                   'std::string', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): bool ns3::CallbackImplBase::IsEqual(ns3::Ptr<ns3::CallbackImplBase const> other) const [member function]
+    cls.add_method('IsEqual', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::CallbackImplBase const >', 'other')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## callback.h (module 'core'): static std::string ns3::CallbackImplBase::Demangle(std::string const & mangled) [member function]
+    cls.add_method('Demangle', 
+                   'std::string', 
+                   [param('std::string const &', 'mangled')], 
+                   is_static=True, visibility='protected')
+    return
+
+def register_Ns3CallbackValue_methods(root_module, cls):
+    ## 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_Ns3ConstantRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ConstantRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable::ConstantRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetConstant() const [member function]
+    cls.add_method('GetConstant', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue(double constant) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'constant')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger(uint32_t constant) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'constant')])
+    ## random-variable-stream.h (module 'core'): double ns3::ConstantRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ConstantRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3DataCalculator_methods(root_module, cls):
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator(ns3::DataCalculator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataCalculator const &', 'arg0')])
+    ## data-calculator.h (module 'stats'): ns3::DataCalculator::DataCalculator() [constructor]
+    cls.add_constructor([])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Disable() [member function]
+    cls.add_method('Disable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [])
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetContext() const [member function]
+    cls.add_method('GetContext', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): bool ns3::DataCalculator::GetEnabled() const [member function]
+    cls.add_method('GetEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): std::string ns3::DataCalculator::GetKey() const [member function]
+    cls.add_method('GetKey', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-calculator.h (module 'stats'): static ns3::TypeId ns3::DataCalculator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetContext(std::string const context) [member function]
+    cls.add_method('SetContext', 
+                   'void', 
+                   [param('std::string const', 'context')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::SetKey(std::string const key) [member function]
+    cls.add_method('SetKey', 
+                   'void', 
+                   [param('std::string const', 'key')])
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Start(ns3::Time const & startTime) [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [param('ns3::Time const &', 'startTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::Stop(ns3::Time const & stopTime) [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [param('ns3::Time const &', 'stopTime')], 
+                   is_virtual=True)
+    ## data-calculator.h (module 'stats'): void ns3::DataCalculator::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DataOutputInterface_methods(root_module, cls):
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface(ns3::DataOutputInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataOutputInterface const &', 'arg0')])
+    ## data-output-interface.h (module 'stats'): ns3::DataOutputInterface::DataOutputInterface() [constructor]
+    cls.add_constructor([])
+    ## data-output-interface.h (module 'stats'): std::string ns3::DataOutputInterface::GetFilePrefix() const [member function]
+    cls.add_method('GetFilePrefix', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    ## data-output-interface.h (module 'stats'): static ns3::TypeId ns3::DataOutputInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::Output(ns3::DataCollector & dc) [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataCollector &', 'dc')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::SetFilePrefix(std::string const prefix) [member function]
+    cls.add_method('SetFilePrefix', 
+                   'void', 
+                   [param('std::string const', 'prefix')])
+    ## data-output-interface.h (module 'stats'): void ns3::DataOutputInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    return
+
+def register_Ns3DeterministicRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::DeterministicRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::DeterministicRandomVariable::DeterministicRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::DeterministicRandomVariable::SetValueArray(double * values, uint64_t length) [member function]
+    cls.add_method('SetValueArray', 
+                   'void', 
+                   [param('double *', 'values'), param('uint64_t', 'length')])
+    ## random-variable-stream.h (module 'core'): double ns3::DeterministicRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::DeterministicRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3EmpiricalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::EmpiricalRandomVariable::EmpiricalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::CDF(double v, double c) [member function]
+    cls.add_method('CDF', 
+                   'void', 
+                   [param('double', 'v'), param('double', 'c')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::EmpiricalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::EmpiricalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): double ns3::EmpiricalRandomVariable::Interpolate(double c1, double c2, double v1, double v2, double r) [member function]
+    cls.add_method('Interpolate', 
+                   'double', 
+                   [param('double', 'c1'), param('double', 'c2'), param('double', 'v1'), param('double', 'v2'), param('double', 'r')], 
+                   visibility='private', is_virtual=True)
+    ## random-variable-stream.h (module 'core'): void ns3::EmpiricalRandomVariable::Validate() [member function]
+    cls.add_method('Validate', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    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_Ns3ErlangRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ErlangRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ErlangRandomVariable::ErlangRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetK() const [member function]
+    cls.add_method('GetK', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetLambda() const [member function]
+    cls.add_method('GetLambda', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue(uint32_t k, double lambda) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('uint32_t', 'k'), param('double', 'lambda')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger(uint32_t k, uint32_t lambda) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'k'), param('uint32_t', 'lambda')])
+    ## random-variable-stream.h (module 'core'): double ns3::ErlangRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ErlangRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ExponentialRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ExponentialRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable::ExponentialRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue(double mean, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger(uint32_t mean, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ExponentialRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ExponentialRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3GammaRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::GammaRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::GammaRandomVariable::GammaRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetAlpha() const [member function]
+    cls.add_method('GetAlpha', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetBeta() const [member function]
+    cls.add_method('GetBeta', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue(double alpha, double beta) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'alpha'), param('double', 'beta')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger(uint32_t alpha, uint32_t beta) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'alpha'), param('uint32_t', 'beta')])
+    ## random-variable-stream.h (module 'core'): double ns3::GammaRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::GammaRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3LogNormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::LogNormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::LogNormalRandomVariable::LogNormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetMu() const [member function]
+    cls.add_method('GetMu', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetSigma() const [member function]
+    cls.add_method('GetSigma', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue(double mu, double sigma) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mu'), param('double', 'sigma')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger(uint32_t mu, uint32_t sigma) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mu'), param('uint32_t', 'sigma')])
+    ## random-variable-stream.h (module 'core'): double ns3::LogNormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::LogNormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3MinMaxAvgTotalCalculator__Double_methods(root_module, cls):
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator(ns3::MinMaxAvgTotalCalculator<double> const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinMaxAvgTotalCalculator< double > const &', 'arg0')])
+    ## basic-data-calculators.h (module 'stats'): ns3::MinMaxAvgTotalCalculator<double>::MinMaxAvgTotalCalculator() [constructor]
+    cls.add_constructor([])
+    ## basic-data-calculators.h (module 'stats'): static ns3::TypeId ns3::MinMaxAvgTotalCalculator<double>::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Output(ns3::DataOutputCallback & callback) const [member function]
+    cls.add_method('Output', 
+                   'void', 
+                   [param('ns3::DataOutputCallback &', 'callback')], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Reset() [member function]
+    cls.add_method('Reset', 
+                   'void', 
+                   [])
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::Update(double const i) [member function]
+    cls.add_method('Update', 
+                   'void', 
+                   [param('double const', 'i')])
+    ## basic-data-calculators.h (module 'stats'): long int ns3::MinMaxAvgTotalCalculator<double>::getCount() const [member function]
+    cls.add_method('getCount', 
+                   'long int', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMax() const [member function]
+    cls.add_method('getMax', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMean() const [member function]
+    cls.add_method('getMean', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getMin() const [member function]
+    cls.add_method('getMin', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSqrSum() const [member function]
+    cls.add_method('getSqrSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getStddev() const [member function]
+    cls.add_method('getStddev', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getSum() const [member function]
+    cls.add_method('getSum', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): double ns3::MinMaxAvgTotalCalculator<double>::getVariance() const [member function]
+    cls.add_method('getVariance', 
+                   'double', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## basic-data-calculators.h (module 'stats'): void ns3::MinMaxAvgTotalCalculator<double>::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    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<const ns3::Packet>,short unsigned int,const ns3::Address&,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 >, short unsigned int, 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_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=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'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   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_Ns3NormalRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::INFINITE_VALUE [variable]
+    cls.add_static_attribute('INFINITE_VALUE', 'double const', is_const=True)
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::NormalRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable::NormalRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetVariance() const [member function]
+    cls.add_method('GetVariance', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue(double mean, double variance, double bound=ns3::NormalRandomVariable::INFINITE_VALUE) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'variance'), param('double', 'bound', default_value='ns3::NormalRandomVariable::INFINITE_VALUE')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger(uint32_t mean, uint32_t variance, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'variance'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::NormalRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::NormalRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   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_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable::ParetoRandomVariable() [constructor]
+    cls.add_constructor([])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetMean() const [member function]
+    cls.add_method('GetMean', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetShape() const [member function]
+    cls.add_method('GetShape', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetBound() const [member function]
+    cls.add_method('GetBound', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue(double mean, double shape, double bound) [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [param('double', 'mean'), param('double', 'shape'), param('double', 'bound')])
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger(uint32_t mean, uint32_t shape, uint32_t bound) [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [param('uint32_t', 'mean'), param('uint32_t', 'shape'), param('uint32_t', 'bound')])
+    ## random-variable-stream.h (module 'core'): double ns3::ParetoRandomVariable::GetValue() [member function]
+    cls.add_method('GetValue', 
+                   'double', 
+                   [], 
+                   is_virtual=True)
+    ## random-variable-stream.h (module 'core'): uint32_t ns3::ParetoRandomVariable::GetInteger() [member function]
+    cls.add_method('GetInteger', 
+                   'uint32_t', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3Ping6_methods(root_module, cls):
+    ## ping6.h (module 'internet-apps'): ns3::Ping6::Ping6(ns3::Ping6 const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Ping6 const &', 'arg0')])
+    ## ping6.h (module 'internet-apps'): ns3::Ping6::Ping6() [constructor]
+    cls.add_constructor([])
+    ## ping6.h (module 'internet-apps'): static ns3::TypeId ns3::Ping6::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetIfIndex(uint32_t ifIndex) [member function]
+    cls.add_method('SetIfIndex', 
+                   'void', 
+                   [param('uint32_t', 'ifIndex')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetLocal(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetLocal', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetRemote(ns3::Ipv6Address ipv6) [member function]
+    cls.add_method('SetRemote', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'ipv6')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::SetRouters(std::vector<ns3::Ipv6Address, std::allocator<ns3::Ipv6Address> > routers) [member function]
+    cls.add_method('SetRouters', 
+                   'void', 
+                   [param('std::vector< ns3::Ipv6Address >', 'routers')])
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ping6.h (module 'internet-apps'): void ns3::Ping6::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Radvd_methods(root_module, cls):
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::Radvd(ns3::Radvd const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Radvd const &', 'arg0')])
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::Radvd() [constructor]
+    cls.add_constructor([])
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::AddConfiguration(ns3::Ptr<ns3::RadvdInterface> routerInterface) [member function]
+    cls.add_method('AddConfiguration', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::RadvdInterface >', 'routerInterface')])
+    ## radvd.h (module 'internet-apps'): int64_t ns3::Radvd::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## radvd.h (module 'internet-apps'): static ns3::TypeId ns3::Radvd::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_INITIAL_RTR_ADVERTISEMENTS [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERTISEMENTS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_INITIAL_RTR_ADVERT_INTERVAL [variable]
+    cls.add_static_attribute('MAX_INITIAL_RTR_ADVERT_INTERVAL', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MAX_RA_DELAY_TIME [variable]
+    cls.add_static_attribute('MAX_RA_DELAY_TIME', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): ns3::Radvd::MIN_DELAY_BETWEEN_RAS [variable]
+    cls.add_static_attribute('MIN_DELAY_BETWEEN_RAS', 'uint32_t const', is_const=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## radvd.h (module 'internet-apps'): void ns3::Radvd::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3RadvdInterface_methods(root_module, cls):
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(ns3::RadvdInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdInterface const &', 'arg0')])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(uint32_t interface) [constructor]
+    cls.add_constructor([param('uint32_t', 'interface')])
+    ## radvd-interface.h (module 'internet-apps'): ns3::RadvdInterface::RadvdInterface(uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval) [constructor]
+    cls.add_constructor([param('uint32_t', 'interface'), param('uint32_t', 'maxRtrAdvInterval'), param('uint32_t', 'minRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::AddPrefix(ns3::Ptr<ns3::RadvdPrefix> routerPrefix) [member function]
+    cls.add_method('AddPrefix', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::RadvdPrefix >', 'routerPrefix')])
+    ## radvd-interface.h (module 'internet-apps'): uint8_t ns3::RadvdInterface::GetCurHopLimit() const [member function]
+    cls.add_method('GetCurHopLimit', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetDefaultLifeTime() const [member function]
+    cls.add_method('GetDefaultLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint8_t ns3::RadvdInterface::GetDefaultPreference() const [member function]
+    cls.add_method('GetDefaultPreference', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetHomeAgentLifeTime() const [member function]
+    cls.add_method('GetHomeAgentLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetHomeAgentPreference() const [member function]
+    cls.add_method('GetHomeAgentPreference', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetInterface() const [member function]
+    cls.add_method('GetInterface', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): ns3::Time ns3::RadvdInterface::GetLastRaTxTime() [member function]
+    cls.add_method('GetLastRaTxTime', 
+                   'ns3::Time', 
+                   [])
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetLinkMtu() const [member function]
+    cls.add_method('GetLinkMtu', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMaxRtrAdvInterval() const [member function]
+    cls.add_method('GetMaxRtrAdvInterval', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMinDelayBetweenRAs() const [member function]
+    cls.add_method('GetMinDelayBetweenRAs', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetMinRtrAdvInterval() const [member function]
+    cls.add_method('GetMinRtrAdvInterval', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): std::list<ns3::Ptr<ns3::RadvdPrefix>, std::allocator<ns3::Ptr<ns3::RadvdPrefix> > > ns3::RadvdInterface::GetPrefixes() const [member function]
+    cls.add_method('GetPrefixes', 
+                   'std::list< ns3::Ptr< ns3::RadvdPrefix > >', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetReachableTime() const [member function]
+    cls.add_method('GetReachableTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): uint32_t ns3::RadvdInterface::GetRetransTimer() const [member function]
+    cls.add_method('GetRetransTimer', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsHomeAgentFlag() const [member function]
+    cls.add_method('IsHomeAgentFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsHomeAgentInfo() const [member function]
+    cls.add_method('IsHomeAgentInfo', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsInitialRtrAdv() [member function]
+    cls.add_method('IsInitialRtrAdv', 
+                   'bool', 
+                   [])
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsIntervalOpt() const [member function]
+    cls.add_method('IsIntervalOpt', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsManagedFlag() const [member function]
+    cls.add_method('IsManagedFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsMobRtrSupportFlag() const [member function]
+    cls.add_method('IsMobRtrSupportFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsOtherConfigFlag() const [member function]
+    cls.add_method('IsOtherConfigFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsSendAdvert() const [member function]
+    cls.add_method('IsSendAdvert', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): bool ns3::RadvdInterface::IsSourceLLAddress() const [member function]
+    cls.add_method('IsSourceLLAddress', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetCurHopLimit(uint8_t curHopLimit) [member function]
+    cls.add_method('SetCurHopLimit', 
+                   'void', 
+                   [param('uint8_t', 'curHopLimit')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetDefaultLifeTime(uint32_t defaultLifeTime) [member function]
+    cls.add_method('SetDefaultLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'defaultLifeTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetDefaultPreference(uint8_t defaultPreference) [member function]
+    cls.add_method('SetDefaultPreference', 
+                   'void', 
+                   [param('uint8_t', 'defaultPreference')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentFlag(bool homeAgentFlag) [member function]
+    cls.add_method('SetHomeAgentFlag', 
+                   'void', 
+                   [param('bool', 'homeAgentFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentInfo(bool homeAgentFlag) [member function]
+    cls.add_method('SetHomeAgentInfo', 
+                   'void', 
+                   [param('bool', 'homeAgentFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentLifeTime(uint32_t homeAgentLifeTime) [member function]
+    cls.add_method('SetHomeAgentLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'homeAgentLifeTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetHomeAgentPreference(uint32_t homeAgentPreference) [member function]
+    cls.add_method('SetHomeAgentPreference', 
+                   'void', 
+                   [param('uint32_t', 'homeAgentPreference')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetIntervalOpt(bool intervalOpt) [member function]
+    cls.add_method('SetIntervalOpt', 
+                   'void', 
+                   [param('bool', 'intervalOpt')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetLastRaTxTime(ns3::Time now) [member function]
+    cls.add_method('SetLastRaTxTime', 
+                   'void', 
+                   [param('ns3::Time', 'now')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetLinkMtu(uint32_t linkMtu) [member function]
+    cls.add_method('SetLinkMtu', 
+                   'void', 
+                   [param('uint32_t', 'linkMtu')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetManagedFlag(bool managedFlag) [member function]
+    cls.add_method('SetManagedFlag', 
+                   'void', 
+                   [param('bool', 'managedFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMaxRtrAdvInterval(uint32_t maxRtrAdvInterval) [member function]
+    cls.add_method('SetMaxRtrAdvInterval', 
+                   'void', 
+                   [param('uint32_t', 'maxRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMinDelayBetweenRAs(uint32_t minDelayBetweenRAs) [member function]
+    cls.add_method('SetMinDelayBetweenRAs', 
+                   'void', 
+                   [param('uint32_t', 'minDelayBetweenRAs')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMinRtrAdvInterval(uint32_t minRtrAdvInterval) [member function]
+    cls.add_method('SetMinRtrAdvInterval', 
+                   'void', 
+                   [param('uint32_t', 'minRtrAdvInterval')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetMobRtrSupportFlag(bool mobRtrSupportFlag) [member function]
+    cls.add_method('SetMobRtrSupportFlag', 
+                   'void', 
+                   [param('bool', 'mobRtrSupportFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetOtherConfigFlag(bool otherConfigFlag) [member function]
+    cls.add_method('SetOtherConfigFlag', 
+                   'void', 
+                   [param('bool', 'otherConfigFlag')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetReachableTime(uint32_t reachableTime) [member function]
+    cls.add_method('SetReachableTime', 
+                   'void', 
+                   [param('uint32_t', 'reachableTime')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetRetransTimer(uint32_t retransTimer) [member function]
+    cls.add_method('SetRetransTimer', 
+                   'void', 
+                   [param('uint32_t', 'retransTimer')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetSendAdvert(bool sendAdvert) [member function]
+    cls.add_method('SetSendAdvert', 
+                   'void', 
+                   [param('bool', 'sendAdvert')])
+    ## radvd-interface.h (module 'internet-apps'): void ns3::RadvdInterface::SetSourceLLAddress(bool sourceLLAddress) [member function]
+    cls.add_method('SetSourceLLAddress', 
+                   'void', 
+                   [param('bool', 'sourceLLAddress')])
+    return
+
+def register_Ns3RadvdPrefix_methods(root_module, cls):
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix::RadvdPrefix(ns3::RadvdPrefix const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RadvdPrefix const &', 'arg0')])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::RadvdPrefix::RadvdPrefix(ns3::Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime=604800, uint32_t validLifeTime=2592000, bool onLinkFlag=true, bool autonomousFlag=true, bool routerAddrFlag=false) [constructor]
+    cls.add_constructor([param('ns3::Ipv6Address', 'network'), param('uint8_t', 'prefixLength'), param('uint32_t', 'preferredLifeTime', default_value='604800'), param('uint32_t', 'validLifeTime', default_value='2592000'), param('bool', 'onLinkFlag', default_value='true'), param('bool', 'autonomousFlag', default_value='true'), param('bool', 'routerAddrFlag', default_value='false')])
+    ## radvd-prefix.h (module 'internet-apps'): ns3::Ipv6Address ns3::RadvdPrefix::GetNetwork() const [member function]
+    cls.add_method('GetNetwork', 
+                   'ns3::Ipv6Address', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint32_t ns3::RadvdPrefix::GetPreferredLifeTime() const [member function]
+    cls.add_method('GetPreferredLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint8_t ns3::RadvdPrefix::GetPrefixLength() const [member function]
+    cls.add_method('GetPrefixLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): uint32_t ns3::RadvdPrefix::GetValidLifeTime() const [member function]
+    cls.add_method('GetValidLifeTime', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsAutonomousFlag() const [member function]
+    cls.add_method('IsAutonomousFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsOnLinkFlag() const [member function]
+    cls.add_method('IsOnLinkFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): bool ns3::RadvdPrefix::IsRouterAddrFlag() const [member function]
+    cls.add_method('IsRouterAddrFlag', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetAutonomousFlag(bool autonomousFlag) [member function]
+    cls.add_method('SetAutonomousFlag', 
+                   'void', 
+                   [param('bool', 'autonomousFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetNetwork(ns3::Ipv6Address network) [member function]
+    cls.add_method('SetNetwork', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'network')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetOnLinkFlag(bool onLinkFlag) [member function]
+    cls.add_method('SetOnLinkFlag', 
+                   'void', 
+                   [param('bool', 'onLinkFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetPreferredLifeTime(uint32_t preferredLifeTime) [member function]
+    cls.add_method('SetPreferredLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'preferredLifeTime')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetPrefixLength(uint8_t prefixLength) [member function]
+    cls.add_method('SetPrefixLength', 
+                   'void', 
+                   [param('uint8_t', 'prefixLength')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetRouterAddrFlag(bool routerAddrFlag) [member function]
+    cls.add_method('SetRouterAddrFlag', 
+                   'void', 
+                   [param('bool', 'routerAddrFlag')])
+    ## radvd-prefix.h (module 'internet-apps'): void ns3::RadvdPrefix::SetValidLifeTime(uint32_t validLifeTime) [member function]
+    cls.add_method('SetValidLifeTime', 
+                   'void', 
+                   [param('uint32_t', 'validLifeTime')])
+    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_Ns3V4Ping_methods(root_module, cls):
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping::V4Ping(ns3::V4Ping const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::V4Ping const &', 'arg0')])
+    ## v4ping.h (module 'internet-apps'): ns3::V4Ping::V4Ping() [constructor]
+    cls.add_constructor([])
+    ## v4ping.h (module 'internet-apps'): static ns3::TypeId ns3::V4Ping::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::StartApplication() [member function]
+    cls.add_method('StartApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## v4ping.h (module 'internet-apps'): void ns3::V4Ping::StopApplication() [member function]
+    cls.add_method('StopApplication', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3AddressChecker_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressChecker::AddressChecker(ns3::AddressChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressChecker const &', 'arg0')])
+    return
+
+def register_Ns3AddressValue_methods(root_module, cls):
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::AddressValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AddressValue const &', 'arg0')])
+    ## address.h (module 'network'): ns3::AddressValue::AddressValue(ns3::Address const & value) [constructor]
+    cls.add_constructor([param('ns3::Address const &', 'value')])
+    ## address.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::AddressValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): bool ns3::AddressValue::DeserializeFromString(std::string value, ns3::Ptr<ns3::AttributeChecker const> checker) [member function]
+    cls.add_method('DeserializeFromString', 
+                   'bool', 
+                   [param('std::string', 'value'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_virtual=True)
+    ## address.h (module 'network'): ns3::Address ns3::AddressValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Address', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): std::string ns3::AddressValue::SerializeToString(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('SerializeToString', 
+                   'std::string', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True, is_virtual=True)
+    ## address.h (module 'network'): void ns3::AddressValue::Set(ns3::Address const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::Address const &', 'value')])
+    return
+
+def register_Ns3HashImplementation_methods(root_module, cls):
+    ## hash-function.h (module 'core'): ns3::Hash::Implementation::Implementation(ns3::Hash::Implementation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Hash::Implementation const &', 'arg0')])
+    ## 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)
+    register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), 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 register_functions_ns3_TracedValueCallback(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.24.1/src/internet-apps/doc/internet-apps.h ns-3.25/src/internet-apps/doc/internet-apps.h
--- ns-3.24.1/src/internet-apps/doc/internet-apps.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/doc/internet-apps.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,44 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef INTERNET_APPS_H
+#define INTERNET_APPS_H
+
+/**
+ * \defgroup internet-apps Internet Applications
+ *
+ * This section documents the API of the ns-3 Internet-specific applications module. For a generic functional description, please refer to the ns-3 manual.
+ */
+
+#endif /* INTERNET_APPS_H */
diff -Naur ns-3.24.1/src/internet-apps/doc/internet-apps.rst ns-3.25/src/internet-apps/doc/internet-apps.rst
--- ns-3.24.1/src/internet-apps/doc/internet-apps.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/doc/internet-apps.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,63 @@
+Internet Applications Module Documentation
+------------------------------------------
+
+.. include:: replace.txt
+.. highlight:: cpp
+
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+The goal of this module is to hold all the Internet-specific applications,
+and most notably some very specific applications (e.g., ping) or daemons (e.g., radvd).  Other non-Internet-specific applications such as packet generators
+are contained in other modules.
+
+Model Description
+*****************
+
+The source code for the new module lives in the directory ``src/internet-apps``.
+
+Each application has its own goals, limitations and scope, which are briefly explained
+in the following.
+
+V4Ping
+======
+
+This app mimics a "ping" (ICMP Echo) using IPv4. The application allows the 
+following attributes to be set:
+
+* Remote address
+* Verbose mode
+* Packet size (default 56 bytes)
+* Packet interval  (default 1 second)
+
+Moreover, the user can access the measured rtt value (as a Traced Source).
+
+Ping6
+=====
+
+This app mimics a "ping" (ICMP Echo) using IPv6. The application allows the 
+following attributes to be set:
+
+* Remote address
+* Local address (sender address)
+* Packet size (default 56 bytes)
+* Packet interval  (default 1 second)
+* Max number of packets to send
+
+Radvd
+=====
+
+This app mimics a "RADVD" daemon. I.e., the daemon responsible for IPv6 routers 
+advertisements. All the IPv6 routers should have a RADVD daemon installed.
+
+The configuration of the Radvd application mimics the one of the radvd Linux program.
+
+Examples and use
+****************
+
+All the applications are extensively used in the top-level ``examples`` 
+directories. The users are encouraged to check the scripts therein to have a 
+clear overview of the various options and usage tricks.
diff -Naur ns-3.24.1/src/internet-apps/helper/ping6-helper.cc ns-3.25/src/internet-apps/helper/ping6-helper.cc
--- ns-3.24.1/src/internet-apps/helper/ping6-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/ping6-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,78 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008-2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#include "ping6-helper.h"
+#include "ns3/ping6.h"
+#include "ns3/uinteger.h"
+
+
+namespace ns3
+{
+
+Ping6Helper::Ping6Helper ()
+  : m_ifIndex (0)
+{
+  m_factory.SetTypeId (Ping6::GetTypeId ());
+}
+
+void Ping6Helper::SetLocal (Ipv6Address ip)
+{
+  m_localIp = ip;
+}
+
+void Ping6Helper::SetRemote (Ipv6Address ip)
+{
+  m_remoteIp = ip;
+}
+
+void Ping6Helper::SetAttribute (std::string name, const AttributeValue& value)
+{
+  m_factory.Set (name, value);
+}
+
+ApplicationContainer Ping6Helper::Install (NodeContainer c)
+{
+  ApplicationContainer apps;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      Ptr<Node> node = *i;
+      Ptr<Ping6> client = m_factory.Create<Ping6> ();
+      client->SetLocal (m_localIp);
+      client->SetRemote (m_remoteIp);
+      client->SetIfIndex (m_ifIndex);
+      client->SetRouters (m_routers);
+      node->AddApplication (client);
+      apps.Add (client);
+    }
+  return apps;
+}
+
+void Ping6Helper::SetIfIndex (uint32_t ifIndex)
+{
+  m_ifIndex = ifIndex;
+}
+
+void Ping6Helper::SetRoutersAddress (std::vector<Ipv6Address> routers)
+{
+  m_routers = routers;
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/helper/ping6-helper.h ns-3.25/src/internet-apps/helper/ping6-helper.h
--- ns-3.24.1/src/internet-apps/helper/ping6-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/ping6-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,118 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008-2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#ifndef PING6_HELPER_H
+#define PING6_HELPER_H
+
+#include <stdint.h>
+
+#include "ns3/object-factory.h"
+#include "ns3/ipv6-address.h"
+
+#include "ns3/application-container.h"
+#include "ns3/node-container.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup ping6
+ * \class Ping6Helper
+ * \brief Ping6 application helper.
+ */
+class Ping6Helper
+{
+public:
+  /**
+   * \brief Constructor.
+   */
+  Ping6Helper ();
+
+  /**
+   * \brief Set the local IPv6 address.
+   * \param ip local IPv6 address
+   */
+  void SetLocal (Ipv6Address ip);
+
+  /**
+   * \brief Set the remote IPv6 address.
+   * \param ip remote IPv6 address
+   */
+  void SetRemote (Ipv6Address ip);
+
+  /**
+   * \brief Set some attributes.
+   * \param name attribute name
+   * \param value attribute value
+   */
+  void SetAttribute (std::string name, const AttributeValue& value);
+
+  /**
+   * \brief Install the application in Nodes.
+   * \param c list of Nodes
+   * \return application container
+   */
+  ApplicationContainer Install (NodeContainer c);
+
+  /**
+   * \brief Set the out interface index.
+   * This is to send to link-local (unicast or multicast) address
+   * when a node has multiple interfaces.
+   * \param ifIndex interface index
+   */
+  void SetIfIndex (uint32_t ifIndex);
+
+
+  /**
+   * \brief Set routers addresses for routing type 0.
+   * \param routers routers addresses
+   */
+  void SetRoutersAddress (std::vector<Ipv6Address> routers);
+
+private:
+  /**
+   * \brief An object factory.
+   */
+  ObjectFactory m_factory;
+
+  /**
+   * \brief The local IPv6 address.
+   */
+  Ipv6Address m_localIp;
+
+  /**
+   * \brief The remote IPv6 address.
+   */
+  Ipv6Address m_remoteIp;
+
+  /**
+   * \brief Out interface index.
+   */
+  uint32_t m_ifIndex;
+
+  /**
+   * \brief Routers addresses.
+   */
+  std::vector<Ipv6Address> m_routers;
+};
+
+} /* namespace ns3 */
+
+#endif /* PING6_HELPER_H */
+
diff -Naur ns-3.24.1/src/internet-apps/helper/radvd-helper.cc ns-3.25/src/internet-apps/helper/radvd-helper.cc
--- ns-3.24.1/src/internet-apps/helper/radvd-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/radvd-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,128 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 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 "radvd-helper.h"
+#include "ns3/log.h"
+#include "ns3/assert.h"
+#include "ns3/radvd.h"
+#include "ns3/radvd-interface.h"
+#include "ns3/radvd-prefix.h"
+
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE ("RadvdHelper");
+
+RadvdHelper::RadvdHelper ()
+{
+  m_factory.SetTypeId (Radvd::GetTypeId ());
+}
+
+void RadvdHelper::AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength)
+{
+  NS_LOG_FUNCTION(this << int(interface) << prefix << int(prefixLength));
+  if (prefixLength != 64)
+    {
+      NS_LOG_WARN("Adding a non-64 prefix is generally a bad idea. Autoconfiguration might not work.");
+    }
+
+  bool prefixFound = false;
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  else
+    {
+      RadvdInterface::RadvdPrefixList prefixList = m_radvdInterfaces[interface]->GetPrefixes();
+      RadvdInterface::RadvdPrefixListCI iter;
+      for (iter=prefixList.begin(); iter!=prefixList.end(); iter++)
+        {
+          if ((*iter)->GetNetwork() == prefix)
+            {
+              NS_LOG_LOGIC("Not adding the same prefix twice, skipping " << prefix << " " << int(prefixLength));
+              prefixFound = true;
+              break;
+            }
+        }
+    }
+  if (!prefixFound)
+    {
+      Ptr<RadvdPrefix> routerPrefix = Create<RadvdPrefix> (prefix, prefixLength);
+      m_radvdInterfaces[interface]->AddPrefix(routerPrefix);
+    }
+}
+
+void RadvdHelper::EnableDefaultRouterForInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  uint32_t maxRtrAdvInterval = m_radvdInterfaces[interface]->GetMaxRtrAdvInterval();
+  m_radvdInterfaces[interface]->SetDefaultLifeTime(3*maxRtrAdvInterval/1000);
+}
+
+void RadvdHelper::DisableDefaultRouterForInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  m_radvdInterfaces[interface]->SetDefaultLifeTime(0);
+}
+
+Ptr<RadvdInterface> RadvdHelper::GetRadvdInterface (uint32_t interface)
+{
+  if (m_radvdInterfaces.find(interface) == m_radvdInterfaces.end())
+    {
+      m_radvdInterfaces[interface] = Create<RadvdInterface> (interface);
+    }
+  return m_radvdInterfaces[interface];
+}
+
+void RadvdHelper::ClearPrefixes()
+{
+  m_radvdInterfaces.clear();
+}
+
+void RadvdHelper::SetAttribute (std::string name, const AttributeValue& value)
+{
+  m_factory.Set (name, value);
+}
+
+ApplicationContainer RadvdHelper::Install (Ptr<Node> node)
+{
+  ApplicationContainer apps;
+  Ptr<Radvd> radvd = m_factory.Create<Radvd> ();
+  for (RadvdInterfaceMapI iter = m_radvdInterfaces.begin(); iter != m_radvdInterfaces.end(); iter ++)
+    {
+      if (!iter->second->GetPrefixes().empty())
+        {
+          radvd->AddConfiguration(iter->second);
+        }
+    }
+  node->AddApplication (radvd);
+  apps.Add (radvd);
+  return apps;
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/helper/radvd-helper.h ns-3.25/src/internet-apps/helper/radvd-helper.h
--- ns-3.24.1/src/internet-apps/helper/radvd-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/radvd-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,116 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2013 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>
+ */
+
+#ifndef RADVD_HELPER_H
+#define RADVD_HELPER_H
+
+#include <stdint.h>
+#include <list>
+#include <map>
+
+#include "ns3/object-factory.h"
+#include "ns3/ipv6-address.h"
+
+#include "ns3/application-container.h"
+#include "ns3/node-container.h"
+#include "ns3/radvd-interface.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup radvd
+ * \class RadvdHelper
+ * \brief Radvd application helper.
+ */
+class RadvdHelper
+{
+public:
+  /**
+   * \brief Constructor.
+   */
+  RadvdHelper ();
+
+  /**
+   * \brief Add a new prefix to be announced through an interface.
+   * \param interface outgoing interface
+   * \param prefix announced IPv6 prefix
+   * \param prefixLength announced IPv6 prefix length
+   */
+  void AddAnnouncedPrefix (uint32_t interface, Ipv6Address prefix, uint32_t prefixLength);
+
+  /**
+   * \brief Enable the router as default router for the interface.
+   * The effect is to set the Router Lifetime to the default value (30 minutes)
+   * \param interface outgoing interface
+   */
+  void EnableDefaultRouterForInterface (uint32_t interface);
+
+  /**
+   * \brief Disable the router as default router for the interface.
+   * The effect is to set the Router Lifetime to zero
+   * \param interface outgoing interface
+   */
+  void DisableDefaultRouterForInterface (uint32_t interface);
+
+  /**
+   * \brief Get the low-level RadvdInterface specification for an interface.
+   * This method is provided to enable fine-grain parameter setup.
+   * \param interface outgoing interface
+   * \returns the RadvdInterface
+   */
+  Ptr<RadvdInterface> GetRadvdInterface (uint32_t interface);
+
+  /**
+   * \brief Clear the stored Prefixes
+   */
+  void ClearPrefixes ();
+
+  /**
+   * \brief Set some attributes.
+   * \param name attribute name
+   * \param value attribute value
+   */
+  void SetAttribute (std::string name, const AttributeValue& value);
+
+  /**
+   * \brief Install the application in a Node.
+   * \param node the Node
+   * \return application container
+   */
+  ApplicationContainer Install (Ptr<Node> node);
+
+private:
+  /**
+   * \brief An object factory.
+   */
+  ObjectFactory m_factory;
+
+  /// Container: interface index, RadvdInterface
+  typedef std::map<uint32_t, Ptr<RadvdInterface> > RadvdInterfaceMap;
+  /// Container Iterator: interface index, RadvdInterface
+  typedef std::map<uint32_t, Ptr<RadvdInterface> >::iterator RadvdInterfaceMapI;
+
+  RadvdInterfaceMap m_radvdInterfaces; //!< RadvdInterface(s)
+};
+
+} /* namespace ns3 */
+
+#endif /* RADVD_HELPER_H */
+
diff -Naur ns-3.24.1/src/internet-apps/helper/v4ping-helper.cc ns-3.25/src/internet-apps/helper/v4ping-helper.cc
--- ns-3.24.1/src/internet-apps/helper/v4ping-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/v4ping-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,73 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#include "v4ping-helper.h"
+#include "ns3/v4ping.h"
+#include "ns3/names.h"
+
+namespace ns3 {
+
+V4PingHelper::V4PingHelper (Ipv4Address remote)
+{
+  m_factory.SetTypeId ("ns3::V4Ping");
+  m_factory.Set ("Remote", Ipv4AddressValue (remote));
+}
+
+void 
+V4PingHelper::SetAttribute (std::string name, const AttributeValue &value)
+{
+  m_factory.Set (name, value);
+}
+
+ApplicationContainer
+V4PingHelper::Install (Ptr<Node> node) const
+{
+  return ApplicationContainer (InstallPriv (node));
+}
+
+ApplicationContainer
+V4PingHelper::Install (std::string nodeName) const
+{
+  Ptr<Node> node = Names::Find<Node> (nodeName);
+  return ApplicationContainer (InstallPriv (node));
+}
+
+ApplicationContainer
+V4PingHelper::Install (NodeContainer c) const
+{
+  ApplicationContainer apps;
+  for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      apps.Add (InstallPriv (*i));
+    }
+
+  return apps;
+}
+
+Ptr<Application>
+V4PingHelper::InstallPriv (Ptr<Node> node) const
+{
+  Ptr<V4Ping> app = m_factory.Create<V4Ping> ();
+  node->AddApplication (app);
+
+  return app;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet-apps/helper/v4ping-helper.h ns-3.25/src/internet-apps/helper/v4ping-helper.h
--- ns-3.24.1/src/internet-apps/helper/v4ping-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/helper/v4ping-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,98 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 INRIA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ */
+
+#ifndef V4PING_HELPER_H
+#define V4PING_HELPER_H
+
+#include "ns3/node-container.h"
+#include "ns3/application-container.h"
+#include "ns3/object-factory.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup v4ping
+ * \brief Create a IPv5 ping application and associate it to a node
+ *
+ * This class creates one or multiple instances of ns3::V4Ping and associates
+ * it/them to one/multiple node(s).
+ */
+class V4PingHelper
+{
+public:
+  /**
+   * Create a V4PingHelper which is used to make life easier for people wanting
+   * to use ping Applications.
+   *
+   * \param remote The address which should be pinged
+   */
+  V4PingHelper (Ipv4Address remote);
+
+  /**
+   * Install a Ping application on each Node in the provided NodeContainer.
+   *
+   * \param nodes The NodeContainer containing all of the nodes to get a V4Ping
+   *              application.
+   *
+   * \returns A list of Ping applications, one for each input node
+   */
+  ApplicationContainer Install (NodeContainer nodes) const;
+
+  /**
+   * Install a Ping application on the provided Node.  The Node is specified
+   * directly by a Ptr<Node>
+   *
+   * \param node The node to install the V4PingApplication on.
+   *
+   * \returns An ApplicationContainer holding the Ping application created.
+   */
+  ApplicationContainer Install (Ptr<Node> node) const;
+
+  /**
+   * Install a Ping application on the provided Node.  The Node is specified
+   * by a string that must have previously been associated with a Node using the
+   * Object Name Service.
+   *
+   * \param nodeName The node to install the V4PingApplication on.
+   *
+   * \returns An ApplicationContainer holding the Ping application created.
+   */
+  ApplicationContainer Install (std::string nodeName) const;
+
+  /**
+   * \brief Configure ping applications attribute 
+   * \param name   attribute's name
+   * \param value  attribute's value
+   */
+  void SetAttribute (std::string name, const AttributeValue &value);
+private:
+  /**
+   * \brief Do the actual application installation in the node
+   * \param node the node
+   * \returns a Smart pointer to the installed application
+   */
+  Ptr<Application> InstallPriv (Ptr<Node> node) const;
+  /// Object factory
+  ObjectFactory m_factory;
+};
+
+} // namespace ns3
+
+#endif /* V4PING_HELPER_H */
diff -Naur ns-3.24.1/src/internet-apps/model/ping6.cc ns-3.25/src/internet-apps/model/ping6.cc
--- ns-3.24.1/src/internet-apps/model/ping6.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/ping6.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,293 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007-2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#include "ping6.h"
+#include "ns3/log.h"
+#include "ns3/nstime.h"
+#include "ns3/simulator.h"
+#include "ns3/socket-factory.h"
+#include "ns3/packet.h"
+#include "ns3/socket.h"
+#include "ns3/uinteger.h"
+#include "ns3/ipv6.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/inet6-socket-address.h"
+#include "ns3/icmpv6-header.h"
+#include "ns3/ipv6-raw-socket-factory.h"
+#include "ns3/ipv6-header.h"
+#include "ns3/ipv6-extension-header.h"
+
+
+namespace ns3 
+{
+
+NS_LOG_COMPONENT_DEFINE ("Ping6Application");
+
+NS_OBJECT_ENSURE_REGISTERED (Ping6);
+
+TypeId Ping6::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Ping6")
+    .SetParent<Application>()
+    .SetGroupName("Internet-Apps")
+    .AddConstructor<Ping6>()
+    .AddAttribute ("MaxPackets", 
+                   "The maximum number of packets the application will send",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&Ping6::m_count),
+                   MakeUintegerChecker<uint32_t>())
+    .AddAttribute ("Interval", 
+                   "The time to wait between packets",
+                   TimeValue (Seconds (1.0)),
+                   MakeTimeAccessor (&Ping6::m_interval),
+                   MakeTimeChecker ())
+    .AddAttribute ("RemoteIpv6", 
+                   "The Ipv6Address of the outbound packets",
+                   Ipv6AddressValue (),
+                   MakeIpv6AddressAccessor (&Ping6::m_peerAddress),
+                   MakeIpv6AddressChecker ())
+    .AddAttribute ("LocalIpv6", 
+                   "Local Ipv6Address of the sender",
+                   Ipv6AddressValue (),
+                   MakeIpv6AddressAccessor (&Ping6::m_localAddress),
+                   MakeIpv6AddressChecker ())
+    .AddAttribute ("PacketSize", 
+                   "Size of packets generated",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&Ping6::m_size),
+                   MakeUintegerChecker<uint32_t>())
+  ;
+  return tid;
+}
+
+Ping6::Ping6 ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  m_sent = 0;
+  m_socket = 0;
+  m_seq = 0;
+  m_sendEvent = EventId ();
+}
+
+Ping6::~Ping6 ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  m_socket = 0;
+}
+
+void Ping6::DoDispose ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  Application::DoDispose ();
+}
+
+void Ping6::StartApplication ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  if (!m_socket)
+    {
+      TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+      m_socket = Socket::CreateSocket (GetNode (), tid);
+
+      NS_ASSERT (m_socket);
+
+      m_socket->Bind (Inet6SocketAddress (m_localAddress, 0));
+      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+      m_socket->SetRecvCallback (MakeCallback (&Ping6::HandleRead, this));
+    }
+
+  ScheduleTransmit (Seconds (0.));
+}
+
+void Ping6::SetLocal (Ipv6Address ipv6) 
+{
+  NS_LOG_FUNCTION (this << ipv6);
+  m_localAddress = ipv6;
+}
+
+void Ping6::SetRemote (Ipv6Address ipv6)
+{
+  NS_LOG_FUNCTION (this << ipv6);
+  m_peerAddress = ipv6;
+}
+
+void Ping6::StopApplication ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+
+  if (m_socket)
+    {
+      m_socket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> >());
+    }
+
+  Simulator::Cancel (m_sendEvent);
+}
+
+void Ping6::SetIfIndex (uint32_t ifIndex)
+{
+  m_ifIndex = ifIndex;
+}
+
+void Ping6::ScheduleTransmit (Time dt)
+{
+  NS_LOG_FUNCTION (this << dt);
+  m_sendEvent = Simulator::Schedule (dt, &Ping6::Send, this);
+}
+
+void Ping6::SetRouters (std::vector<Ipv6Address> routers)
+{
+  m_routers = routers;
+}
+
+void Ping6::Send ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+  NS_ASSERT (m_sendEvent.IsExpired ());
+
+  Ipv6Address src;
+  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
+
+  if (m_ifIndex > 0)
+    {
+      /* hack to have ifIndex in Ipv6RawSocketImpl
+       * maybe add a SetIfIndex in Ipv6RawSocketImpl directly 
+       */
+      for (uint32_t i = 0; i < GetNode ()->GetObject<Ipv6> ()->GetNAddresses (m_ifIndex); i++)
+        {
+          Ipv6InterfaceAddress srcIa;
+          srcIa = GetNode ()->GetObject<Ipv6> ()->GetAddress (m_ifIndex, i);
+
+          if (srcIa.IsInSameSubnet (m_peerAddress))
+            {
+              src = srcIa.GetAddress ();
+              break;
+            }
+        }
+     }
+  else
+    {
+      src = m_localAddress;
+    }
+
+  uint32_t size = m_size;
+  if (m_size<4)
+    {
+      NS_LOG_WARN ("ICMPv6 echo request payload size must be >= 4");
+      size = 4;
+    }
+
+  uint8_t* data = new uint8_t[size];
+  memset(data, 0, size);
+  data[0] = 0xDE;
+  data[1] = 0xAD;
+  data[2] = 0xBE;
+  data[3] = 0xEF;
+
+  Ptr<Packet> p = Create<Packet> (data, size);
+  Icmpv6Echo req (1);
+
+  req.SetId (0xBEEF);
+  req.SetSeq (m_seq);
+  m_seq++;
+
+  /* we do not calculate pseudo header checksum here, because we are not sure about 
+   * source IPv6 address. Checksum is calculated in Ipv6RawSocketImpl.
+   */
+
+  p->AddHeader (req);
+  m_socket->Bind (Inet6SocketAddress (src, 0));
+
+  /* use Loose Routing (routing type 0) */
+  if (m_routers.size ())
+    {
+      Ipv6ExtensionLooseRoutingHeader routingHeader;
+      routingHeader.SetNextHeader (Ipv6Header::IPV6_ICMPV6);
+      routingHeader.SetTypeRouting (0);
+      routingHeader.SetSegmentsLeft (m_routers.size ());
+      routingHeader.SetRoutersAddress (m_routers);
+      p->AddHeader (routingHeader);
+      m_socket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_EXT_ROUTING));
+    }
+
+  m_socket->SendTo (p, 0, Inet6SocketAddress (m_peerAddress, 0));
+  ++m_sent;
+
+  NS_LOG_INFO ("Sent " << p->GetSize () << " bytes to " << m_peerAddress);
+
+  if (m_sent < m_count)
+    {
+      ScheduleTransmit (m_interval);
+    }
+
+  delete[] data;
+}
+
+void Ping6::HandleRead (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+
+  Ptr<Packet> packet=0;
+  Address from;
+  while ((packet = socket->RecvFrom (from)))
+    {
+      if (Inet6SocketAddress::IsMatchingType (from))
+        {
+          Ipv6Header hdr;
+          Icmpv6Echo reply (0);
+          Icmpv6DestinationUnreachable destUnreach;
+          Icmpv6TimeExceeded timeExceeded;
+          Inet6SocketAddress address = Inet6SocketAddress::ConvertFrom (from);
+
+          packet->RemoveHeader (hdr);
+
+          uint8_t type;
+          packet->CopyData (&type, sizeof(type));
+
+          switch (type)
+            {
+            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 () <<
+                           " 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:
+              break;
+            }
+        }
+    }
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/model/ping6.h ns-3.25/src/internet-apps/model/ping6.h
--- ns-3.24.1/src/internet-apps/model/ping6.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/ping6.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,188 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007-2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#ifndef PING6_H
+#define PING6_H
+
+#include "ns3/application.h"
+#include "ns3/event-id.h"
+#include "ns3/ptr.h"
+#include "ns3/ipv6-address.h"
+
+namespace ns3
+{
+
+class Packet;
+class Socket;
+
+/**
+ * \ingroup internet-apps
+ * \defgroup ping6 Ping6
+ */
+
+/**
+ * \ingroup ping6
+ * \class Ping6
+ * \brief A ping6 application.
+ */
+class Ping6 : public Application
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return type ID
+   */
+  static TypeId GetTypeId ();
+
+  /**
+   * \brief Constructor.
+   */
+  Ping6 ();
+
+  /**
+   * \brief Destructor.
+   */
+  virtual ~Ping6 ();
+
+  /**
+   * \brief Set the local address.
+   * \param ipv6 the local IPv6 address
+   */
+  void SetLocal (Ipv6Address ipv6);
+
+  /**
+   * \brief Set the remote peer.
+   * \param ipv6 IPv6 address of the peer
+   */
+  void SetRemote (Ipv6Address ipv6);
+
+  /**
+   * \brief Set the out interface index.
+   * This is to send to link-local (unicast or multicast) address
+   * when a node has multiple interfaces.
+   * \param ifIndex interface index
+   */
+  void SetIfIndex (uint32_t ifIndex);
+
+  /**
+   * \brief Set routers for routing type 0 (loose routing).
+   * \param routers routers addresses
+   */
+  void SetRouters (std::vector<Ipv6Address> routers);
+
+protected:
+  /**
+   * \brief Dispose this object;
+   */
+  virtual void DoDispose ();
+
+private:
+  /**
+   * \brief Start the application.
+   */
+  virtual void StartApplication ();
+
+  /**
+   * \brief Stop the application.
+   */
+  virtual void StopApplication ();
+
+  /**
+   * \brief Schedule sending a packet.
+   * \param dt interval between packet
+   */
+  void ScheduleTransmit (Time dt);
+
+  /**
+   * \brief Send a packet.
+   */
+  void Send ();
+
+  /**
+   * \brief Receive method.
+   * \param socket socket that receive a packet
+   */
+  void HandleRead (Ptr<Socket> socket);
+
+  /**
+   * \brief Peer IPv6 address.
+   */
+  Ipv6Address m_address;
+
+  /**
+   * \brief Number of "Echo request" packets that will be sent.
+   */
+  uint32_t m_count;
+
+  /**
+   * \brief Number of packets sent.
+   */
+  uint32_t m_sent;
+
+  /**
+   * \brief Size of the packet.
+   */
+  uint32_t m_size;
+
+  /**
+   * \brief Intervall between packets sent.
+   */
+  Time m_interval;
+
+  /**
+   * \brief Local address.
+   */
+  Ipv6Address m_localAddress;
+
+  /**
+   * \brief Peer address.
+   */
+  Ipv6Address m_peerAddress;
+
+  /**
+   * \brief Local socket.
+   */
+  Ptr<Socket> m_socket;
+
+  /**
+   * \brief Sequence number.
+   */
+  uint16_t m_seq;
+
+  /**
+   * \brief Event ID.
+   */
+  EventId m_sendEvent;
+
+  /**
+   * \brief Out interface (i.e. for link-local communication).
+   */
+  uint32_t m_ifIndex;
+
+  /**
+   * \brief Routers addresses for routing type 0.
+   */
+  std::vector<Ipv6Address> m_routers;
+};
+
+} /* namespace ns3 */
+
+#endif /* PING6_H */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd.cc ns-3.25/src/internet-apps/model/radvd.cc
--- ns-3.24.1/src/internet-apps/model/radvd.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,367 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 Telecom Bretagne
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
+ */
+
+#include "radvd.h"
+#include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/ipv6-address.h"
+#include "ns3/nstime.h"
+#include "ns3/simulator.h"
+#include "ns3/packet.h"
+#include "ns3/net-device.h"
+#include "ns3/uinteger.h"
+#include "ns3/inet6-socket-address.h"
+#include "ns3/ipv6.h"
+#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/ipv6-interface.h"
+#include "ns3/ipv6-raw-socket-factory.h"
+#include "ns3/ipv6-packet-info-tag.h"
+#include "ns3/ipv6-header.h"
+#include "ns3/icmpv6-header.h"
+#include "ns3/string.h"
+#include "ns3/pointer.h"
+
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE ("RadvdApplication");
+
+NS_OBJECT_ENSURE_REGISTERED (Radvd);
+
+TypeId Radvd::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::Radvd")
+    .SetParent<Application> ()
+    .SetGroupName("Internet-Apps")
+    .AddConstructor<Radvd> ()
+    .AddAttribute ("AdvertisementJitter",
+                   "Uniform variable to provide jitter between min and max values of AdvInterval",
+                   StringValue("ns3::UniformRandomVariable"),
+                   MakePointerAccessor (&Radvd::m_jitter),
+                   MakePointerChecker<UniformRandomVariable> ());
+  ;
+  return tid;
+}
+
+Radvd::Radvd ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Radvd::~Radvd ()
+{
+  NS_LOG_FUNCTION (this);
+  for (RadvdInterfaceListI it = m_configurations.begin (); it != m_configurations.end (); ++it)
+    {
+      *it = 0;
+    }
+  m_configurations.clear ();
+  m_recvSocket = 0;
+}
+
+void Radvd::DoDispose ()
+{
+  NS_LOG_FUNCTION (this);
+
+  m_recvSocket->Close ();
+  m_recvSocket = 0;
+
+  for (SocketMapI it = m_sendSockets.begin (); it != m_sendSockets.end (); ++it)
+    {
+      it->second->Close ();
+      it->second = 0;
+    }
+
+  Application::DoDispose ();
+}
+
+void Radvd::StartApplication ()
+{
+  NS_LOG_FUNCTION (this);
+
+  TypeId tid = TypeId::LookupByName ("ns3::Ipv6RawSocketFactory");
+
+  if (!m_recvSocket)
+    {
+      m_recvSocket = Socket::CreateSocket (GetNode (), tid);
+
+      NS_ASSERT (m_recvSocket);
+
+      m_recvSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAllRoutersMulticast (), 0));
+      m_recvSocket->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+      m_recvSocket->SetRecvCallback (MakeCallback (&Radvd::HandleRead, this));
+      m_recvSocket->ShutdownSend ();
+      m_recvSocket->SetRecvPktInfo (true);
+    }
+
+  for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
+    {
+      if ((*it)->IsSendAdvert ())
+        {
+          m_unsolicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (Seconds (0.), &Radvd::Send,
+                                                                               this, (*it), Ipv6Address::GetAllNodesMulticast (), true);
+        }
+
+      if (m_sendSockets.find ((*it)->GetInterface ()) == m_sendSockets.end ())
+        {
+          Ptr<Ipv6L3Protocol> ipv6 = GetNode ()->GetObject<Ipv6L3Protocol> ();
+          Ptr<Ipv6Interface> iFace = ipv6->GetInterface ((*it)->GetInterface ());
+
+          m_sendSockets[(*it)->GetInterface ()] = Socket::CreateSocket (GetNode (), tid);
+          m_sendSockets[(*it)->GetInterface ()]->Bind (Inet6SocketAddress (iFace->GetLinkLocalAddress ().GetAddress (), 0));
+          m_sendSockets[(*it)->GetInterface ()]->SetAttribute ("Protocol", UintegerValue (Ipv6Header::IPV6_ICMPV6));
+          m_sendSockets[(*it)->GetInterface ()]->ShutdownRecv ();
+        }
+    }
+}
+
+void Radvd::StopApplication ()
+{
+  NS_LOG_FUNCTION (this);
+
+  if (m_recvSocket)
+    {
+      m_recvSocket->SetRecvCallback (MakeNullCallback<void, Ptr<Socket> > ());
+    }
+
+  for (EventIdMapI it = m_unsolicitedEventIds.begin (); it != m_unsolicitedEventIds.end (); ++it)
+    {
+      Simulator::Cancel ((*it).second);
+    }
+  m_unsolicitedEventIds.clear ();
+
+  for (EventIdMapI it = m_solicitedEventIds.begin (); it != m_solicitedEventIds.end (); ++it)
+    {
+      Simulator::Cancel ((*it).second);
+    }
+  m_solicitedEventIds.clear ();
+}
+
+void Radvd::AddConfiguration (Ptr<RadvdInterface> routerInterface)
+{
+  NS_LOG_FUNCTION (this << routerInterface);
+  m_configurations.push_back (routerInterface);
+}
+
+int64_t 
+Radvd:: AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_jitter->SetStream (stream);
+  return 1;
+}
+
+void Radvd::Send (Ptr<RadvdInterface> config, Ipv6Address dst, bool reschedule)
+{
+  NS_LOG_FUNCTION (this << dst << reschedule);
+
+  if (reschedule == true)
+    {
+      config->SetLastRaTxTime (Simulator::Now ());
+    }
+
+  Icmpv6RA raHdr;
+  Icmpv6OptionLinkLayerAddress llaHdr;
+  Icmpv6OptionMtu mtuHdr;
+  Icmpv6OptionPrefixInformation prefixHdr;
+
+  std::list<Ptr<RadvdPrefix> > prefixes = config->GetPrefixes ();
+  Ptr<Packet> p = Create<Packet> ();
+  Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
+
+  /* set RA header information */
+  raHdr.SetFlagM (config->IsManagedFlag ());
+  raHdr.SetFlagO (config->IsOtherConfigFlag ());
+  raHdr.SetFlagH (config->IsHomeAgentFlag ());
+  raHdr.SetCurHopLimit (config->GetCurHopLimit ());
+  raHdr.SetLifeTime (config->GetDefaultLifeTime ());
+  raHdr.SetReachableTime (config->GetReachableTime ());
+  raHdr.SetRetransmissionTime (config->GetRetransTimer ());
+
+  if (config->IsSourceLLAddress ())
+    {
+      /* Get L2 address from NetDevice */
+      Address addr = ipv6->GetNetDevice (config->GetInterface ())->GetAddress ();
+      llaHdr = Icmpv6OptionLinkLayerAddress (true, addr);
+      p->AddHeader (llaHdr);
+    }
+
+  if (config->GetLinkMtu ())
+    {
+      NS_ASSERT (config->GetLinkMtu () >= 1280);
+      mtuHdr = Icmpv6OptionMtu (config->GetLinkMtu ());
+      p->AddHeader (mtuHdr);
+    }
+
+  /* add list of prefixes */
+  for (std::list<Ptr<RadvdPrefix> >::const_iterator jt = prefixes.begin (); jt != prefixes.end (); jt++)
+    {
+      uint8_t flags = 0;
+      prefixHdr = Icmpv6OptionPrefixInformation ();
+      prefixHdr.SetPrefix ((*jt)->GetNetwork ());
+      prefixHdr.SetPrefixLength ((*jt)->GetPrefixLength ());
+      prefixHdr.SetValidTime ((*jt)->GetValidLifeTime ());
+      prefixHdr.SetPreferredTime ((*jt)->GetPreferredLifeTime ());
+
+      if ((*jt)->IsOnLinkFlag ())
+        {
+          flags += 1 << 7;
+        }
+
+      if ((*jt)->IsAutonomousFlag ())
+        {
+          flags += 1 << 6;
+        }
+
+      if ((*jt)->IsRouterAddrFlag ())
+        {
+          flags += 1 << 5;
+        }
+
+      prefixHdr.SetFlags (flags);
+
+      p->AddHeader (prefixHdr);
+    }
+
+  Address sockAddr;
+  m_sendSockets[config->GetInterface ()]->GetSockName (sockAddr);
+  Ipv6Address src = Inet6SocketAddress::ConvertFrom (sockAddr).GetIpv6 ();
+
+  /* as we know interface index that will be used to send RA and 
+   * we always send RA with router's link-local address, we can 
+   * calculate checksum here.
+   */
+  raHdr.CalculatePseudoHeaderChecksum (src, dst, p->GetSize () + raHdr.GetSerializedSize (), 58 /* ICMPv6 */);
+  p->AddHeader (raHdr);
+
+  /* Router advertisements MUST always have a ttl of 255
+   * The ttl value should be set as a socket option, but this is not yet implemented
+   */
+  SocketIpTtlTag ttl;
+  ttl.SetTtl (255);
+  p->AddPacketTag (ttl);
+
+  /* send RA */
+  NS_LOG_LOGIC ("Send RA to " << dst);
+  m_sendSockets[config->GetInterface ()]->SendTo (p, 0, Inet6SocketAddress (dst, 0));
+
+  if (reschedule)
+    {
+      uint64_t delay = static_cast<uint64_t> (m_jitter->GetValue (config->GetMinRtrAdvInterval (), config->GetMaxRtrAdvInterval ()) + 0.5);
+      if (config->IsInitialRtrAdv ())
+        {
+          if (delay > MAX_INITIAL_RTR_ADVERT_INTERVAL)
+            delay = MAX_INITIAL_RTR_ADVERT_INTERVAL;
+        }
+
+      NS_LOG_INFO ("Reschedule in " << delay << " milliseconds");
+      Time t = MilliSeconds (delay);
+      m_unsolicitedEventIds[config->GetInterface ()] = Simulator::Schedule (t, &Radvd::Send, this, config, Ipv6Address::GetAllNodesMulticast (), true);
+    }
+}
+
+void Radvd::HandleRead (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+  Ptr<Packet> packet = 0;
+  Address from;
+
+  while ((packet = socket->RecvFrom (from)))
+    {
+      if (Inet6SocketAddress::IsMatchingType (from))
+        {
+          Ipv6PacketInfoTag interfaceInfo;
+          if (!packet->RemovePacketTag (interfaceInfo))
+            {
+              NS_ABORT_MSG ("No incoming interface on RADVD message, aborting.");
+            }
+          uint32_t incomingIf = interfaceInfo.GetRecvIf ();
+          Ptr<NetDevice> dev = GetNode ()->GetDevice (incomingIf);
+          Ptr<Ipv6> ipv6 = GetNode ()->GetObject<Ipv6> ();
+          uint32_t ipInterfaceIndex = ipv6->GetInterfaceForDevice (dev);
+
+          Ipv6Header hdr;
+          Icmpv6RS rsHdr;
+          uint64_t delay = 0;
+          Time t;
+
+          packet->RemoveHeader (hdr);
+          uint8_t type;
+          packet->CopyData (&type, sizeof(type));
+
+          switch (type)
+            {
+            case Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION:
+              packet->RemoveHeader (rsHdr);
+              NS_LOG_INFO ("Received ICMPv6 Router Solicitation from " << hdr.GetSourceAddress () << " code = " << (uint32_t)rsHdr.GetCode ());
+
+              for (RadvdInterfaceListCI it = m_configurations.begin (); it != m_configurations.end (); it++)
+                {
+                  if (ipInterfaceIndex == (*it)->GetInterface ())
+                    {
+                      /* calculate minimum delay between RA */
+                      delay = static_cast<uint64_t> (m_jitter->GetValue (0, MAX_RA_DELAY_TIME) + 0.5);
+                      t = Simulator::Now () + MilliSeconds (delay); /* absolute time of solicited RA */
+
+                      if (Simulator::Now () < (*it)->GetLastRaTxTime () + MilliSeconds (MIN_DELAY_BETWEEN_RAS) )
+                        {
+                          t += MilliSeconds (MIN_DELAY_BETWEEN_RAS);
+                        }
+
+                      /* if our solicited RA is before the next periodic RA, we schedule it */
+                      bool scheduleSingle = true;
+
+                      if (m_solicitedEventIds.find ((*it)->GetInterface ()) != m_solicitedEventIds.end ())
+                        {
+                          if (m_solicitedEventIds[(*it)->GetInterface ()].IsRunning ())
+                            {
+                              scheduleSingle = false;
+                            }
+                        }
+
+                      if (m_unsolicitedEventIds.find ((*it)->GetInterface ()) != m_unsolicitedEventIds.end ())
+                        {
+                          if (t.GetTimeStep () > static_cast<int64_t> (m_unsolicitedEventIds[(*it)->GetInterface ()].GetTs ()))
+                            {
+                              scheduleSingle = false;
+                            }
+                        }
+
+                      if (scheduleSingle)
+                        {
+                          NS_LOG_INFO ("schedule new RA");
+                          m_solicitedEventIds[(*it)->GetInterface ()] = Simulator::Schedule (MilliSeconds (delay), &Radvd::Send,
+                                                                                             this, (*it), Ipv6Address::GetAllNodesMulticast (), false);
+                        }
+                    }
+                }
+              break;
+            default:
+              break;
+            }
+        }
+    }
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd.h ns-3.25/src/internet-apps/model/radvd.h
--- ns-3.24.1/src/internet-apps/model/radvd.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,185 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2008 Telecom Bretagne
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
+ */
+
+#ifndef RADVD_H
+#define RADVD_H
+
+#include <map>
+
+#include "radvd-interface.h"
+#include "ns3/application.h"
+#include "ns3/socket.h"
+#include "ns3/random-variable-stream.h"
+
+
+namespace ns3
+{
+
+/**
+ * \ingroup internet-apps
+ * \defgroup radvd Radvd
+ */
+
+/**
+ * \ingroup radvd
+ * \class Radvd
+ * \brief Router advertisement daemon.
+ */
+class Radvd : public Application
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return type ID
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor.
+   */
+  Radvd ();
+
+  /**
+   * \brief Destructor.
+   */
+  virtual ~Radvd ();
+
+  /**
+   * \brief Default value for maximum delay of RA (ms)
+   */
+  static const uint32_t MAX_RA_DELAY_TIME = 500;
+  /**
+   * \brief Default value for maximum initial RA advertisements
+   */
+  static const uint32_t MAX_INITIAL_RTR_ADVERTISEMENTS = 3;
+  /**
+   * \brief Default value for maximum initial RA advertisements interval (ms)
+   */
+  static const uint32_t MAX_INITIAL_RTR_ADVERT_INTERVAL = 16000;
+  /**
+   * \brief Default value for minimum delay between RA advertisements (ms)
+   */
+  static const uint32_t MIN_DELAY_BETWEEN_RAS = 3000;
+
+  /**
+   * \brief Add configuration for an interface;
+   * \param routerInterface configuration
+   */
+  void AddConfiguration (Ptr<RadvdInterface> routerInterface);
+
+ /**
+  * 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);
+
+protected:
+  /**
+   * \brief Dispose the instance.
+   */
+  virtual void DoDispose ();
+
+private:
+  /// Container: Ptr to RadvdInterface
+  typedef std::list<Ptr<RadvdInterface> > RadvdInterfaceList;
+  /// Container Iterator: Ptr to RadvdInterface
+  typedef std::list<Ptr<RadvdInterface> >::iterator RadvdInterfaceListI;
+  /// Container Const Iterator: Ptr to RadvdInterface
+  typedef std::list<Ptr<RadvdInterface> >::const_iterator RadvdInterfaceListCI;
+
+  /// Container: interface number, EventId
+  typedef std::map<uint32_t, EventId> EventIdMap;
+  /// Container Iterator: interface number, EventId
+  typedef std::map<uint32_t, EventId>::iterator EventIdMapI;
+  /// Container Const Iterator: interface number, EventId
+  typedef std::map<uint32_t, EventId>::const_iterator EventIdMapCI;
+
+  /// Container: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> > SocketMap;
+  /// Container Iterator: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> >::iterator SocketMapI;
+  /// Container Const Iterator: interface number, Socket
+  typedef std::map<uint32_t, Ptr<Socket> >::const_iterator SocketMapCI;
+
+  /**
+   * \brief Start the application.
+   */
+  virtual void StartApplication ();
+
+  /**
+   * \brief Stop the application.
+   */
+  virtual void StopApplication ();
+
+  /**
+   * \brief Send a packet.
+   * \param config interface configuration
+   * \param dst destination address (default ff02::1)
+   * \param reschedule if true another send will be reschedule (periodic)
+   */
+  void Send (Ptr<RadvdInterface> config, Ipv6Address dst = Ipv6Address::GetAllNodesMulticast (), bool reschedule = false);
+
+  /**
+   * \brief Handle received packet, especially router solicitation
+   * \param socket socket to read data from
+   */
+  void HandleRead (Ptr<Socket> socket);
+
+  /**
+   * \brief Raw socket to receive RS.
+   */
+  Ptr<Socket> m_recvSocket;
+
+  /**
+   * \brief Raw socket to send RA.
+   */
+  SocketMap m_sendSockets;
+
+  /**
+   * \brief List of configuration for interface.
+   */
+  RadvdInterfaceList m_configurations;
+
+  /**
+   * \brief Event ID map for unsolicited RAs.
+   */
+  EventIdMap m_unsolicitedEventIds;
+
+  /**
+   * \brief Event ID map for solicited RAs.
+   */
+  EventIdMap m_solicitedEventIds;
+
+  /**
+   * \brief Variable to provide jitter in advertisement interval
+   */
+  Ptr<UniformRandomVariable> m_jitter;
+};
+
+} /* namespace ns3 */
+
+#endif /* RADVD_H */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd-interface.cc ns-3.25/src/internet-apps/model/radvd-interface.cc
--- ns-3.24.1/src/internet-apps/model/radvd-interface.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd-interface.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,361 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#include "radvd-interface.h"
+#include <ns3/log.h>
+
+namespace ns3 
+{
+
+NS_LOG_COMPONENT_DEFINE ("RadvdInterface");
+
+RadvdInterface::RadvdInterface (uint32_t interface)
+  : m_interface (interface)
+{
+  NS_LOG_FUNCTION (this << interface);
+  /* initialize default value as specified in radvd.conf manpage */
+  m_sendAdvert = true;
+  m_maxRtrAdvInterval = 600000;
+  m_minRtrAdvInterval = (uint32_t)(double) (0.33 * m_maxRtrAdvInterval);
+  m_minDelayBetweenRAs = 3000;
+  m_managedFlag = false;
+  m_otherConfigFlag = false;
+  m_linkMtu = 0; /* 0 means not sending MTU option in RA */
+  m_reachableTime = 0; /* means unspecified for the router */
+  m_retransTimer = 0; /* means unspecified for the router */
+  m_curHopLimit = 64;
+  m_defaultLifeTime = (3 * m_maxRtrAdvInterval) / 1000;
+  m_defaultPreference = 1;
+  m_sourceLLAddress = true;
+  m_homeAgentFlag = false;
+  m_homeAgentInfo = false;
+  m_homeAgentLifeTime = 0;
+  m_homeAgentPreference = 0;
+  m_mobRtrSupportFlag = false;
+  m_intervalOpt = false;
+  m_initialRtrAdvertisementsLeft = 3;
+}
+
+RadvdInterface::RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval)
+  : m_interface (interface)
+{
+  NS_LOG_FUNCTION (this << interface << maxRtrAdvInterval << minRtrAdvInterval);
+  NS_ASSERT (maxRtrAdvInterval > minRtrAdvInterval);
+  m_sendAdvert = true;
+  m_maxRtrAdvInterval = maxRtrAdvInterval;
+  m_minRtrAdvInterval = minRtrAdvInterval;
+  m_minDelayBetweenRAs = 3000;
+  m_managedFlag = false;
+  m_otherConfigFlag = false;
+  m_linkMtu = 0; /* 0 means not sending MTU option in RA */
+  m_reachableTime = 0; /* means unspecified for the router */
+  m_retransTimer = 0; /* means unspecified for the router */
+  m_curHopLimit = 64;
+  m_defaultLifeTime = 3 * m_maxRtrAdvInterval;
+  m_defaultPreference = 1;
+  m_sourceLLAddress = true;
+  m_homeAgentFlag = false;
+  m_homeAgentInfo = false;
+  m_homeAgentLifeTime = 0;
+  m_homeAgentPreference = 0;
+  m_mobRtrSupportFlag = false;
+  m_intervalOpt = false;
+  m_initialRtrAdvertisementsLeft = 3;
+}
+
+RadvdInterface::~RadvdInterface ()
+{
+  NS_LOG_FUNCTION (this);
+  /* clear prefixes */
+  for (RadvdPrefixListI it = m_prefixes.begin (); it != m_prefixes.end (); ++it)
+    {
+      (*it) = 0;
+    }
+  m_prefixes.clear ();
+}
+
+void RadvdInterface::AddPrefix (Ptr<RadvdPrefix> routerPrefix)
+{
+  NS_LOG_FUNCTION (this << routerPrefix);
+  m_prefixes.push_back (routerPrefix);
+}
+
+
+uint32_t RadvdInterface::GetInterface () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_interface;
+}
+
+std::list<Ptr<RadvdPrefix> > RadvdInterface::GetPrefixes () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_prefixes;
+}
+
+bool RadvdInterface::IsSendAdvert () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_sendAdvert;
+}
+
+void RadvdInterface::SetSendAdvert (bool sendAdvert)
+{
+  NS_LOG_FUNCTION (this << sendAdvert);
+  m_sendAdvert = sendAdvert;
+}
+
+uint32_t RadvdInterface::GetMaxRtrAdvInterval () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_maxRtrAdvInterval;
+}
+
+void RadvdInterface::SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval)
+{
+  NS_LOG_FUNCTION (this << maxRtrAdvInterval);
+  m_maxRtrAdvInterval = maxRtrAdvInterval;
+}
+
+uint32_t RadvdInterface::GetMinRtrAdvInterval () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_minRtrAdvInterval;
+}
+
+void RadvdInterface::SetMinRtrAdvInterval (uint32_t minRtrAdvInterval)
+{
+  NS_LOG_FUNCTION (this << minRtrAdvInterval);
+  m_minRtrAdvInterval = minRtrAdvInterval;
+}
+
+uint32_t RadvdInterface::GetMinDelayBetweenRAs () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_minDelayBetweenRAs;
+}
+
+void RadvdInterface::SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs)
+{
+  NS_LOG_FUNCTION (this << minDelayBetweenRAs);
+  m_minDelayBetweenRAs = minDelayBetweenRAs;
+}
+
+bool RadvdInterface::IsManagedFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_managedFlag;
+}
+
+void RadvdInterface::SetManagedFlag (bool managedFlag)
+{
+  NS_LOG_FUNCTION (this << managedFlag);
+  m_managedFlag = managedFlag;
+}
+
+bool RadvdInterface::IsOtherConfigFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_otherConfigFlag;
+}
+
+void RadvdInterface::SetOtherConfigFlag (bool otherConfigFlag)
+{
+  NS_LOG_FUNCTION (this << otherConfigFlag);
+  m_otherConfigFlag = otherConfigFlag;
+}
+
+uint32_t RadvdInterface::GetLinkMtu () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_linkMtu;
+}
+
+void RadvdInterface::SetLinkMtu (uint32_t linkMtu)
+{
+  NS_LOG_FUNCTION (this << linkMtu);
+  m_linkMtu = linkMtu;
+}
+
+uint32_t RadvdInterface::GetReachableTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_reachableTime;
+}
+
+void RadvdInterface::SetReachableTime (uint32_t reachableTime)
+{
+  NS_LOG_FUNCTION (this << reachableTime);
+  m_reachableTime = reachableTime;
+}
+
+uint32_t RadvdInterface::GetDefaultLifeTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_defaultLifeTime;
+}
+
+void RadvdInterface::SetDefaultLifeTime (uint32_t defaultLifeTime)
+{
+  NS_LOG_FUNCTION (this << defaultLifeTime);
+  m_defaultLifeTime = defaultLifeTime;
+}
+
+uint32_t RadvdInterface::GetRetransTimer () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_retransTimer;
+}
+
+void RadvdInterface::SetRetransTimer (uint32_t retransTimer)
+{
+  NS_LOG_FUNCTION (this << retransTimer);
+  m_retransTimer = retransTimer;
+}
+
+uint8_t RadvdInterface::GetCurHopLimit () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_curHopLimit;
+}
+
+void RadvdInterface::SetCurHopLimit (uint8_t curHopLimit)
+{
+  NS_LOG_FUNCTION (this << curHopLimit);
+  m_curHopLimit = curHopLimit;
+}
+
+uint8_t RadvdInterface::GetDefaultPreference () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_defaultPreference;
+}
+
+void RadvdInterface::SetDefaultPreference (uint8_t defaultPreference)
+{
+  NS_LOG_FUNCTION (this << defaultPreference);
+  m_defaultPreference = defaultPreference;
+}
+
+bool RadvdInterface::IsSourceLLAddress () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_sourceLLAddress;
+}
+
+void RadvdInterface::SetSourceLLAddress (bool sourceLLAddress)
+{
+  NS_LOG_FUNCTION (this << sourceLLAddress);
+  m_sourceLLAddress = sourceLLAddress;
+}
+
+bool RadvdInterface::IsHomeAgentFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_homeAgentFlag;
+}
+
+void RadvdInterface::SetHomeAgentFlag (bool homeAgentFlag)
+{
+  NS_LOG_FUNCTION (this << homeAgentFlag);
+  m_homeAgentFlag = homeAgentFlag;
+}
+
+bool RadvdInterface::IsHomeAgentInfo () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_homeAgentInfo;
+}
+
+void RadvdInterface::SetHomeAgentInfo (bool homeAgentInfo)
+{
+  NS_LOG_FUNCTION (this << homeAgentInfo);
+  m_homeAgentInfo = homeAgentInfo;
+}
+
+uint32_t RadvdInterface::GetHomeAgentLifeTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_homeAgentLifeTime;
+}
+
+void RadvdInterface::SetHomeAgentLifeTime (uint32_t homeAgentLifeTime)
+{
+  NS_LOG_FUNCTION (this << homeAgentLifeTime);
+  m_homeAgentLifeTime = homeAgentLifeTime;
+}
+
+uint32_t RadvdInterface::GetHomeAgentPreference () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_homeAgentPreference;
+}
+
+void RadvdInterface::SetHomeAgentPreference (uint32_t homeAgentPreference)
+{
+  NS_LOG_FUNCTION (this << homeAgentPreference);
+  m_homeAgentPreference = homeAgentPreference;
+}
+
+bool RadvdInterface::IsMobRtrSupportFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mobRtrSupportFlag;
+}
+
+void RadvdInterface::SetMobRtrSupportFlag (bool mobRtrSupportFlag)
+{
+  NS_LOG_FUNCTION (this << mobRtrSupportFlag);
+  m_mobRtrSupportFlag = mobRtrSupportFlag;
+}
+
+bool RadvdInterface::IsIntervalOpt () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_intervalOpt;
+}
+
+void RadvdInterface::SetIntervalOpt (bool intervalOpt)
+{
+  NS_LOG_FUNCTION (this << intervalOpt);
+  m_intervalOpt = intervalOpt;
+}
+
+Time RadvdInterface::GetLastRaTxTime ()
+{
+  return m_lastSendTime;
+}
+
+void RadvdInterface::SetLastRaTxTime (Time now)
+{
+  m_lastSendTime = now;
+  if (m_initialRtrAdvertisementsLeft)
+    {
+      m_initialRtrAdvertisementsLeft --;
+    }
+}
+
+bool RadvdInterface::IsInitialRtrAdv ()
+{
+  return m_initialRtrAdvertisementsLeft;
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd-interface.h ns-3.25/src/internet-apps/model/radvd-interface.h
--- ns-3.24.1/src/internet-apps/model/radvd-interface.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,456 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#ifndef RADVD_INTERFACE_H
+#define RADVD_INTERFACE_H
+
+#include "radvd-prefix.h"
+#include <list>
+#include "ns3/simple-ref-count.h"
+#include "ns3/nstime.h"
+
+namespace ns3
+{
+
+/**
+ * \ingroup radvd
+ * \class RadvdInterface
+ * \brief Radvd interface configuration.
+ */
+class RadvdInterface : public SimpleRefCount<RadvdInterface>
+{
+public:
+  /// Container: Ptr to RadvdPrefix
+  typedef std::list<Ptr<RadvdPrefix> > RadvdPrefixList;
+  /// Container Iterator: Ptr to RadvdPrefix
+  typedef std::list<Ptr<RadvdPrefix> >::iterator RadvdPrefixListI;
+  /// Container Const Iterator: Ptr to RadvdPrefix
+  typedef std::list<Ptr<RadvdPrefix> >::const_iterator RadvdPrefixListCI;
+
+  /**
+   * \brief Constructor.
+   * \param interface interface index
+   */
+  RadvdInterface (uint32_t interface);
+
+  /**
+   * \brief Constructor.
+   * \param interface interface index
+   * \param maxRtrAdvInterval maximum RA interval (ms)
+   * \param minRtrAdvInterval minimum RA interval (ms)
+   */
+  RadvdInterface (uint32_t interface, uint32_t maxRtrAdvInterval, uint32_t minRtrAdvInterval);
+
+  /**
+   * \brief Destructor.
+   */
+  ~RadvdInterface ();
+
+  /**
+   * \brief Get interface index for this configuration.
+   * \return interface index
+   */
+  uint32_t GetInterface () const;
+
+  /**
+   * \brief Get list of prefixes advertised for this interface.
+   * \return list of IPv6 prefixes
+   */
+  RadvdPrefixList GetPrefixes () const;
+
+  /**
+   * \brief Add a prefix to advertise on interface.
+   * \param routerPrefix prefix to advertise
+   */
+  void AddPrefix (Ptr<RadvdPrefix> routerPrefix);
+
+  /**
+   * \brief Is send advert enabled (periodic RA and reply to RS) ?
+   * \return send advert flag
+   */
+  bool IsSendAdvert () const;
+
+  /**
+   * \brief Set send advert flag.
+   * \param sendAdvert value
+   */
+  void SetSendAdvert (bool sendAdvert);
+
+  /**
+   * \brief Get maximum RA interval.
+   * \return RA interval (ms)
+   */
+  uint32_t GetMaxRtrAdvInterval () const;
+
+  /**
+   * \brief Get maximum RA interval.
+   * \param maxRtrAdvInterval RA interval (ms)
+   */
+  void SetMaxRtrAdvInterval (uint32_t maxRtrAdvInterval);
+
+  /**
+   * \brief Get minimum RA interval 
+   * \return RA interval (ms)
+   */
+  uint32_t GetMinRtrAdvInterval () const;
+
+  /**
+   * \brief Get minimum RA interval 
+   * \param minRtrAdvInterval RA interval (ms).
+   */
+  void SetMinRtrAdvInterval (uint32_t minRtrAdvInterval);
+
+  /**
+   * \brief Get minimum delay between RAs.
+   * \return minimum delay (ms)
+   */
+  uint32_t GetMinDelayBetweenRAs () const;
+
+  /**
+   * \brief Set minimum delay between RAs.
+   * \param minDelayBetweenRAs minimum delay (ms)
+   */
+  void SetMinDelayBetweenRAs (uint32_t minDelayBetweenRAs);
+
+  /**
+   * \brief Is managed flag enabled ?
+   * \return managed flag
+   */
+  bool IsManagedFlag () const;
+
+  /**
+   * \brief Set managed flag
+   * \param managedFlag value
+   */
+  void SetManagedFlag (bool managedFlag);
+
+  /**
+   * \brief Is "other config" flag enabled ?
+   * \return other config flag
+   */
+  bool IsOtherConfigFlag () const;
+
+  /**
+   * \brief Set "other config" flag
+   * \param otherConfigFlag value
+   */
+  void SetOtherConfigFlag (bool otherConfigFlag);
+
+  /**
+   * \brief Get link MTU.
+   * \return link MTU
+   */
+  uint32_t GetLinkMtu () const;
+
+  /**
+   * \brief Set link MTU.
+   * \param linkMtu link MTU
+   */
+  void SetLinkMtu (uint32_t linkMtu); 
+
+  /**
+   * \brief Get reachable time.
+   * \return reachable time
+   */
+  uint32_t GetReachableTime () const;
+
+  /**
+   * \brief Set reachable time.
+   * \param reachableTime reachable time
+   */
+  void SetReachableTime (uint32_t reachableTime);
+
+  /**
+   * \brief Get default lifetime.
+   * \return default lifetime
+   */
+  uint32_t GetDefaultLifeTime () const;
+
+  /**
+   * \brief Set default lifetime.
+   * \param defaultLifeTime default lifetime
+   */
+  void SetDefaultLifeTime (uint32_t defaultLifeTime);
+
+  /**
+   * \brief Get retransmission timer.
+   * \return retransmission timer
+   */
+  uint32_t GetRetransTimer () const;
+
+  /**
+   * \brief Set retransmission timer.
+   * \param retransTimer retransmission timer
+   */
+  void SetRetransTimer (uint32_t retransTimer);
+
+  /**
+   * \brief Get current hop limit.
+   * \return current hop limit for the link
+   */
+  uint8_t GetCurHopLimit () const;
+
+  /**
+   * \brief Set current hop limit.
+   * \param curHopLimit current hop limit for the link
+   */
+  void SetCurHopLimit (uint8_t curHopLimit); 
+
+  /**
+   * \brief Get default preference.
+   * \return default preference
+   */
+  uint8_t GetDefaultPreference () const;
+
+  /**
+   * \brief Set default preference.
+   * \param defaultPreference default preference
+   */
+  void SetDefaultPreference (uint8_t defaultPreference);
+
+  /**
+   * \brief Is source LLA option should be included in RA ?
+   * \return true if source address is added in RA, false otherwise
+   */
+  bool IsSourceLLAddress () const;
+
+  /**
+   * \brief Set flag to add or not LLA to RA.
+   * \param sourceLLAddress value
+   */
+  void SetSourceLLAddress (bool sourceLLAddress);
+
+  /**
+   * \brief Is "home agent" flag enabled ?
+   * \return "home agent" flag
+   */
+  bool IsHomeAgentFlag () const;
+
+  /**
+   * \brief Set "home agent" flag.
+   * \param homeAgentFlag value
+   */
+  void SetHomeAgentFlag (bool homeAgentFlag);
+
+  /**
+   * \brief Is Home Agent Information option should be included in RA ?
+   * \return true if HA information option is added in RA, false otherwise
+   */
+  bool IsHomeAgentInfo () const;
+
+  /**
+   * \brief Set flag to add or not HA information option to RA.
+   * \param homeAgentFlag value
+   */
+  void SetHomeAgentInfo (bool homeAgentFlag);
+
+  /**
+   * \brief Get home agent lifetime.
+   * \return home agent lifetime
+   */
+  uint32_t GetHomeAgentLifeTime () const;
+
+  /**
+   * \brief Set home agent lifetime.
+   * \param homeAgentLifeTime home agent lifetime
+   */
+  void SetHomeAgentLifeTime (uint32_t homeAgentLifeTime);
+
+  /**
+   * \brief Get home agent preference.
+   * \return home agent preference
+   */
+  uint32_t GetHomeAgentPreference () const;
+
+  /**
+   * \brief Set home agent preference.
+   * \param homeAgentPreference home agent preference
+   */
+  void SetHomeAgentPreference (uint32_t homeAgentPreference);
+
+  /**
+   * \brief Is "mobile router support" flag enabled ?
+   * \return "mobile router support" flag
+   */
+  bool IsMobRtrSupportFlag () const;
+
+  /**
+   * \brief Set "mobile router support" flag.
+   * \param mobRtrSupportFlag value
+   */
+  void SetMobRtrSupportFlag (bool mobRtrSupportFlag);
+
+  /**
+   * \brief Is advertisement interval option should be included in RA ?
+   * \return true if advertisement interval option is added in RA, false otherwise
+   */
+  bool IsIntervalOpt () const;
+
+  /**
+   * \brief Set flag to add or not advertisement interval to RA.
+   * \param intervalOpt value
+   */
+  void SetIntervalOpt (bool intervalOpt);
+
+  /**
+   * \brief Get the last time a RA has been sent.
+   * \returns the last RA send time
+   */
+  Time GetLastRaTxTime ();
+
+  /**
+   * \brief Set the last RA send time. It also decrements the initial Rtr Advertisements counter.
+   * \param now the last RA send time
+   */
+  void SetLastRaTxTime (Time now);
+
+  /**
+   * \brief Checks if the interface is subject to the initial Rtr Advertisements rule.
+   * \returns true if the initial Rtr Advertisements counter is greater than zero.
+   */
+  bool IsInitialRtrAdv ();
+
+private:
+
+  /**
+   * \brief Interface to advertise RA.
+   */
+  uint32_t m_interface;
+
+  /**
+   * \brief List of prefixes to advertise.
+   */
+  RadvdPrefixList m_prefixes;
+
+  /**
+   * \brief Flag whether or not router sends periodic RA and respond to RS.
+   */
+  bool m_sendAdvert;
+
+  /**
+   * \brief Maximum RA interval in milliseconds.
+   */
+  uint32_t m_maxRtrAdvInterval;
+
+  /**
+   * \brief Minimum RA interval in milliseconds.
+   */
+  uint32_t m_minRtrAdvInterval;
+
+  /**
+   * \brief Minimum delay between RA in milliseconds.
+   */
+  uint32_t m_minDelayBetweenRAs;
+
+  /**
+   * \brief Managed flag. If true host use the stateful protocol for address autoconfiguration.
+   */
+  bool m_managedFlag;
+
+  /**
+   * \brief Other configuration flag. If true host use stateful protocol for other (non-address) information.
+   */
+  bool m_otherConfigFlag;
+
+  /**
+   * \brief Link MTU to use.
+   */
+  uint32_t m_linkMtu;
+
+  /**
+   * \brief Reachable time in milliseconds.
+   */
+  uint32_t m_reachableTime;
+
+  /**
+   * \brief Retransmission timer in milliseconds.
+   */
+  uint32_t m_retransTimer;
+
+  /**
+   * \brief Current hop limit (TTL).
+   */
+  uint32_t m_curHopLimit;
+
+  /**
+   * \brief Default life time in seconds.
+   */
+  uint32_t m_defaultLifeTime;
+
+  /**
+   * \brief Preference associated with default router.
+   * 0 = low
+   * 1 = medium
+   * 2 = high
+   */
+  uint8_t m_defaultPreference;
+
+  /**
+   * \brief Flag to add link-layer address in RA.
+   */
+  bool m_sourceLLAddress;
+
+  /**
+   * \brief Flag to add HA (home agent) flag in RA.
+   */
+  bool m_homeAgentFlag;
+
+  /**
+   * \brief Flag to add Home Agent Information option (Mobile IPv6).
+   * Currently not implemented.
+   */
+  bool m_homeAgentInfo;
+
+  /**
+   * \brief Home agent lifetime in seconds. Ignored if home agent info is not set.
+   */
+  uint32_t m_homeAgentLifeTime;
+
+  /**
+   * \brief Home agent preference. Ignored if home agent info is not set.
+   */
+  uint32_t m_homeAgentPreference;
+
+  /**
+   * \brief Flag for HA to signals it supports Mobile Router registrations (NEMO Basic).
+   */
+  bool m_mobRtrSupportFlag;
+
+  /**
+   * \brief Flag to add Advertisement Interval option in RA.
+   */
+  bool m_intervalOpt;
+
+  /**
+   * \brief Last RA send time.
+   */
+  Time m_lastSendTime;
+
+  /**
+   * \brief Number of fast announcement to do
+   */
+  uint8_t m_initialRtrAdvertisementsLeft;
+
+};
+
+} /* namespace ns3 */
+
+#endif /* RADVD_INTERFACE_H */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd-prefix.cc ns-3.25/src/internet-apps/model/radvd-prefix.cc
--- ns-3.24.1/src/internet-apps/model/radvd-prefix.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd-prefix.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,131 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#include "radvd-prefix.h"
+#include <ns3/log.h>
+
+namespace ns3
+{
+
+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),
+    m_prefixLength (prefixLength),
+    m_preferredLifeTime (preferredLifeTime),
+    m_validLifeTime (validLifeTime),
+    m_onLinkFlag (onLinkFlag),
+    m_autonomousFlag (autonomousFlag),
+    m_routerAddrFlag (routerAddrFlag)
+{
+  NS_LOG_FUNCTION (this << network << prefixLength << preferredLifeTime << validLifeTime << onLinkFlag << autonomousFlag << routerAddrFlag);
+}
+
+RadvdPrefix::~RadvdPrefix ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ipv6Address RadvdPrefix::GetNetwork () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_network;
+}
+
+void RadvdPrefix::SetNetwork (Ipv6Address network)
+{
+  NS_LOG_FUNCTION (this << network);
+  m_network = network;
+}
+
+uint8_t RadvdPrefix::GetPrefixLength () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_prefixLength;
+}
+
+void RadvdPrefix::SetPrefixLength (uint8_t prefixLength)
+{
+  NS_LOG_FUNCTION (this << prefixLength);
+  m_prefixLength = prefixLength;
+}
+
+uint32_t RadvdPrefix::GetValidLifeTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_validLifeTime;
+}
+
+void RadvdPrefix::SetValidLifeTime (uint32_t validLifeTime)
+{
+  NS_LOG_FUNCTION (this << validLifeTime);
+  m_validLifeTime = validLifeTime;
+}
+
+uint32_t RadvdPrefix::GetPreferredLifeTime () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_preferredLifeTime;
+}
+
+void RadvdPrefix::SetPreferredLifeTime (uint32_t preferredLifeTime)
+{
+  NS_LOG_FUNCTION (this << preferredLifeTime);
+  m_preferredLifeTime = preferredLifeTime;
+}
+
+bool RadvdPrefix::IsOnLinkFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_onLinkFlag;
+}
+
+void RadvdPrefix::SetOnLinkFlag (bool onLinkFlag)
+{
+  NS_LOG_FUNCTION (this << onLinkFlag);
+  m_onLinkFlag = onLinkFlag;
+}
+
+bool RadvdPrefix::IsAutonomousFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_autonomousFlag; 
+}
+
+void RadvdPrefix::SetAutonomousFlag (bool autonomousFlag)
+{
+  NS_LOG_FUNCTION (this << autonomousFlag);
+  m_autonomousFlag = autonomousFlag;
+}
+
+bool RadvdPrefix::IsRouterAddrFlag () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_routerAddrFlag;
+}
+
+void RadvdPrefix::SetRouterAddrFlag (bool routerAddrFlag)
+{
+  NS_LOG_FUNCTION (this << routerAddrFlag);
+  m_routerAddrFlag = routerAddrFlag;
+}
+
+} /* namespace ns3 */
+
diff -Naur ns-3.24.1/src/internet-apps/model/radvd-prefix.h ns-3.25/src/internet-apps/model/radvd-prefix.h
--- ns-3.24.1/src/internet-apps/model/radvd-prefix.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/radvd-prefix.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,182 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Strasbourg University
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
+ */
+
+#ifndef RADVD_PREFIX_H
+#define RADVD_PREFIX_H 
+
+#include <stdint.h>
+
+#include "ns3/ipv6-address.h"
+#include "ns3/simple-ref-count.h"
+
+namespace ns3
+{
+
+/**
+ * \ingroup radvd
+ * \class RadvdPrefix
+ * \brief Router prefix for radvd application.
+ */
+class RadvdPrefix : public SimpleRefCount<RadvdPrefix>
+{
+public:
+  /**
+   * \brief Constructor.
+   * \param network network prefix advertised
+   * \param prefixLength prefix length ( 0 < x <= 128)
+   * \param preferredLifeTime preferred life time in seconds (default 7 days)
+   * \param validLifeTime valid life time in seconds (default 30 days)
+   * \param onLinkFlag on link flag
+   * \param autonomousFlag autonomous link flag
+   * \param routerAddrFlag router address flag (for Mobile IPv6)
+   */
+  RadvdPrefix (Ipv6Address network, uint8_t prefixLength, uint32_t preferredLifeTime = 604800, uint32_t validLifeTime = 2592000, bool onLinkFlag = true, bool autonomousFlag = true, bool routerAddrFlag = false);
+
+  /**
+   * \brief Destructor.
+   */
+  ~RadvdPrefix ();
+
+  /**
+   * \brief Get network prefix.
+   * \return network prefix
+   */
+  Ipv6Address GetNetwork () const;
+
+  /**
+   * \brief Set network prefix.
+   * \param network network prefix
+   */
+  void SetNetwork (Ipv6Address network);
+
+  /**
+   * \brief Get prefix length.
+   * \return prefix length
+   */
+  uint8_t GetPrefixLength () const;
+
+  /**
+   * \brief Set prefix length.
+   * \param prefixLength prefix length
+   */
+  void SetPrefixLength (uint8_t prefixLength);
+
+  /**
+   * \brief Get preferred lifetime.
+   * \return lifetime
+   */
+  uint32_t GetPreferredLifeTime () const;
+
+  /**
+   * \brief Set preferred lifetime.
+   * \param preferredLifeTime lifetime
+   */
+  void SetPreferredLifeTime (uint32_t preferredLifeTime);
+
+  /**
+   * \brief Get valid lifetime.
+   * \return lifetime
+   */
+  uint32_t GetValidLifeTime () const;
+
+  /**
+   * \brief Set valid lifetime.
+   * \param validLifeTime lifetime
+   */
+  void SetValidLifeTime (uint32_t validLifeTime);
+
+  /**
+   * \brief Is on-link flag ?
+   * \return true if on-link is activated, false otherwise
+   */
+  bool IsOnLinkFlag () const;
+
+  /**
+   * \brief Set on-link flag.
+   * \param onLinkFlag value
+   */
+  void SetOnLinkFlag (bool onLinkFlag);
+
+  /**
+   * \brief Is autonomous flag ?
+   * \return true if autonomous is activated, false otherwise
+   */
+  bool IsAutonomousFlag () const;
+
+  /**
+   * \brief Set autonomous flag.
+   * \param autonomousFlag value
+   */
+  void SetAutonomousFlag (bool autonomousFlag);
+
+  /**
+   * \brief Is router address flag ?
+   * \return true if router address is activated, false otherwise
+   */
+  bool IsRouterAddrFlag () const;
+
+  /**
+   * \brief Set router address flag.
+   * \param routerAddrFlag value
+   */
+  void SetRouterAddrFlag (bool routerAddrFlag);
+
+private:
+  /**
+   * \brief Network prefix.
+   */
+  Ipv6Address m_network;
+
+  /**
+   * \brief Prefix length.
+   */
+  uint8_t m_prefixLength;
+
+  /**
+   * \brief Preferred time.
+   */
+  uint32_t m_preferredLifeTime;
+
+  /**
+   * \brief Valid time.
+   */
+  uint32_t m_validLifeTime;
+
+  /**
+   * \brief On link flag, indicates that this prefix can be used for on-link determination.
+   */
+  bool m_onLinkFlag;
+
+  /**
+   * \brief Autonomous flag, it is used for autonomous address configuration (\RFC{2462}).
+   */
+  bool m_autonomousFlag;
+
+  /**
+   * \brief Router address flag, indicates that router address is sent instead 
+   * of network prefix as is required by Mobile IPv6.
+   */
+  bool m_routerAddrFlag;
+};
+
+} /* namespace ns3 */
+
+#endif /* RADVD_PREFIX_H */
+
diff -Naur ns-3.24.1/src/internet-apps/model/v4ping.cc ns-3.25/src/internet-apps/model/v4ping.cc
--- ns-3.24.1/src/internet-apps/model/v4ping.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/v4ping.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,285 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "v4ping.h"
+#include "ns3/icmpv4.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+#include "ns3/ipv4-address.h"
+#include "ns3/socket.h"
+#include "ns3/uinteger.h"
+#include "ns3/boolean.h"
+#include "ns3/inet-socket-address.h"
+#include "ns3/packet.h"
+#include "ns3/trace-source-accessor.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("V4Ping");
+
+NS_OBJECT_ENSURE_REGISTERED (V4Ping);
+
+TypeId 
+V4Ping::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::V4Ping")
+    .SetParent<Application> ()
+    .SetGroupName("Internet-Apps")
+    .AddConstructor<V4Ping> ()
+    .AddAttribute ("Remote", 
+                   "The address of the machine we want to ping.",
+                   Ipv4AddressValue (),
+                   MakeIpv4AddressAccessor (&V4Ping::m_remote),
+                   MakeIpv4AddressChecker ())
+    .AddAttribute ("Verbose",
+                   "Produce usual output.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&V4Ping::m_verbose),
+                   MakeBooleanChecker ())
+    .AddAttribute ("Interval", "Wait  interval  seconds between sending each packet.",
+                   TimeValue (Seconds (1)),
+                   MakeTimeAccessor (&V4Ping::m_interval),
+                   MakeTimeChecker ())
+    .AddAttribute ("Size", "The number of data bytes to be sent, real packet will be 8 (ICMP) + 20 (IP) bytes longer.",
+                   UintegerValue (56),
+                   MakeUintegerAccessor (&V4Ping::m_size),
+                   MakeUintegerChecker<uint32_t> (16))
+    .AddTraceSource ("Rtt",
+                     "The rtt calculated by the ping.",
+                     MakeTraceSourceAccessor (&V4Ping::m_traceRtt),
+                     "ns3::Time::TracedCallback");
+  ;
+  return tid;
+}
+
+V4Ping::V4Ping ()
+  : m_interval (Seconds (1)),
+    m_size (56),
+    m_socket (0),
+    m_seq (0),
+    m_verbose (false),
+    m_recv (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+V4Ping::~V4Ping ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+V4Ping::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_socket = 0;
+  Application::DoDispose ();
+}
+
+uint32_t
+V4Ping::GetApplicationId (void) const
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<Node> node = GetNode ();
+  for (uint32_t i = 0; i < node->GetNApplications (); ++i)
+    {
+      if (node->GetApplication (i) == this)
+        {
+          return i;
+        }
+    }
+  NS_ASSERT_MSG (false, "forgot to add application to node");
+  return 0; // quiet compiler
+}
+
+void
+V4Ping::Receive (Ptr<Socket> socket)
+{
+  NS_LOG_FUNCTION (this << socket);
+  while (m_socket->GetRxAvailable () > 0)
+    {
+      Address from;
+      Ptr<Packet> p = m_socket->RecvFrom (0xffffffff, 0, from);
+      NS_LOG_DEBUG ("recv " << p->GetSize () << " bytes");
+      NS_ASSERT (InetSocketAddress::IsMatchingType (from));
+      InetSocketAddress realFrom = InetSocketAddress::ConvertFrom (from);
+      NS_ASSERT (realFrom.GetPort () == 1); // protocol should be icmp.
+      Ipv4Header ipv4;
+      p->RemoveHeader (ipv4);
+      uint32_t recvSize = p->GetSize ();
+      NS_ASSERT (ipv4.GetProtocol () == 1); // protocol should be icmp.
+      Icmpv4Header icmp;
+      p->RemoveHeader (icmp);
+      if (icmp.GetType () == Icmpv4Header::ECHO_REPLY)
+        {
+          Icmpv4Echo echo;
+          p->RemoveHeader (echo);
+          std::map<uint16_t, Time>::iterator i = m_sent.find (echo.GetSequenceNumber ());
+
+          if (i != m_sent.end () && echo.GetIdentifier () == 0)
+            {
+              uint32_t * buf = new uint32_t [m_size];
+              uint32_t dataSize = echo.GetDataSize ();
+              uint32_t nodeId;
+              uint32_t appId;
+              if (dataSize == m_size)
+                {
+                  echo.GetData ((uint8_t *)buf);
+                  Read32 ((const uint8_t *) &buf[0], nodeId);
+                  Read32 ((const uint8_t *) &buf[1], appId);
+
+                  if (nodeId == GetNode ()->GetId () &&
+                      appId == GetApplicationId ())
+                    {
+                      Time sendTime = i->second;
+                      NS_ASSERT (Simulator::Now () >= sendTime);
+                      Time delta = Simulator::Now () - sendTime;
+
+                      m_sent.erase (i);
+                      m_avgRtt.Update (delta.GetMilliSeconds ());
+                      m_recv++;
+                      m_traceRtt (delta);
+
+                      if (m_verbose)
+                        {
+                          std::cout << recvSize << " bytes from " << realFrom.GetIpv4 () << ":"
+                                    << " icmp_seq=" << echo.GetSequenceNumber ()
+                                    << " ttl=" << (unsigned)ipv4.GetTtl ()
+                                    << " time=" << delta.GetMilliSeconds () << " ms\n";
+                        }
+                    }
+                }
+              delete[] buf;
+            }
+        }
+    }
+}
+
+// Writes data to buffer in little-endian format; least significant byte
+// of data is at lowest buffer address
+void
+V4Ping::Write32 (uint8_t *buffer, const uint32_t data)
+{
+  NS_LOG_FUNCTION (this << buffer << data);
+  buffer[0] = (data >> 0) & 0xff;
+  buffer[1] = (data >> 8) & 0xff;
+  buffer[2] = (data >> 16) & 0xff;
+  buffer[3] = (data >> 24) & 0xff;
+}
+
+// Writes data from a little-endian formatted buffer to data
+void
+V4Ping::Read32 (const uint8_t *buffer, uint32_t &data)
+{
+  NS_LOG_FUNCTION (this << buffer << data);
+  data = (buffer[3] << 24) + (buffer[2] << 16) + (buffer[1] << 8) + buffer[0];
+}
+
+void 
+V4Ping::Send ()
+{
+  NS_LOG_FUNCTION (this);
+
+  NS_LOG_INFO ("m_seq=" << m_seq);
+  Ptr<Packet> p = Create<Packet> ();
+  Icmpv4Echo echo;
+  echo.SetSequenceNumber (m_seq);
+  m_seq++;
+  echo.SetIdentifier (0);
+
+  //
+  // We must write quantities out in some form of network order.  Since there
+  // isn't an htonl to work with we just follow the convention in pcap traces
+  // (where any difference would show up anyway) and borrow that code.  Don't
+  // be too surprised when you see that this is a little endian convention.
+  //
+  uint8_t* data = new uint8_t[m_size];
+  for (uint32_t i = 0; i < m_size; ++i) data[i] = 0;
+  NS_ASSERT (m_size >= 16);
+
+  uint32_t tmp = GetNode ()->GetId ();
+  Write32 (&data[0 * sizeof(uint32_t)], tmp);
+
+  tmp = GetApplicationId ();
+  Write32 (&data[1 * sizeof(uint32_t)], tmp);
+
+  Ptr<Packet> dataPacket = Create<Packet> ((uint8_t *) data, m_size);
+  echo.SetData (dataPacket);
+  p->AddHeader (echo);
+  Icmpv4Header header;
+  header.SetType (Icmpv4Header::ECHO);
+  header.SetCode (0);
+  if (Node::ChecksumEnabled ())
+    {
+      header.EnableChecksum ();
+    }
+  p->AddHeader (header);
+  m_sent.insert (std::make_pair (m_seq - 1, Simulator::Now ()));
+  m_socket->Send (p, 0);
+  m_next = Simulator::Schedule (m_interval, &V4Ping::Send, this);
+  delete[] data;
+}
+
+void 
+V4Ping::StartApplication (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  m_started = Simulator::Now ();
+  if (m_verbose)
+    {
+      std::cout << "PING  " << m_remote << " 56(84) bytes of data.\n";
+    }
+
+  m_socket = Socket::CreateSocket (GetNode (), TypeId::LookupByName ("ns3::Ipv4RawSocketFactory"));
+  NS_ASSERT (m_socket != 0);
+  m_socket->SetAttribute ("Protocol", UintegerValue (1)); // icmp
+  m_socket->SetRecvCallback (MakeCallback (&V4Ping::Receive, this));
+  InetSocketAddress src = InetSocketAddress (Ipv4Address::GetAny (), 0);
+  int status;
+  status = m_socket->Bind (src);
+  NS_ASSERT (status != -1);
+  InetSocketAddress dst = InetSocketAddress (m_remote, 0);
+  status = m_socket->Connect (dst);
+  NS_ASSERT (status != -1);
+
+  Send ();
+}
+void 
+V4Ping::StopApplication (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_next.Cancel ();
+  m_socket->Close ();
+
+  if (m_verbose)
+    {
+      std::ostringstream os;
+      os.precision (4);
+      os << "--- " << m_remote << " ping statistics ---\n" 
+         << m_seq << " packets transmitted, " << m_recv << " received, "
+         << ((m_seq - m_recv) * 100 / m_seq) << "% packet loss, "
+         << "time " << (Simulator::Now () - m_started).GetMilliSeconds () << "ms\n";
+
+      if (m_avgRtt.Count () > 0)
+        os << "rtt min/avg/max/mdev = " << m_avgRtt.Min () << "/" << m_avgRtt.Avg () << "/"
+           << m_avgRtt.Max () << "/" << m_avgRtt.Stddev ()
+           << " ms\n";
+      std::cout << os.str ();
+    }
+}
+
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/internet-apps/model/v4ping.h ns-3.25/src/internet-apps/model/v4ping.h
--- ns-3.24.1/src/internet-apps/model/v4ping.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/model/v4ping.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,128 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#ifndef V4PING_H
+#define V4PING_H
+
+#include "ns3/application.h"
+#include "ns3/traced-callback.h"
+#include "ns3/nstime.h"
+#include "ns3/average.h"
+#include "ns3/simulator.h"
+#include <map>
+
+namespace ns3 {
+
+class Socket;
+
+/**
+ * \ingroup internet-apps
+ * \defgroup v4ping V4Ping
+ */
+
+/**
+ * \ingroup v4ping
+ * \brief an application which sends one ICMP ECHO request, waits for a REPLYs
+ *        and reports the calculated RTT.
+ *
+ * Note: The RTT calculated is reported through a trace source.
+ */
+class V4Ping : public Application
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * create a pinger applications
+   */
+  V4Ping ();
+  virtual ~V4Ping ();
+
+private:
+  /**
+   * \brief Writes data to buffer in little-endian format.
+   *
+   * Least significant byte of data is at lowest buffer address
+   *
+   * \param buffer the buffer to write to
+   * \param data the data to write
+   */
+  void Write32 (uint8_t *buffer, const uint32_t data);
+  /**
+   * \brief Writes data from a little-endian formatted buffer to data.
+   *
+   * \param buffer the buffer to read from
+   * \param data the read data
+   */
+  void Read32 (const uint8_t *buffer, uint32_t &data);
+
+  // inherited from Application base class.
+  virtual void StartApplication (void);
+  virtual void StopApplication (void);
+  virtual void DoDispose (void);
+  /**
+   * \brief Return the application ID in the node.
+   * \returns the application id
+   */
+  uint32_t GetApplicationId (void) const;
+  /**
+   * \brief Receive an ICMP Echo
+   * \param socket the receiving socket
+   *
+   * This function is called by lower layers through a callback.
+   */
+  void Receive (Ptr<Socket> socket);
+  /**
+   * \brief Send one Ping (ICMP ECHO) to the destination
+   */
+  void Send ();
+
+  /// Remote address
+  Ipv4Address m_remote;
+  /// Wait  interval  seconds between sending each packet
+  Time m_interval;
+  /** 
+   * Specifies  the number of data bytes to be sent. 
+   * The default is 56, which translates into 64 ICMP data bytes when combined with the 8 bytes of ICMP header data.
+   */
+  uint32_t m_size;
+  /// The socket we send packets from
+  Ptr<Socket> m_socket;
+  /// ICMP ECHO sequence number
+  uint16_t m_seq;
+  /// TracedCallback for RTT measured by ICMP ECHOs
+  TracedCallback<Time> m_traceRtt;
+  /// produce ping-style output if true
+  bool m_verbose;
+  /// received packets counter
+  uint32_t m_recv;
+  /// Start time to report total ping time
+  Time m_started;
+  /// Average rtt is ms
+  Average<double> m_avgRtt;
+  /// Next packet will be sent
+  EventId m_next;
+  /// All sent but not answered packets. Map icmp seqno -> when sent
+  std::map<uint16_t, Time> m_sent;
+};
+
+} // namespace ns3
+
+#endif /* V4PING_H */
diff -Naur ns-3.24.1/src/internet-apps/wscript ns-3.25/src/internet-apps/wscript
--- ns-3.24.1/src/internet-apps/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/internet-apps/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,37 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+# def options(opt):
+#     pass
+
+# def configure(conf):
+#     conf.check_nonfatal(header_name='stdint.h', define_name='HAVE_STDINT_H')
+
+def build(bld):
+    module = bld.create_ns3_module('internet-apps', ['internet'])
+    module.source = [
+        'model/ping6.cc',
+        'model/radvd-interface.cc',
+        'model/radvd-prefix.cc',
+        'model/radvd.cc',
+        'model/v4ping.cc',
+        'helper/ping6-helper.cc',
+        'helper/radvd-helper.cc',
+        'helper/v4ping-helper.cc',
+        ]
+
+    headers = bld(features='ns3header')
+    headers.module = 'internet-apps'
+    headers.source = [
+        'model/ping6.h',
+        'model/radvd.h',
+        'model/radvd-interface.h',
+        'model/radvd-prefix.h',
+        'model/v4ping.h',
+        'helper/ping6-helper.h',
+        'helper/v4ping-helper.h',
+        'helper/radvd-helper.h',
+        ]
+
+
+    bld.ns3_python_bindings()
+
diff -Naur ns-3.24.1/src/lr-wpan/bindings/callbacks_list.py ns-3.25/src/lr-wpan/bindings/callbacks_list.py
--- ns-3.24.1/src/lr-wpan/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lr-wpan/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -8,5 +8,7 @@
     ['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::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/lr-wpan/bindings/modulegen__gcc_ILP32.py ns-3.25/src/lr-wpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lr-wpan/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -141,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char> [class]
@@ -210,12 +210,16 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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]
@@ -308,6 +312,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -320,6 +328,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -550,9 +560,11 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     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'])
@@ -596,12 +608,15 @@
     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_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1337,6 +1352,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1352,6 +1372,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1528,7 +1553,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2453,10 +2478,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3671,6 +3700,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3785,6 +3818,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3821,6 +3866,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -5394,7 +5451,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5521,6 +5578,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -5600,6 +5743,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -5886,6 +6034,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6037,7 +6206,7 @@
     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]
+    ## 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')], 
diff -Naur ns-3.24.1/src/lr-wpan/bindings/modulegen__gcc_LP64.py ns-3.25/src/lr-wpan/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lr-wpan/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -141,7 +141,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned char, signed char> [class]
@@ -210,12 +210,16 @@
     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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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]
@@ -308,6 +312,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -320,6 +328,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## 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]
@@ -550,9 +560,11 @@
     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__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     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'])
@@ -596,12 +608,15 @@
     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_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     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'])
@@ -1337,6 +1352,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1352,6 +1372,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -1528,7 +1553,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2453,10 +2478,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3671,6 +3700,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -3785,6 +3818,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -3821,6 +3866,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -5394,7 +5451,7 @@
     cls.add_constructor([])
     ## net-device.h (module 'network'): ns3::NetDevice::NetDevice(ns3::NetDevice const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDevice const &', 'arg0')])
-    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## net-device.h (module 'network'): void ns3::NetDevice::AddLinkChangeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
     cls.add_method('AddLinkChangeCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
@@ -5521,6 +5578,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -5600,6 +5743,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -5886,6 +6034,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3TimeValue_methods(root_module, cls):
     ## nstime.h (module 'core'): ns3::TimeValue::TimeValue() [constructor]
     cls.add_constructor([])
@@ -6037,7 +6206,7 @@
     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]
+    ## 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')], 
diff -Naur ns-3.24.1/src/lr-wpan/examples/lr-wpan-phy-test.cc ns-3.25/src/lr-wpan/examples/lr-wpan-phy-test.cc
--- ns-3.24.1/src/lr-wpan/examples/lr-wpan-phy-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lr-wpan/examples/lr-wpan-phy-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -41,7 +41,7 @@
 {
   NS_LOG_UNCOND ("At: " << Simulator::Now ()
                         << " Received frame size: " << psduLength << " LQI: " <<
-                 lqi);
+                 (uint16_t) lqi);
 }
 
 void SendOnePacket (Ptr<LrWpanPhy> sender, Ptr<LrWpanPhy> receiver)
@@ -71,7 +71,7 @@
   Ptr<ConstantPositionMobilityModel> senderMobility = CreateObject<ConstantPositionMobilityModel> ();
   sender->SetMobility (senderMobility);
   Ptr<ConstantPositionMobilityModel> receiverMobility = CreateObject<ConstantPositionMobilityModel> ();
-  receiver->SetMobility (senderMobility);
+  receiver->SetMobility (receiverMobility);
 
 
   sender->SetPlmeSetTRXStateConfirmCallback (MakeCallback (&GetSetTRXStateConfirm));
diff -Naur ns-3.24.1/src/lte/bindings/callbacks_list.py ns-3.25/src/lte/bindings/callbacks_list.py
--- ns-3.24.1/src/lte/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -13,4 +13,5 @@
     ['void', 'ns3::Ptr<ns3::Socket>', 'unsigned int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::Socket>', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/lte/bindings/modulegen__gcc_ILP32.py ns-3.25/src/lte/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/lte/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -842,10 +842,14 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LteControlMessage', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LteControlMessage>'], 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::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LteHarqPhy', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LteHarqPhy>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumModel', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumModel>'], 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]
@@ -866,6 +870,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -1162,6 +1168,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
     ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm [class]
@@ -1194,6 +1204,8 @@
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## pss-ff-mac-scheduler.h (module 'lte'): ns3::PssFfMacScheduler [class]
     module.add_class('PssFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## lte-control-messages.h (module 'lte'): ns3::RachPreambleLteControlMessage [class]
     module.add_class('RachPreambleLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## radio-bearer-stats-calculator.h (module 'lte'): ns3::RadioBearerStatsCalculator [class]
@@ -1374,11 +1386,15 @@
     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< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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 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'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&')
@@ -1456,18 +1472,21 @@
     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::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< 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'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'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LteChunkProcessorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LteChunkProcessorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LteChunkProcessorCallback&')
@@ -1478,9 +1497,6 @@
     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&')
@@ -1490,9 +1506,6 @@
     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&')
@@ -1945,8 +1958,10 @@
     register_Ns3SimpleRefCount__Ns3LteChunkProcessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteChunkProcessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteChunkProcessor, ns3::empty, ns3::DefaultDeleter<ns3::LteChunkProcessor> >'])
     register_Ns3SimpleRefCount__Ns3LteControlMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteControlMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
     register_Ns3SimpleRefCount__Ns3LteHarqPhy_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteHarqPhy__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3SpectrumModel_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumModel__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >'])
     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__Ns3SpectrumValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >'])
@@ -2088,6 +2103,8 @@
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3NoOpHandoverAlgorithm_methods(root_module, root_module['ns3::NoOpHandoverAlgorithm'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -2104,6 +2121,7 @@
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3PssFfMacScheduler_methods(root_module, root_module['ns3::PssFfMacScheduler'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RachPreambleLteControlMessage_methods(root_module, root_module['ns3::RachPreambleLteControlMessage'])
     register_Ns3RadioBearerStatsCalculator_methods(root_module, root_module['ns3::RadioBearerStatsCalculator'])
     register_Ns3RarLteControlMessage_methods(root_module, root_module['ns3::RarLteControlMessage'])
@@ -4762,6 +4780,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -4777,6 +4800,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -4903,10 +4931,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -5091,7 +5119,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -10430,6 +10458,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -10454,6 +10494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3SpectrumModel_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumModel__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -10617,6 +10669,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -10642,6 +10699,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -14434,6 +14506,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -14449,6 +14526,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -14464,6 +14546,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -14514,6 +14606,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -18035,6 +18132,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -18151,6 +18334,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -18866,6 +19054,27 @@
                    [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RachPreambleLteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::RachPreambleLteControlMessage::RachPreambleLteControlMessage(ns3::RachPreambleLteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RachPreambleLteControlMessage const &', 'arg0')])
diff -Naur ns-3.24.1/src/lte/bindings/modulegen__gcc_LP64.py ns-3.25/src/lte/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/lte/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -842,10 +842,14 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LteControlMessage', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LteControlMessage>'], 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::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::LteHarqPhy', 'ns3::empty', 'ns3::DefaultDeleter<ns3::LteHarqPhy>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NixVector', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NixVector>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Packet', 'ns3::empty', 'ns3::DefaultDeleter<ns3::Packet>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::SpectrumModel', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumModel>'], 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]
@@ -866,6 +870,8 @@
     module.add_enum('SocketErrno', ['ERROR_NOTERROR', 'ERROR_ISCONN', 'ERROR_NOTCONN', 'ERROR_MSGSIZE', 'ERROR_AGAIN', 'ERROR_SHUTDOWN', 'ERROR_OPNOTSUPP', 'ERROR_AFNOSUPPORT', 'ERROR_INVAL', 'ERROR_BADF', 'ERROR_NOROUTETOHOST', 'ERROR_NODEV', 'ERROR_ADDRNOTAVAIL', 'ERROR_ADDRINUSE', 'SOCKET_ERRNO_LAST'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::Socket::SocketType [enumeration]
     module.add_enum('SocketType', ['NS3_SOCK_STREAM', 'NS3_SOCK_SEQPACKET', 'NS3_SOCK_DGRAM', 'NS3_SOCK_RAW'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'], import_from_module='ns.network')
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', import_from_module='ns.network', parent=root_module['ns3::Tag'])
     ## socket.h (module 'network'): ns3::SocketIpTosTag [class]
@@ -1162,6 +1168,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
     ## no-op-handover-algorithm.h (module 'lte'): ns3::NoOpHandoverAlgorithm [class]
@@ -1194,6 +1204,8 @@
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## pss-ff-mac-scheduler.h (module 'lte'): ns3::PssFfMacScheduler [class]
     module.add_class('PssFfMacScheduler', parent=root_module['ns3::FfMacScheduler'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## lte-control-messages.h (module 'lte'): ns3::RachPreambleLteControlMessage [class]
     module.add_class('RachPreambleLteControlMessage', parent=root_module['ns3::LteControlMessage'])
     ## radio-bearer-stats-calculator.h (module 'lte'): ns3::RadioBearerStatsCalculator [class]
@@ -1374,11 +1386,15 @@
     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< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
     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 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'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&')
@@ -1456,18 +1472,21 @@
     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::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< 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'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'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', u'ns3::LteChunkProcessorCallback')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >*', u'ns3::LteChunkProcessorCallback*')
     typehandlers.add_type_alias(u'ns3::Callback< void, ns3::SpectrumValue const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >&', u'ns3::LteChunkProcessorCallback&')
@@ -1478,9 +1497,6 @@
     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&')
@@ -1490,9 +1506,6 @@
     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&')
@@ -1945,8 +1958,10 @@
     register_Ns3SimpleRefCount__Ns3LteChunkProcessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteChunkProcessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteChunkProcessor, ns3::empty, ns3::DefaultDeleter<ns3::LteChunkProcessor> >'])
     register_Ns3SimpleRefCount__Ns3LteControlMessage_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteControlMessage__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteControlMessage, ns3::empty, ns3::DefaultDeleter<ns3::LteControlMessage> >'])
     register_Ns3SimpleRefCount__Ns3LteHarqPhy_Ns3Empty_Ns3DefaultDeleter__lt__ns3LteHarqPhy__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::LteHarqPhy, ns3::empty, ns3::DefaultDeleter<ns3::LteHarqPhy> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3SpectrumModel_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumModel__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >'])
     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__Ns3SpectrumValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumValue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumValue, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumValue> >'])
@@ -2088,6 +2103,8 @@
     register_Ns3MibLteControlMessage_methods(root_module, root_module['ns3::MibLteControlMessage'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3NoOpHandoverAlgorithm_methods(root_module, root_module['ns3::NoOpHandoverAlgorithm'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -2104,6 +2121,7 @@
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
     register_Ns3PssFfMacScheduler_methods(root_module, root_module['ns3::PssFfMacScheduler'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RachPreambleLteControlMessage_methods(root_module, root_module['ns3::RachPreambleLteControlMessage'])
     register_Ns3RadioBearerStatsCalculator_methods(root_module, root_module['ns3::RadioBearerStatsCalculator'])
     register_Ns3RarLteControlMessage_methods(root_module, root_module['ns3::RarLteControlMessage'])
@@ -4762,6 +4780,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -4777,6 +4800,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -4903,10 +4931,10 @@
     cls.add_constructor([param('ns3::Ipv4InterfaceContainer const &', 'arg0')])
     ## ipv4-interface-container.h (module 'internet'): ns3::Ipv4InterfaceContainer::Ipv4InterfaceContainer() [constructor]
     cls.add_constructor([])
-    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer other) [member function]
+    ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ipv4InterfaceContainer const & other) [member function]
     cls.add_method('Add', 
                    'void', 
-                   [param('ns3::Ipv4InterfaceContainer', 'other')])
+                   [param('ns3::Ipv4InterfaceContainer const &', 'other')])
     ## ipv4-interface-container.h (module 'internet'): void ns3::Ipv4InterfaceContainer::Add(ns3::Ptr<ns3::Ipv4> ipv4, uint32_t interface) [member function]
     cls.add_method('Add', 
                    'void', 
@@ -5091,7 +5119,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -10430,6 +10458,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -10454,6 +10494,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
 def register_Ns3SimpleRefCount__Ns3SpectrumModel_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumModel__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumModel, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumModel> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -10617,6 +10669,11 @@
                    'ns3::Ptr< ns3::Node >', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## socket.h (module 'network'): int ns3::Socket::GetPeerName(ns3::Address & address) const [member function]
+    cls.add_method('GetPeerName', 
+                   'int', 
+                   [param('ns3::Address &', 'address')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## socket.h (module 'network'): uint32_t ns3::Socket::GetRxAvailable() const [member function]
     cls.add_method('GetRxAvailable', 
                    'uint32_t', 
@@ -10642,6 +10699,21 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address, ns3::Socket::Ipv6MulticastFilterMode filterMode, std::vector<ns3::Ipv6Address,std::allocator<ns3::Ipv6Address> > sourceAddresses) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address'), param('ns3::Socket::Ipv6MulticastFilterMode', 'filterMode'), param('std::vector< ns3::Ipv6Address >', 'sourceAddresses')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6JoinGroup(ns3::Ipv6Address address) [member function]
+    cls.add_method('Ipv6JoinGroup', 
+                   'void', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_virtual=True)
+    ## socket.h (module 'network'): void ns3::Socket::Ipv6LeaveGroup() [member function]
+    cls.add_method('Ipv6LeaveGroup', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
     ## socket.h (module 'network'): bool ns3::Socket::IsIpRecvTos() const [member function]
     cls.add_method('IsIpRecvTos', 
                    'bool', 
@@ -14434,6 +14506,11 @@
                    'ns3::Ptr< ns3::IpL4Protocol >', 
                    [param('int', 'protocolNumber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ptr<ns3::IpL4Protocol> ns3::Ipv4::GetProtocol(int protocolNumber, int32_t interfaceIndex) const [member function]
+    cls.add_method('GetProtocol', 
+                   'ns3::Ptr< ns3::IpL4Protocol >', 
+                   [param('int', 'protocolNumber'), param('int32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
     cls.add_method('GetRoutingProtocol', 
                    'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
@@ -14449,6 +14526,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Insert(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Insert', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
     cls.add_method('IsDestinationAddress', 
                    'bool', 
@@ -14464,6 +14546,16 @@
                    'bool', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): void ns3::Ipv4::Remove(ns3::Ptr<ns3::IpL4Protocol> protocol, uint32_t interfaceIndex) [member function]
+    cls.add_method('Remove', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::IpL4Protocol >', 'protocol'), param('uint32_t', 'interfaceIndex')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::RemoveAddress(uint32_t interface, uint32_t addressIndex) [member function]
     cls.add_method('RemoveAddress', 
                    'bool', 
@@ -14514,6 +14606,11 @@
                    'void', 
                    [param('uint32_t', 'interface')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## ipv4.h (module 'internet'): ns3::Ipv4Address ns3::Ipv4::SourceAddressSelection(uint32_t interface, ns3::Ipv4Address dest) [member function]
+    cls.add_method('SourceAddressSelection', 
+                   'ns3::Ipv4Address', 
+                   [param('uint32_t', 'interface'), param('ns3::Ipv4Address', 'dest')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## ipv4.h (module 'internet'): ns3::Ipv4::IF_ANY [variable]
     cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
     ## ipv4.h (module 'internet'): bool ns3::Ipv4::GetIpForward() const [member function]
@@ -18035,6 +18132,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -18151,6 +18334,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -18866,6 +19054,27 @@
                    [param('uint16_t', 'rnti'), param('uint8_t', 'txMode')])
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RachPreambleLteControlMessage_methods(root_module, cls):
     ## lte-control-messages.h (module 'lte'): ns3::RachPreambleLteControlMessage::RachPreambleLteControlMessage(ns3::RachPreambleLteControlMessage const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RachPreambleLteControlMessage const &', 'arg0')])
diff -Naur ns-3.24.1/src/lte/examples/lena-distributed-ffr.cc ns-3.25/src/lte/examples/lena-distributed-ffr.cc
--- ns-3.24.1/src/lte/examples/lena-distributed-ffr.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/examples/lena-distributed-ffr.cc	2016-03-23 21:36:53.000000000 -0700
@@ -249,14 +249,6 @@
   internet.Install (ueNodes);
   Ipv4InterfaceContainer ueIpIfaces;
   ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueDevs));
-  // Assign IP address to UEs, and install applications
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<Node> ueNode = ueNodes.Get (u);
-      // Set the default gateway for the UE
-      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
-      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
-    }
 
   // Attach a UE to a eNB
   lteHelper->AttachToClosestEnb (ueDevs, enbDevs);
diff -Naur ns-3.24.1/src/lte/examples/lena-x2-handover.cc ns-3.25/src/lte/examples/lena-x2-handover.cc
--- ns-3.24.1/src/lte/examples/lena-x2-handover.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/examples/lena-x2-handover.cc	2016-03-23 21:36:53.000000000 -0700
@@ -218,14 +218,6 @@
   internet.Install (ueNodes);
   Ipv4InterfaceContainer ueIpIfaces;
   ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
-  // Assign IP address to UEs, and install applications
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<Node> ueNode = ueNodes.Get (u);
-      // Set the default gateway for the UE
-      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
-      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
-    }
 
 
   // Attach all UEs to the first eNodeB
diff -Naur ns-3.24.1/src/lte/examples/lena-x2-handover-measures.cc ns-3.25/src/lte/examples/lena-x2-handover-measures.cc
--- ns-3.24.1/src/lte/examples/lena-x2-handover-measures.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/lte/examples/lena-x2-handover-measures.cc	2016-03-23 21:36:53.000000000 -0700
@@ -256,15 +256,6 @@
   internet.Install (ueNodes);
   Ipv4InterfaceContainer ueIpIfaces;
   ueIpIfaces = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
-  // Assign IP address to UEs, and install applications
-  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
-    {
-      Ptr<Node> ueNode = ueNodes.Get (u);
-      // Set the default gateway for the UE
-      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
-      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
-    }
-
 
   // Attach all UEs to the first eNodeB
   for (uint16_t i = 0; i < numberOfUes; i++)
diff -Naur ns-3.24.1/src/lte/test/epc-test-run-time.pl ns-3.25/src/lte/test/epc-test-run-time.pl
--- ns-3.24.1/src/lte/test/epc-test-run-time.pl	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lte/test/epc-test-run-time.pl	2016-03-23 21:36:52.000000000 -0700
@@ -14,7 +14,7 @@
 
 
 # Configure and complite first the program to avoid counting compilation time as running time
-my $launch = "CXXFLAGS=\"-O3 -w\" ./waf -d optimized configure --enable-static --enable-examples --enable-modules=lte"
+my $launch = "CXXFLAGS=\"-O3 -w\" ./waf -d optimized configure --enable-static --enable-examples --enable-modules=lte";
 my $out, my $err;
 capture { system($launch ) } \$out, \$err;
 $launch = "./waf --run \'lena-profiling --simTime=0.1 --nUe=1 --nEnb=1 --nFloors=0\'";
@@ -26,10 +26,10 @@
             my $timeStats = Statistics::Descriptive::Full->new();
             for ( my $iteration = 0 ; $iteration < $nIterations ; $iteration++ )
             {
-               $launch = "time ./waf --run \'lena-simple-epc --simTime=$time --numberOfNodes=$node'";
+               $launch = "time -f \"real%E\" ./waf --run 'lena-simple-epc --simTime=$time --numberOfNodes=$node'";
                print "$launch\n";
                capture { system($launch ) } \$out, \$err;
-               $err =~ /real(.+)m(.+)s/;
+               $err =~ /real(.+):(.+)/;
                my $minutes = $1;
                my $seconds = $minutes * 60 + $2;
                $timeStats->add_data($seconds);
diff -Naur ns-3.24.1/src/lte/test/epc-test-s1u-uplink.cc ns-3.25/src/lte/test/epc-test-s1u-uplink.cc
--- ns-3.24.1/src/lte/test/epc-test-s1u-uplink.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lte/test/epc-test-s1u-uplink.cc	2016-03-23 21:36:52.000000000 -0700
@@ -399,8 +399,8 @@
           Ptr<ArpCache> ueArpCache = ueLteIpv4Iface->GetArpCache (); 
           ueArpCache->SetAliveTimeout (Seconds (1000));          
           ArpCache::Entry* arpCacheEntry = ueArpCache->Add (gwAddr);
-          arpCacheEntry->MarkWaitReply(0);
-          arpCacheEntry->MarkAlive (Mac48Address::GetBroadcast ()); 
+          arpCacheEntry->SetMacAddresss (Mac48Address::GetBroadcast ());
+          arpCacheEntry->MarkPermanent ();
   
           
           PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory", 
diff -Naur ns-3.24.1/src/lte/test/lte-test-interference-fr.cc ns-3.25/src/lte/test/lte-test-interference-fr.cc
--- ns-3.24.1/src/lte/test/lte-test-interference-fr.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lte/test/lte-test-interference-fr.cc	2016-03-23 21:36:53.000000000 -0700
@@ -84,8 +84,7 @@
   : TestCase ("Test: " + name),
     m_d1 (d1),
     m_d2 (d2),
-    m_expectedDlSinrDb (10 * std::log10 (dlSinr)),
-    m_expectedUlSinrDb (10 * std::log10 (ulSinr))
+    m_expectedDlSinrDb (10 * std::log10 (dlSinr))
 {
   NS_LOG_INFO ("Creating LteInterferenceFrTestCase");
 }
@@ -246,9 +245,7 @@
     m_d1 (d1),
     m_d2 (d2),
     m_commonDlSinrDb (10 * std::log10 (commonDlSinr)),
-    m_commonUlSinrDb (10 * std::log10 (commonUlSinr)),
     m_edgeDlSinrDb (10 * std::log10 (edgeDlSinr)),
-    m_edgeUlSinrDb (10 * std::log10 (edgeUlSinr)),
     m_rspqThreshold (rspqThreshold)
 {
   NS_LOG_INFO ("Creating LteInterferenceFrTestCase");
diff -Naur ns-3.24.1/src/lte/test/lte-test-interference-fr.h ns-3.25/src/lte/test/lte-test-interference-fr.h
--- ns-3.24.1/src/lte/test/lte-test-interference-fr.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lte/test/lte-test-interference-fr.h	2016-03-23 21:36:53.000000000 -0700
@@ -50,7 +50,6 @@
   double m_d1;
   double m_d2;
   double m_expectedDlSinrDb;
-  double m_expectedUlSinrDb;
 };
 
 class LteInterferenceStrictFrTestCase : public TestCase
@@ -67,9 +66,7 @@
   double m_d1;
   double m_d2;
   double m_commonDlSinrDb;
-  double m_commonUlSinrDb;
   double m_edgeDlSinrDb;
-  double m_edgeUlSinrDb;
 
   uint32_t m_rspqThreshold;
 };
diff -Naur ns-3.24.1/src/lte/test/lte-test-run-time.pl ns-3.25/src/lte/test/lte-test-run-time.pl
--- ns-3.24.1/src/lte/test/lte-test-run-time.pl	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/lte/test/lte-test-run-time.pl	2016-03-23 21:36:53.000000000 -0700
@@ -32,10 +32,10 @@
             my $timeStats = Statistics::Descriptive::Full->new();
             for ( my $iteration = 0 ; $iteration < $nIterations ; $iteration++ )
             {
-               $launch = "time ./waf --run \'lena-profiling --simTime=$time --nUe=$ue --nEnb=$enb --nFloors=$floor\'";
+               $launch = "time -f \"real%E\" ./waf --run \'lena-profiling --simTime=$time --nUe=$ue --nEnb=$enb --nFloors=$floor\'";
                print "$launch\n";
                capture { system($launch ) } \$out, \$err;
-               $err =~ /real(.+)m(.+)s/;
+               $err =~ /real(.+):(.+)/;
                my $minutes = $1;
                my $seconds = $minutes * 60 + $2;
                $timeStats->add_data($seconds);
diff -Naur ns-3.24.1/src/mesh/bindings/callbacks_list.py ns-3.25/src/mesh/bindings/callbacks_list.py
--- ns-3.24.1/src/mesh/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -12,4 +12,5 @@
     ['void', 'ns3::Mac48Address', 'unsigned char', 'bool', '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::Address const&', 'ns3::NetDevice::PacketType', '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'],
+    ['unsigned char', 'ns3::Ptr<ns3::QueueItem>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
 ]
diff -Naur ns-3.24.1/src/mesh/bindings/modulegen__gcc_ILP32.py ns-3.25/src/mesh/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/mesh/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -20,10 +20,14 @@
 def register_types(module):
     root_module = module.get_root()
     
+    ## ht-operations.h (module 'wifi'): ns3::HtProtectionType [enumeration]
+    module.add_enum('HtProtectionType', ['NO_PROTECTION', 'NON_MEMBER_PROTECTION', 'TWENTY_MHZ_PROTECTION', 'MIXED_MODE_PROTECTION'], import_from_module='ns.wifi')
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
     module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
@@ -135,7 +139,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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -160,7 +164,7 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode', import_from_module='ns.wifi')
@@ -228,12 +232,16 @@
     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::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::MeshWifiInterfaceMacPlugin', 'ns3::empty', 'ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
@@ -284,6 +292,8 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode [enumeration]
+    module.add_enum('ProtectionMode', ['RTS_CTS', 'CTS_TO_SELF'], outer_class=root_module['ns3::WifiRemoteStationManager'], import_from_module='ns.wifi')
     ## 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]
@@ -318,6 +328,12 @@
     module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## enum.h (module 'core'): ns3::EnumValue [class]
     module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
+    module.add_class('ErpInformation', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker [class]
+    module.add_class('ErpInformationChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue [class]
+    module.add_class('ErpInformationValue', import_from_module='ns.wifi', 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> >'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
@@ -328,6 +344,12 @@
     module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations [class]
+    module.add_class('HtOperations', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker [class]
+    module.add_class('HtOperationsChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue [class]
+    module.add_class('HtOperationsValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -364,6 +386,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -376,6 +402,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## regular-wifi-mac.h (module 'wifi'): ns3::RegularWifiMac [class]
     module.add_class('RegularWifiMac', import_from_module='ns.wifi', parent=root_module['ns3::WifiMac'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
@@ -421,6 +449,8 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::map< ns3::Mac48Address, bool >', ('ns3::Mac48Address', 'bool'), container_type=u'map')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type=u'vector')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
@@ -720,9 +750,11 @@
     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__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
     register_Ns3SimpleRefCount__Ns3Dot11sDestinationAddressUnit_Ns3Empty_Ns3DefaultDeleter__lt__ns3Dot11sDestinationAddressUnit__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::dot11s::DestinationAddressUnit, ns3::empty, ns3::DefaultDeleter<ns3::dot11s::DestinationAddressUnit> >'])
@@ -755,11 +787,17 @@
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
     register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
+    register_Ns3ErpInformation_methods(root_module, root_module['ns3::ErpInformation'])
+    register_Ns3ErpInformationChecker_methods(root_module, root_module['ns3::ErpInformationChecker'])
+    register_Ns3ErpInformationValue_methods(root_module, root_module['ns3::ErpInformationValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
     register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
     register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
     register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    register_Ns3HtOperations_methods(root_module, root_module['ns3::HtOperations'])
+    register_Ns3HtOperationsChecker_methods(root_module, root_module['ns3::HtOperationsChecker'])
+    register_Ns3HtOperationsValue_methods(root_module, root_module['ns3::HtOperationsValue'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -777,12 +815,15 @@
     register_Ns3MeshWifiInterfaceMacPlugin_methods(root_module, root_module['ns3::MeshWifiInterfaceMacPlugin'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
@@ -1265,10 +1306,10 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
@@ -1728,6 +1769,16 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## capability-information.h (module 'wifi'): bool ns3::CapabilityInformation::IsShortPreamble() const [member function]
+    cls.add_method('IsShortPreamble', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## capability-information.h (module 'wifi'): bool ns3::CapabilityInformation::IsShortSlotTime() const [member function]
+    cls.add_method('IsShortSlotTime', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## capability-information.h (module 'wifi'): ns3::Buffer::Iterator ns3::CapabilityInformation::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -1741,6 +1792,14 @@
     cls.add_method('SetIbss', 
                    'void', 
                    [])
+    ## capability-information.h (module 'wifi'): void ns3::CapabilityInformation::SetShortPreamble(bool shortPreamble) [member function]
+    cls.add_method('SetShortPreamble', 
+                   'void', 
+                   [param('bool', 'shortPreamble')])
+    ## capability-information.h (module 'wifi'): void ns3::CapabilityInformation::SetShortSlotTime(bool shortSlotTime) [member function]
+    cls.add_method('SetShortSlotTime', 
+                   'void', 
+                   [param('bool', 'shortSlotTime')])
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1875,6 +1934,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1890,6 +1954,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2066,7 +2135,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2912,10 +2981,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3445,7 +3518,7 @@
     cls.add_method('Default', 
                    'ns3::WifiHelper', 
                    [], 
-                   is_static=True)
+                   is_static=True, deprecated=True)
     ## wifi-helper.h (module 'wifi'): static void ns3::WifiHelper::EnableLogComponents() [member function]
     cls.add_method('EnableLogComponents', 
                    'void', 
@@ -3478,15 +3551,20 @@
     return
 
 def register_Ns3WifiMacHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper(ns3::WifiMacHelper const & arg0) [copy constructor]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper(ns3::WifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiMacHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiMacHelper::Create() const [member function]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-helper.h (module 'wifi'): void ns3::WifiMacHelper::SetType(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue(), std::string n8="", ns3::AttributeValue const & v8=ns3::EmptyAttributeValue(), std::string n9="", ns3::AttributeValue const & v9=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n8', default_value='""'), param('ns3::AttributeValue const &', 'v8', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n9', default_value='""'), param('ns3::AttributeValue const &', 'v9', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()')], 
+                   is_virtual=True)
     return
 
 def register_Ns3WifiMode_methods(root_module, cls):
@@ -3498,21 +3576,26 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize() const [member function]
     cls.add_method('GetConstellationSize', 
                    'uint16_t', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetDataRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
     cls.add_method('GetMcsValue', 
                    'uint8_t', 
@@ -3523,11 +3606,21 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetNonHtReferenceRate() const [member function]
+    cls.add_method('GetNonHtReferenceRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetPhyRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
                    'uint32_t', 
@@ -3538,6 +3631,16 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherCodeRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherCodeRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherDataRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherDataRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
     cls.add_method('IsMandatory', 
                    'bool', 
@@ -3667,6 +3770,8 @@
     cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_htSupported [variable]
+    cls.add_instance_attribute('m_htSupported', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
@@ -3676,13 +3781,17 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
-    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    cls.add_instance_attribute('m_rx', 'uint8_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
     cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortPreamble [variable]
+    cls.add_instance_attribute('m_shortPreamble', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortSlotTime [variable]
+    cls.add_instance_attribute('m_shortSlotTime', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
     cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
-    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_vhtSupported [variable]
+    cls.add_instance_attribute('m_vhtSupported', 'bool', is_const=False)
     return
 
 def register_Ns3WifiTxVector_methods(root_module, cls):
@@ -3855,10 +3964,10 @@
     cls.add_constructor([])
     ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
-    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
-    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduRefNumber [variable]
+    cls.add_instance_attribute('mpduRefNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3SignalNoiseDbm_methods(root_module, cls):
@@ -4127,6 +4236,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtAssocRequestHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
@@ -4177,6 +4291,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
@@ -4209,11 +4327,26 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtAssocResponseHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
+    cls.add_method('GetErpInformation', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtOperations ns3::MgtAssocResponseHeader::GetHtOperations() const [member function]
+    cls.add_method('GetHtOperations', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4252,10 +4385,22 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
+    cls.add_method('SetErpInformation', 
+                   'void', 
+                   [param('ns3::ErpInformation', 'erpInformation')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
                    [param('ns3::HtCapabilities', 'htcapabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtOperations(ns3::HtOperations htoperations) [member function]
+    cls.add_method('SetHtOperations', 
+                   'void', 
+                   [param('ns3::HtOperations', 'htoperations')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -4417,11 +4562,26 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtProbeResponseHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
+    cls.add_method('GetErpInformation', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtOperations ns3::MgtProbeResponseHeader::GetHtOperations() const [member function]
+    cls.add_method('GetHtOperations', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4470,10 +4630,22 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
+    cls.add_method('SetErpInformation', 
+                   'void', 
+                   [param('ns3::ErpInformation', 'erpInformation')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
                    [param('ns3::HtCapabilities', 'htcapabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtOperations(ns3::HtOperations htoperations) [member function]
+    cls.add_method('SetHtOperations', 
+                   'void', 
+                   [param('ns3::HtOperations', 'htoperations')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4600,6 +4772,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4714,6 +4890,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4750,6 +4938,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -5315,6 +5515,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5434,6 +5639,11 @@
                    'void', 
                    [param('ns3::Time', 'rifs')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5916,6 +6126,11 @@
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
     cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -5925,15 +6140,19 @@
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiTxVector txVector, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6384,10 +6603,14 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
@@ -6428,6 +6651,11 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -6438,6 +6666,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::WifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6548,6 +6791,11 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('IsValidTxVector', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
@@ -6590,10 +6838,15 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
@@ -6635,16 +6888,21 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6667,6 +6925,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedMcs(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedModes(ns3::Mac48Address address) [member function]
     cls.add_method('AddAllSupportedModes', 
                    'void', 
@@ -6687,6 +6949,10 @@
     cls.add_method('AddStationVhtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedErpSlotTime(ns3::Mac48Address address, bool isShortSlotTimeSupported) [member function]
+    cls.add_method('AddSupportedErpSlotTime', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortSlotTimeSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
@@ -6695,6 +6961,10 @@
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedPlcpPreamble(ns3::Mac48Address address, bool isShortPreambleSupported) [member function]
+    cls.add_method('AddSupportedPlcpPreamble', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortPreambleSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
     cls.add_method('DoGetCtsToSelfTxVector', 
                    'ns3::WifiTxVector', 
@@ -6725,10 +6995,10 @@
     cls.add_method('GetCtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
                    'ns3::WifiMode', 
@@ -6786,6 +7056,16 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpBasicModes() const [member function]
+    cls.add_method('GetNNonErpBasicModes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpBasicMode(uint32_t i) const [member function]
+    cls.add_method('GetNonErpBasicMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
     cls.add_method('GetNonUnicastMode', 
                    'ns3::WifiMode', 
@@ -6795,6 +7075,11 @@
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode ns3::WifiRemoteStationManager::GetProtectionMode() const [member function]
+    cls.add_method('GetProtectionMode', 
+                   'ns3::WifiRemoteStationManager::ProtectionMode', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
@@ -6804,11 +7089,36 @@
     cls.add_method('GetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortPreambleSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetUseNonErpProtection() const [member function]
+    cls.add_method('GetUseNonErpProtection', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
     cls.add_method('HasHtSupported', 
                    'bool', 
@@ -6850,18 +7160,18 @@
     cls.add_method('NeedFragmentation', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector) [member function]
     cls.add_method('NeedRts', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PrepareForQueue', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
     cls.add_method('RecordDisassociated', 
                    'void', 
@@ -6878,6 +7188,10 @@
     cls.add_method('RecordWaitAssocTxOk', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportAmpduTxStatus(ns3::Mac48Address address, uint8_t tid, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('ReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
     cls.add_method('ReportDataFailed', 
                    'void', 
@@ -6934,10 +7248,26 @@
     cls.add_method('SetMaxSsrc', 
                    'void', 
                    [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetProtectionMode(ns3::WifiRemoteStationManager::ProtectionMode mode) [member function]
+    cls.add_method('SetProtectionMode', 
+                   'void', 
+                   [param('ns3::WifiRemoteStationManager::ProtectionMode', 'mode')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortPreambleEnabled(bool enable) [member function]
+    cls.add_method('SetShortPreambleEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortSlotTimeEnabled(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetUseNonErpProtection(bool enable) [member function]
+    cls.add_method('SetUseNonErpProtection', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
@@ -6976,6 +7306,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetHtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetLongRetryCount', 
                    'uint32_t', 
@@ -6996,6 +7331,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNNonErpSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
@@ -7006,14 +7346,14 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [param('ns3::WifiRemoteStation const *', 'station')], 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetNonErpSupported', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetNumberOfSupportedRxAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfSupportedRxAntennas', 
+                   'uint8_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
@@ -7041,6 +7381,11 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetVhtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -7136,10 +7481,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -7166,6 +7511,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportAmpduTxStatus(ns3::WifiRemoteStation * station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('DoReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -7712,6 +8062,8 @@
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::m_aMpduEnabled [variable]
+    cls.add_instance_attribute('m_aMpduEnabled', 'std::map< ns3::Mac48Address, bool >', is_const=False)
     ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -7801,6 +8153,11 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::EdcaTxopN::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
@@ -7859,14 +8216,14 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [])
+                   [param('uint32_t', 'nMpdus')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('GotAddBaResponse', 
                    'void', 
@@ -7899,10 +8256,6 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
-    cls.add_method('NeedRts', 
-                   'bool', 
-                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
@@ -7957,6 +8310,10 @@
     cls.add_method('SetMsduAggregator', 
                    'void', 
                    [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggr) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggr')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('PushFront', 
                    'void', 
@@ -7986,14 +8343,14 @@
     cls.add_method('CompleteMpduTx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+                   [param('ns3::Mac48Address', 'dest')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
-                   [param('bool', 'ampdu')])
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')])
     ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
     cls.add_method('GetNextSequenceNumberfor', 
                    'uint16_t', 
@@ -8129,6 +8486,115 @@
                    [param('int', 'value')])
     return
 
+def register_Ns3ErpInformation_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation(ns3::ErpInformation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformation const &', 'arg0')])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## erp-information.h (module 'wifi'): ns3::WifiInformationElementId ns3::ErpInformation::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetBarkerPreambleMode() const [member function]
+    cls.add_method('GetBarkerPreambleMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetNonErpPresent() const [member function]
+    cls.add_method('GetNonErpPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint16_t ns3::ErpInformation::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetUseProtection() const [member function]
+    cls.add_method('GetUseProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): ns3::Buffer::Iterator ns3::ErpInformation::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetBarkerPreambleMode(uint8_t barkerPreambleMode) [member function]
+    cls.add_method('SetBarkerPreambleMode', 
+                   'void', 
+                   [param('uint8_t', 'barkerPreambleMode')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetErpSupported(uint8_t erpSupported) [member function]
+    cls.add_method('SetErpSupported', 
+                   'void', 
+                   [param('uint8_t', 'erpSupported')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetNonErpPresent(uint8_t nonErpPresent) [member function]
+    cls.add_method('SetNonErpPresent', 
+                   'void', 
+                   [param('uint8_t', 'nonErpPresent')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetUseProtection(uint8_t useProtection) [member function]
+    cls.add_method('SetUseProtection', 
+                   'void', 
+                   [param('uint8_t', 'useProtection')])
+    return
+
+def register_Ns3ErpInformationChecker_methods(root_module, cls):
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker::ErpInformationChecker() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker::ErpInformationChecker(ns3::ErpInformationChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformationChecker const &', 'arg0')])
+    return
+
+def register_Ns3ErpInformationValue_methods(root_module, cls):
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue(ns3::ErpInformationValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformationValue const &', 'arg0')])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue(ns3::ErpInformation const & value) [constructor]
+    cls.add_constructor([param('ns3::ErpInformation const &', 'value')])
+    ## erp-information.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::ErpInformationValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): bool ns3::ErpInformationValue::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)
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation ns3::ErpInformationValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): std::string ns3::ErpInformationValue::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)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformationValue::Set(ns3::ErpInformation const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ErpInformation const &', 'value')])
+    return
+
 def register_Ns3EventImpl_methods(root_module, cls):
     ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
@@ -8262,6 +8728,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetRxHighestSupportedAntennas() const [member function]
+    cls.add_method('GetRxHighestSupportedAntennas', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
     cls.add_method('GetRxHighestSupportedDataRate', 
                    'uint16_t', 
@@ -8316,10 +8787,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) const [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
-                   [param('uint8_t', 'mcs')])
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -8406,6 +8888,14 @@
     cls.add_method('SetTxMcsSetDefined', 
                    'void', 
                    [param('uint8_t', 'txmcssetdefined')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8448,6 +8938,299 @@
                    [param('ns3::HtCapabilities const &', 'value')])
     return
 
+def register_Ns3HtOperations_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations::HtOperations(ns3::HtOperations const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperations const &', 'arg0')])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations::HtOperations() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-operations.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtOperations::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): uint64_t ns3::HtOperations::GetBasicMcsSet1() const [member function]
+    cls.add_method('GetBasicMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint64_t ns3::HtOperations::GetBasicMcsSet2() const [member function]
+    cls.add_method('GetBasicMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetDualBeacon() const [member function]
+    cls.add_method('GetDualBeacon', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetDualCtsProtection() const [member function]
+    cls.add_method('GetDualCtsProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetHtProtection() const [member function]
+    cls.add_method('GetHtProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetInformationSubset1() const [member function]
+    cls.add_method('GetInformationSubset1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetInformationSubset2() const [member function]
+    cls.add_method('GetInformationSubset2', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetInformationSubset3() const [member function]
+    cls.add_method('GetInformationSubset3', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetLSigTxopProtectionFullSupport() const [member function]
+    cls.add_method('GetLSigTxopProtectionFullSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetNonGfHtStasPresent() const [member function]
+    cls.add_method('GetNonGfHtStasPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetObssNonHtStasPresent() const [member function]
+    cls.add_method('GetObssNonHtStasPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPcoActive() const [member function]
+    cls.add_method('GetPcoActive', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPhase() const [member function]
+    cls.add_method('GetPhase', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPrimaryChannel() const [member function]
+    cls.add_method('GetPrimaryChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetRifsMode() const [member function]
+    cls.add_method('GetRifsMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetSecondaryChannelOffset() const [member function]
+    cls.add_method('GetSecondaryChannelOffset', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetStaChannelWidth() const [member function]
+    cls.add_method('GetStaChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetStbcBeacon() const [member function]
+    cls.add_method('GetStbcBeacon', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): bool ns3::HtOperations::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-operations.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtOperations::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetBasicMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetBasicMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetDualBeacon(uint8_t dualbeacon) [member function]
+    cls.add_method('SetDualBeacon', 
+                   'void', 
+                   [param('uint8_t', 'dualbeacon')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetDualCtsProtection(uint8_t dualctsprotection) [member function]
+    cls.add_method('SetDualCtsProtection', 
+                   'void', 
+                   [param('uint8_t', 'dualctsprotection')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetHtProtection(uint8_t htprotection) [member function]
+    cls.add_method('SetHtProtection', 
+                   'void', 
+                   [param('uint8_t', 'htprotection')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset1(uint8_t ctrl) [member function]
+    cls.add_method('SetInformationSubset1', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset2(uint16_t ctrl) [member function]
+    cls.add_method('SetInformationSubset2', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset3(uint16_t ctrl) [member function]
+    cls.add_method('SetInformationSubset3', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetLSigTxopProtectionFullSupport(uint8_t lsigtxopprotectionfullsupport) [member function]
+    cls.add_method('SetLSigTxopProtectionFullSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigtxopprotectionfullsupport')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetNonGfHtStasPresent(uint8_t nongfhtstaspresent) [member function]
+    cls.add_method('SetNonGfHtStasPresent', 
+                   'void', 
+                   [param('uint8_t', 'nongfhtstaspresent')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetObssNonHtStasPresent(uint8_t obssnonhtstaspresent) [member function]
+    cls.add_method('SetObssNonHtStasPresent', 
+                   'void', 
+                   [param('uint8_t', 'obssnonhtstaspresent')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPcoActive(uint8_t pcoactive) [member function]
+    cls.add_method('SetPcoActive', 
+                   'void', 
+                   [param('uint8_t', 'pcoactive')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPhase(uint8_t pcophase) [member function]
+    cls.add_method('SetPhase', 
+                   'void', 
+                   [param('uint8_t', 'pcophase')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPrimaryChannel(uint8_t ctrl) [member function]
+    cls.add_method('SetPrimaryChannel', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRifsMode(uint8_t rifsmode) [member function]
+    cls.add_method('SetRifsMode', 
+                   'void', 
+                   [param('uint8_t', 'rifsmode')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetSecondaryChannelOffset(uint8_t secondarychanneloffset) [member function]
+    cls.add_method('SetSecondaryChannelOffset', 
+                   'void', 
+                   [param('uint8_t', 'secondarychanneloffset')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetStaChannelWidth(uint8_t stachannelwidth) [member function]
+    cls.add_method('SetStaChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'stachannelwidth')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetStbcBeacon(uint8_t stbcbeacon) [member function]
+    cls.add_method('SetStbcBeacon', 
+                   'void', 
+                   [param('uint8_t', 'stbcbeacon')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
+    return
+
+def register_Ns3HtOperationsChecker_methods(root_module, cls):
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker::HtOperationsChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker::HtOperationsChecker(ns3::HtOperationsChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperationsChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtOperationsValue_methods(root_module, cls):
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue(ns3::HtOperationsValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperationsValue const &', 'arg0')])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue(ns3::HtOperations const & value) [constructor]
+    cls.add_constructor([param('ns3::HtOperations const &', 'value')])
+    ## ht-operations.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtOperationsValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): bool ns3::HtOperationsValue::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)
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations ns3::HtOperationsValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): std::string ns3::HtOperationsValue::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)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperationsValue::Set(ns3::HtOperations const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtOperations const &', 'value')])
+    return
+
 def register_Ns3IntegerValue_methods(root_module, cls):
     ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
@@ -8937,6 +9720,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -9016,6 +9885,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -9302,6 +10176,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -9389,6 +10284,16 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -9464,6 +10369,16 @@
                    'ns3::Ptr< ns3::WifiRemoteStationManager >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::HtCapabilities ns3::RegularWifiMac::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::VhtCapabilities ns3::RegularWifiMac::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
     cls.add_method('SetForwardUpCallback', 
                    'void', 
@@ -9539,6 +10454,11 @@
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    visibility='protected', is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ConfigureContentionWindow(uint32_t cwMin, uint32_t cwMax) [member function]
+    cls.add_method('ConfigureContentionWindow', 
+                   'void', 
+                   [param('uint32_t', 'cwMin'), param('uint32_t', 'cwMax')], 
+                   visibility='protected')
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetTypeOfStation(ns3::TypeOfStation type) [member function]
     cls.add_method('SetTypeOfStation', 
                    'void', 
@@ -9604,6 +10524,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetErpSupported(bool enable) [member function]
+    cls.add_method('SetErpSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetErpSupported() const [member function]
+    cls.add_method('GetErpSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
diff -Naur ns-3.24.1/src/mesh/bindings/modulegen__gcc_LP64.py ns-3.25/src/mesh/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/mesh/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -20,10 +20,14 @@
 def register_types(module):
     root_module = module.get_root()
     
+    ## ht-operations.h (module 'wifi'): ns3::HtProtectionType [enumeration]
+    module.add_enum('HtProtectionType', ['NO_PROTECTION', 'NON_MEMBER_PROTECTION', 'TWENTY_MHZ_PROTECTION', 'MIXED_MODE_PROTECTION'], import_from_module='ns.wifi')
     ## wifi-mac-header.h (module 'wifi'): ns3::WifiMacType [enumeration]
-    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
+    module.add_enum('WifiMacType', ['WIFI_MAC_CTL_CTLWRAPPER', 'WIFI_MAC_CTL_RTS', 'WIFI_MAC_CTL_CTS', 'WIFI_MAC_CTL_ACK', 'WIFI_MAC_CTL_BACKREQ', 'WIFI_MAC_CTL_BACKRESP', 'WIFI_MAC_MGT_BEACON', 'WIFI_MAC_MGT_ASSOCIATION_REQUEST', 'WIFI_MAC_MGT_ASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_DISASSOCIATION', 'WIFI_MAC_MGT_REASSOCIATION_REQUEST', 'WIFI_MAC_MGT_REASSOCIATION_RESPONSE', 'WIFI_MAC_MGT_PROBE_REQUEST', 'WIFI_MAC_MGT_PROBE_RESPONSE', 'WIFI_MAC_MGT_AUTHENTICATION', 'WIFI_MAC_MGT_DEAUTHENTICATION', 'WIFI_MAC_MGT_ACTION', 'WIFI_MAC_MGT_ACTION_NO_ACK', 'WIFI_MAC_MGT_MULTIHOP_ACTION', 'WIFI_MAC_DATA', 'WIFI_MAC_DATA_CFACK', 'WIFI_MAC_DATA_CFPOLL', 'WIFI_MAC_DATA_CFACK_CFPOLL', 'WIFI_MAC_DATA_NULL', 'WIFI_MAC_DATA_NULL_CFACK', 'WIFI_MAC_DATA_NULL_CFPOLL', 'WIFI_MAC_DATA_NULL_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA', 'WIFI_MAC_QOSDATA_CFACK', 'WIFI_MAC_QOSDATA_CFPOLL', 'WIFI_MAC_QOSDATA_CFACK_CFPOLL', 'WIFI_MAC_QOSDATA_NULL', 'WIFI_MAC_QOSDATA_NULL_CFPOLL', 'WIFI_MAC_QOSDATA_NULL_CFACK_CFPOLL'], import_from_module='ns.wifi')
     ## wifi-preamble.h (module 'wifi'): ns3::WifiPreamble [enumeration]
     module.add_enum('WifiPreamble', ['WIFI_PREAMBLE_LONG', 'WIFI_PREAMBLE_SHORT', 'WIFI_PREAMBLE_HT_MF', 'WIFI_PREAMBLE_HT_GF', 'WIFI_PREAMBLE_VHT', 'WIFI_PREAMBLE_NONE'], import_from_module='ns.wifi')
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'], import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiModulationClass [enumeration]
     module.add_enum('WifiModulationClass', ['WIFI_MOD_CLASS_UNKNOWN', 'WIFI_MOD_CLASS_IR', 'WIFI_MOD_CLASS_FHSS', 'WIFI_MOD_CLASS_DSSS', 'WIFI_MOD_CLASS_HR_DSSS', 'WIFI_MOD_CLASS_ERP_PBCC', 'WIFI_MOD_CLASS_DSSS_OFDM', 'WIFI_MOD_CLASS_ERP_OFDM', 'WIFI_MOD_CLASS_OFDM', 'WIFI_MOD_CLASS_HT', 'WIFI_MOD_CLASS_VHT'], import_from_module='ns.wifi')
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
@@ -135,7 +139,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_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
+    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SLL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'], import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True, import_from_module='ns.network')
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
@@ -160,7 +164,7 @@
     module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True, import_from_module='ns.wifi')
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True, import_from_module='ns.wifi')
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode', import_from_module='ns.wifi')
@@ -228,12 +232,16 @@
     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::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::MeshWifiInterfaceMacPlugin', 'ns3::empty', 'ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin>'], 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::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::NetDeviceQueue', 'ns3::empty', 'ns3::DefaultDeleter<ns3::NetDeviceQueue>'], 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::QueueItem', 'ns3::empty', 'ns3::DefaultDeleter<ns3::QueueItem>'], 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'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> > [class]
@@ -284,6 +292,8 @@
     module.add_enum('State', ['IDLE', 'CCA_BUSY', 'TX', 'RX', 'SWITCHING', 'SLEEP'], outer_class=root_module['ns3::WifiPhy'], import_from_module='ns.wifi')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', import_from_module='ns.wifi', parent=root_module['ns3::Object'])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode [enumeration]
+    module.add_enum('ProtectionMode', ['RTS_CTS', 'CTS_TO_SELF'], outer_class=root_module['ns3::WifiRemoteStationManager'], import_from_module='ns.wifi')
     ## 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]
@@ -318,6 +328,12 @@
     module.add_class('EnumChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## enum.h (module 'core'): ns3::EnumValue [class]
     module.add_class('EnumValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
+    module.add_class('ErpInformation', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker [class]
+    module.add_class('ErpInformationChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue [class]
+    module.add_class('ErpInformationValue', import_from_module='ns.wifi', 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> >'])
     ## supported-rates.h (module 'wifi'): ns3::ExtendedSupportedRatesIE [class]
@@ -328,6 +344,12 @@
     module.add_class('HtCapabilitiesChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations [class]
+    module.add_class('HtOperations', import_from_module='ns.wifi', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker [class]
+    module.add_class('HtOperationsChecker', import_from_module='ns.wifi', parent=root_module['ns3::AttributeChecker'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue [class]
+    module.add_class('HtOperationsValue', import_from_module='ns.wifi', parent=root_module['ns3::AttributeValue'])
     ## integer.h (module 'core'): ns3::IntegerValue [class]
     module.add_class('IntegerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## ipv4-address.h (module 'network'): ns3::Ipv4AddressChecker [class]
@@ -364,6 +386,10 @@
     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')
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface [class]
+    module.add_class('NetDeviceQueueInterface', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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]
@@ -376,6 +402,8 @@
     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> >'])
+    ## net-device.h (module 'network'): ns3::QueueItem [class]
+    module.add_class('QueueItem', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     ## regular-wifi-mac.h (module 'wifi'): ns3::RegularWifiMac [class]
     module.add_class('RegularWifiMac', import_from_module='ns.wifi', parent=root_module['ns3::WifiMac'])
     ## ssid.h (module 'wifi'): ns3::Ssid [class]
@@ -421,6 +449,8 @@
     ## mesh-wifi-interface-mac.h (module 'mesh'): ns3::MeshWifiInterfaceMac [class]
     module.add_class('MeshWifiInterfaceMac', parent=root_module['ns3::RegularWifiMac'])
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
+    module.add_container('std::map< ns3::Mac48Address, bool >', ('ns3::Mac48Address', 'bool'), container_type=u'map')
     module.add_container('std::vector< ns3::Ptr< ns3::NetDevice > >', 'ns3::Ptr< ns3::NetDevice >', container_type=u'vector')
     typehandlers.add_type_alias(u'uint8_t', u'ns3::WifiInformationElementId')
     typehandlers.add_type_alias(u'uint8_t*', u'ns3::WifiInformationElementId*')
@@ -720,9 +750,11 @@
     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__Ns3MeshWifiInterfaceMacPlugin_Ns3Empty_Ns3DefaultDeleter__lt__ns3MeshWifiInterfaceMacPlugin__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::MeshWifiInterfaceMacPlugin, ns3::empty, ns3::DefaultDeleter<ns3::MeshWifiInterfaceMacPlugin> >'])
+    register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >'])
     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__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3SimpleRefCount__Ns3WifiInformationElement_Ns3Empty_Ns3DefaultDeleter__lt__ns3WifiInformationElement__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::WifiInformationElement, ns3::empty, ns3::DefaultDeleter<ns3::WifiInformationElement> >'])
     register_Ns3SimpleRefCount__Ns3Dot11sDestinationAddressUnit_Ns3Empty_Ns3DefaultDeleter__lt__ns3Dot11sDestinationAddressUnit__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::dot11s::DestinationAddressUnit, ns3::empty, ns3::DefaultDeleter<ns3::dot11s::DestinationAddressUnit> >'])
@@ -755,11 +787,17 @@
     register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
     register_Ns3EnumChecker_methods(root_module, root_module['ns3::EnumChecker'])
     register_Ns3EnumValue_methods(root_module, root_module['ns3::EnumValue'])
+    register_Ns3ErpInformation_methods(root_module, root_module['ns3::ErpInformation'])
+    register_Ns3ErpInformationChecker_methods(root_module, root_module['ns3::ErpInformationChecker'])
+    register_Ns3ErpInformationValue_methods(root_module, root_module['ns3::ErpInformationValue'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
     register_Ns3HtCapabilities_methods(root_module, root_module['ns3::HtCapabilities'])
     register_Ns3HtCapabilitiesChecker_methods(root_module, root_module['ns3::HtCapabilitiesChecker'])
     register_Ns3HtCapabilitiesValue_methods(root_module, root_module['ns3::HtCapabilitiesValue'])
+    register_Ns3HtOperations_methods(root_module, root_module['ns3::HtOperations'])
+    register_Ns3HtOperationsChecker_methods(root_module, root_module['ns3::HtOperationsChecker'])
+    register_Ns3HtOperationsValue_methods(root_module, root_module['ns3::HtOperationsValue'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
     register_Ns3Ipv4AddressChecker_methods(root_module, root_module['ns3::Ipv4AddressChecker'])
     register_Ns3Ipv4AddressValue_methods(root_module, root_module['ns3::Ipv4AddressValue'])
@@ -777,12 +815,15 @@
     register_Ns3MeshWifiInterfaceMacPlugin_methods(root_module, root_module['ns3::MeshWifiInterfaceMacPlugin'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_Ns3NetDeviceQueue_methods(root_module, root_module['ns3::NetDeviceQueue'])
+    register_Ns3NetDeviceQueueInterface_methods(root_module, root_module['ns3::NetDeviceQueueInterface'])
     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_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
     register_Ns3SsidChecker_methods(root_module, root_module['ns3::SsidChecker'])
@@ -1265,10 +1306,10 @@
     cls.add_method('NotifyAgreementUnsuccessful', 
                    'void', 
                    [param('ns3::Mac48Address', 'recipient'), param('uint8_t', 'tid')])
-    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyGotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('NotifyGotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')])
     ## block-ack-manager.h (module 'wifi'): void ns3::BlockAckManager::NotifyMpduTransmission(ns3::Mac48Address recipient, uint8_t tid, uint16_t nextSeqNumber, ns3::WifiMacHeader::QosAckPolicy policy) [member function]
     cls.add_method('NotifyMpduTransmission', 
                    'void', 
@@ -1728,6 +1769,16 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## capability-information.h (module 'wifi'): bool ns3::CapabilityInformation::IsShortPreamble() const [member function]
+    cls.add_method('IsShortPreamble', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## capability-information.h (module 'wifi'): bool ns3::CapabilityInformation::IsShortSlotTime() const [member function]
+    cls.add_method('IsShortSlotTime', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## capability-information.h (module 'wifi'): ns3::Buffer::Iterator ns3::CapabilityInformation::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -1741,6 +1792,14 @@
     cls.add_method('SetIbss', 
                    'void', 
                    [])
+    ## capability-information.h (module 'wifi'): void ns3::CapabilityInformation::SetShortPreamble(bool shortPreamble) [member function]
+    cls.add_method('SetShortPreamble', 
+                   'void', 
+                   [param('bool', 'shortPreamble')])
+    ## capability-information.h (module 'wifi'): void ns3::CapabilityInformation::SetShortSlotTime(bool shortSlotTime) [member function]
+    cls.add_method('SetShortSlotTime', 
+                   'void', 
+                   [param('bool', 'shortSlotTime')])
     return
 
 def register_Ns3EventId_methods(root_module, cls):
@@ -1875,6 +1934,11 @@
                    'ns3::Ipv4Address', 
                    [], 
                    is_static=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsAny() const [member function]
+    cls.add_method('IsAny', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsBroadcast() const [member function]
     cls.add_method('IsBroadcast', 
                    'bool', 
@@ -1890,6 +1954,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## ipv4-address.h (module 'network'): bool ns3::Ipv4Address::IsLocalhost() const [member function]
+    cls.add_method('IsLocalhost', 
+                   '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', 
@@ -2066,7 +2135,7 @@
     cls.add_method('IsAllHostsMulticast', 
                    'bool', 
                    [], 
-                   is_const=True)
+                   deprecated=True, is_const=True)
     ## ipv6-address.h (module 'network'): bool ns3::Ipv6Address::IsAllNodesMulticast() const [member function]
     cls.add_method('IsAllNodesMulticast', 
                    'bool', 
@@ -2912,10 +2981,14 @@
     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]
+    ## 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, bool nanosecMode=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')])
+                   [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'), param('bool', 'nanosecMode', default_value='false')])
+    ## pcap-file.h (module 'network'): bool ns3::PcapFile::IsNanoSecMode() [member function]
+    cls.add_method('IsNanoSecMode', 
+                   'bool', 
+                   [])
     ## pcap-file.h (module 'network'): void ns3::PcapFile::Open(std::string const & filename, std::_Ios_Openmode mode) [member function]
     cls.add_method('Open', 
                    'void', 
@@ -3445,7 +3518,7 @@
     cls.add_method('Default', 
                    'ns3::WifiHelper', 
                    [], 
-                   is_static=True)
+                   is_static=True, deprecated=True)
     ## wifi-helper.h (module 'wifi'): static void ns3::WifiHelper::EnableLogComponents() [member function]
     cls.add_method('EnableLogComponents', 
                    'void', 
@@ -3478,15 +3551,20 @@
     return
 
 def register_Ns3WifiMacHelper_methods(root_module, cls):
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper(ns3::WifiMacHelper const & arg0) [copy constructor]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper(ns3::WifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::WifiMacHelper const &', 'arg0')])
-    ## wifi-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiMacHelper::Create() const [member function]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper::WifiMacHelper() [constructor]
+    cls.add_constructor([])
+    ## wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::WifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
                    'ns3::Ptr< ns3::WifiMac >', 
                    [], 
-                   is_pure_virtual=True, is_const=True, is_virtual=True)
+                   is_const=True, is_virtual=True)
+    ## wifi-mac-helper.h (module 'wifi'): void ns3::WifiMacHelper::SetType(std::string type, std::string n0="", ns3::AttributeValue const & v0=ns3::EmptyAttributeValue(), std::string n1="", ns3::AttributeValue const & v1=ns3::EmptyAttributeValue(), std::string n2="", ns3::AttributeValue const & v2=ns3::EmptyAttributeValue(), std::string n3="", ns3::AttributeValue const & v3=ns3::EmptyAttributeValue(), std::string n4="", ns3::AttributeValue const & v4=ns3::EmptyAttributeValue(), std::string n5="", ns3::AttributeValue const & v5=ns3::EmptyAttributeValue(), std::string n6="", ns3::AttributeValue const & v6=ns3::EmptyAttributeValue(), std::string n7="", ns3::AttributeValue const & v7=ns3::EmptyAttributeValue(), std::string n8="", ns3::AttributeValue const & v8=ns3::EmptyAttributeValue(), std::string n9="", ns3::AttributeValue const & v9=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetType', 
+                   'void', 
+                   [param('std::string', 'type'), param('std::string', 'n0', default_value='""'), param('ns3::AttributeValue const &', 'v0', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n1', default_value='""'), param('ns3::AttributeValue const &', 'v1', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n2', default_value='""'), param('ns3::AttributeValue const &', 'v2', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n3', default_value='""'), param('ns3::AttributeValue const &', 'v3', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n4', default_value='""'), param('ns3::AttributeValue const &', 'v4', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n5', default_value='""'), param('ns3::AttributeValue const &', 'v5', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n6', default_value='""'), param('ns3::AttributeValue const &', 'v6', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n7', default_value='""'), param('ns3::AttributeValue const &', 'v7', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n8', default_value='""'), param('ns3::AttributeValue const &', 'v8', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n9', default_value='""'), param('ns3::AttributeValue const &', 'v9', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()')], 
+                   is_virtual=True)
     return
 
 def register_Ns3WifiMode_methods(root_module, cls):
@@ -3498,21 +3576,26 @@
     cls.add_constructor([])
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode::WifiMode(std::string name) [constructor]
     cls.add_constructor([param('std::string', 'name')])
-    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate ns3::WifiMode::GetCodeRate() const [member function]
     cls.add_method('GetCodeRate', 
                    'ns3::WifiCodeRate', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
-    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize(uint8_t nss) const [member function]
+    ## wifi-mode.h (module 'wifi'): uint16_t ns3::WifiMode::GetConstellationSize() const [member function]
     cls.add_method('GetConstellationSize', 
                    'uint16_t', 
-                   [param('uint8_t', 'nss')], 
+                   [], 
                    is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetDataRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetDataRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetDataRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint8_t ns3::WifiMode::GetMcsValue() const [member function]
     cls.add_method('GetMcsValue', 
                    'uint8_t', 
@@ -3523,11 +3606,21 @@
                    'ns3::WifiModulationClass', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetNonHtReferenceRate() const [member function]
+    cls.add_method('GetNonHtReferenceRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const [member function]
     cls.add_method('GetPhyRate', 
                    'uint64_t', 
                    [param('uint32_t', 'channelWidth'), param('bool', 'isShortGuardInterval'), param('uint8_t', 'nss')], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): uint64_t ns3::WifiMode::GetPhyRate(ns3::WifiTxVector txVector) const [member function]
+    cls.add_method('GetPhyRate', 
+                   'uint64_t', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): uint32_t ns3::WifiMode::GetUid() const [member function]
     cls.add_method('GetUid', 
                    'uint32_t', 
@@ -3538,6 +3631,16 @@
                    'std::string', 
                    [], 
                    is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherCodeRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherCodeRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
+    ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsHigherDataRate(ns3::WifiMode mode) const [member function]
+    cls.add_method('IsHigherDataRate', 
+                   'bool', 
+                   [param('ns3::WifiMode', 'mode')], 
+                   is_const=True)
     ## wifi-mode.h (module 'wifi'): bool ns3::WifiMode::IsMandatory() const [member function]
     cls.add_method('IsMandatory', 
                    'bool', 
@@ -3667,6 +3770,8 @@
     cls.add_instance_attribute('m_channelWidth', 'uint32_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_greenfield [variable]
     cls.add_instance_attribute('m_greenfield', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_htSupported [variable]
+    cls.add_instance_attribute('m_htSupported', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_info [variable]
     cls.add_instance_attribute('m_info', 'ns3::WifiRemoteStationInfo', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_ness [variable]
@@ -3676,13 +3781,17 @@
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_operationalRateSet [variable]
     cls.add_instance_attribute('m_operationalRateSet', 'ns3::WifiModeList', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_rx [variable]
-    cls.add_instance_attribute('m_rx', 'uint32_t', is_const=False)
+    cls.add_instance_attribute('m_rx', 'uint8_t', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortGuardInterval [variable]
     cls.add_instance_attribute('m_shortGuardInterval', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortPreamble [variable]
+    cls.add_instance_attribute('m_shortPreamble', 'bool', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_shortSlotTime [variable]
+    cls.add_instance_attribute('m_shortSlotTime', 'bool', is_const=False)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_stbc [variable]
     cls.add_instance_attribute('m_stbc', 'bool', is_const=False)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_tx [variable]
-    cls.add_instance_attribute('m_tx', 'uint32_t', is_const=False)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationState::m_vhtSupported [variable]
+    cls.add_instance_attribute('m_vhtSupported', 'bool', is_const=False)
     return
 
 def register_Ns3WifiTxVector_methods(root_module, cls):
@@ -3855,10 +3964,10 @@
     cls.add_constructor([])
     ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduInfo(ns3::mpduInfo const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::mpduInfo const &', 'arg0')])
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::packetType [variable]
-    cls.add_instance_attribute('packetType', 'uint8_t', is_const=False)
-    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::referenceNumber [variable]
-    cls.add_instance_attribute('referenceNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::mpduRefNumber [variable]
+    cls.add_instance_attribute('mpduRefNumber', 'uint32_t', is_const=False)
+    ## wifi-phy.h (module 'wifi'): ns3::mpduInfo::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3SignalNoiseDbm_methods(root_module, cls):
@@ -4127,6 +4236,11 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtAssocRequestHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocRequestHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
@@ -4177,6 +4291,10 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocRequestHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
@@ -4209,11 +4327,26 @@
                    'uint32_t', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtAssocResponseHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtAssocResponseHeader::GetErpInformation() const [member function]
+    cls.add_method('GetErpInformation', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtAssocResponseHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtOperations ns3::MgtAssocResponseHeader::GetHtOperations() const [member function]
+    cls.add_method('GetHtOperations', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtAssocResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4252,10 +4385,22 @@
                    'void', 
                    [param('ns3::Buffer::Iterator', 'start')], 
                    is_const=True, is_virtual=True)
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
+    cls.add_method('SetErpInformation', 
+                   'void', 
+                   [param('ns3::ErpInformation', 'erpInformation')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
                    [param('ns3::HtCapabilities', 'htcapabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetHtOperations(ns3::HtOperations htoperations) [member function]
+    cls.add_method('SetHtOperations', 
+                   'void', 
+                   [param('ns3::HtOperations', 'htoperations')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtAssocResponseHeader::SetStatusCode(ns3::StatusCode code) [member function]
     cls.add_method('SetStatusCode', 
                    'void', 
@@ -4417,11 +4562,26 @@
                    'uint64_t', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::CapabilityInformation ns3::MgtProbeResponseHeader::GetCapabilities() const [member function]
+    cls.add_method('GetCapabilities', 
+                   'ns3::CapabilityInformation', 
+                   [], 
+                   is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::ErpInformation ns3::MgtProbeResponseHeader::GetErpInformation() const [member function]
+    cls.add_method('GetErpInformation', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::HtCapabilities ns3::MgtProbeResponseHeader::GetHtCapabilities() const [member function]
     cls.add_method('GetHtCapabilities', 
                    'ns3::HtCapabilities', 
                    [], 
                    is_const=True)
+    ## mgt-headers.h (module 'wifi'): ns3::HtOperations ns3::MgtProbeResponseHeader::GetHtOperations() const [member function]
+    cls.add_method('GetHtOperations', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
     ## mgt-headers.h (module 'wifi'): ns3::TypeId ns3::MgtProbeResponseHeader::GetInstanceTypeId() const [member function]
     cls.add_method('GetInstanceTypeId', 
                    'ns3::TypeId', 
@@ -4470,10 +4630,22 @@
     cls.add_method('SetBeaconIntervalUs', 
                    'void', 
                    [param('uint64_t', 'us')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetCapabilities(ns3::CapabilityInformation capabilities) [member function]
+    cls.add_method('SetCapabilities', 
+                   'void', 
+                   [param('ns3::CapabilityInformation', 'capabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetErpInformation(ns3::ErpInformation erpInformation) [member function]
+    cls.add_method('SetErpInformation', 
+                   'void', 
+                   [param('ns3::ErpInformation', 'erpInformation')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtCapabilities(ns3::HtCapabilities htcapabilities) [member function]
     cls.add_method('SetHtCapabilities', 
                    'void', 
                    [param('ns3::HtCapabilities', 'htcapabilities')])
+    ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetHtOperations(ns3::HtOperations htoperations) [member function]
+    cls.add_method('SetHtOperations', 
+                   'void', 
+                   [param('ns3::HtOperations', 'htoperations')])
     ## mgt-headers.h (module 'wifi'): void ns3::MgtProbeResponseHeader::SetSsid(ns3::Ssid ssid) [member function]
     cls.add_method('SetSsid', 
                    'void', 
@@ -4600,6 +4772,10 @@
     cls.add_method('Write', 
                    'void', 
                    [param('ns3::Time', 't'), param('uint8_t const *', 'buffer'), param('uint32_t', 'length')])
+    ## pcap-file-wrapper.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::PcapFileWrapper::Read(ns3::Time & t) [member function]
+    cls.add_method('Read', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('ns3::Time &', 't')])
     ## pcap-file-wrapper.h (module 'network'): uint32_t ns3::PcapFileWrapper::GetMagic() [member function]
     cls.add_method('GetMagic', 
                    'uint32_t', 
@@ -4714,6 +4890,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3NetDeviceQueue_Ns3Empty_Ns3DefaultDeleter__lt__ns3NetDeviceQueue__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter< ns3::NetDeviceQueue > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NetDeviceQueue, ns3::empty, ns3::DefaultDeleter<ns3::NetDeviceQueue> >::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([])
@@ -4750,6 +4938,18 @@
                    is_static=True)
     return
 
+def register_Ns3SimpleRefCount__Ns3QueueItem_Ns3Empty_Ns3DefaultDeleter__lt__ns3QueueItem__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::SimpleRefCount(ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::QueueItem, ns3::empty, ns3::DefaultDeleter< ns3::QueueItem > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> >::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([])
@@ -5315,6 +5515,11 @@
                    'ns3::Time', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): bool ns3::WifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): ns3::Time ns3::WifiMac::GetSifs() const [member function]
     cls.add_method('GetSifs', 
                    'ns3::Time', 
@@ -5434,6 +5639,11 @@
                    'void', 
                    [param('ns3::Time', 'rifs')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-mac.h (module 'wifi'): void ns3::WifiMac::SetSifs(ns3::Time sifs) [member function]
     cls.add_method('SetSifs', 
                    'void', 
@@ -5916,6 +6126,11 @@
     cls.add_constructor([param('ns3::WifiPhy const &', 'arg0')])
     ## wifi-phy.h (module 'wifi'): ns3::WifiPhy::WifiPhy() [constructor]
     cls.add_constructor([])
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): int64_t ns3::WifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -5925,15 +6140,19 @@
     cls.add_method('CalculatePlcpPreambleAndHeaderDuration', 
                    'ns3::Time', 
                    [param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')])
-    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::CalculateSnr(ns3::WifiTxVector txVector, double ber) const [member function]
     cls.add_method('CalculateSnr', 
                    'double', 
-                   [param('ns3::WifiMode', 'txMode'), param('double', 'ber')], 
+                   [param('ns3::WifiTxVector', 'txVector'), param('double', 'ber')], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
+    cls.add_method('CalculateTxDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::CalculateTxDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
     cls.add_method('CalculateTxDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
                    'void', 
@@ -6384,10 +6603,14 @@
                    'ns3::WifiMode', 
                    [], 
                    is_static=True)
-    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag) [member function]
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency) [member function]
     cls.add_method('GetPayloadDuration', 
                    'ns3::Time', 
-                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('uint8_t', 'packetType'), param('uint8_t', 'incFlag')])
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency')])
+    ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetPayloadDuration(uint32_t size, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, double frequency, ns3::mpduType mpdutype, uint8_t incFlag) [member function]
+    cls.add_method('GetPayloadDuration', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'size'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('double', 'frequency'), param('ns3::mpduType', 'mpdutype'), param('uint8_t', 'incFlag')])
     ## wifi-phy.h (module 'wifi'): static ns3::Time ns3::WifiPhy::GetPlcpHeaderDuration(ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('GetPlcpHeaderDuration', 
                    'ns3::Time', 
@@ -6428,6 +6651,11 @@
                    'ns3::Time', 
                    [param('ns3::WifiPreamble', 'preamble')], 
                    is_static=True)
+    ## wifi-phy.h (module 'wifi'): bool ns3::WifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): ns3::Time ns3::WifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -6438,6 +6666,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::WifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): uint8_t ns3::WifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): double ns3::WifiPhy::GetTxPowerEnd() const [member function]
     cls.add_method('GetTxPowerEnd', 
                    'double', 
@@ -6548,6 +6791,11 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): static bool ns3::WifiPhy::IsValidTxVector(ns3::WifiTxVector txVector) [member function]
+    cls.add_method('IsValidTxVector', 
+                   'bool', 
+                   [param('ns3::WifiTxVector', 'txVector')], 
+                   is_static=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::NotifyMonitorSniffRx(ns3::Ptr<ns3::Packet const> packet, uint16_t channelFreqMhz, uint16_t channelNumber, uint32_t rate, ns3::WifiPreamble preamble, ns3::WifiTxVector txVector, ns3::mpduInfo aMpdu, ns3::signalNoiseDbm signalNoise) [member function]
     cls.add_method('NotifyMonitorSniffRx', 
                    'void', 
@@ -6590,10 +6838,15 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('SendPacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('uint8_t', 'packetType'), param('uint32_t', 'mpduReferenceNumber')], 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype) [member function]
+    cls.add_method('SendPacket', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetChannelNumber(uint16_t id) [member function]
     cls.add_method('SetChannelNumber', 
@@ -6635,16 +6888,21 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<const ns3::Packet>,double,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveErrorCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,bool,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveErrorCallback', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, bool, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetReceiveOkCallback(ns3::Callback<void,ns3::Ptr<ns3::Packet>,double,ns3::WifiTxVector,ns3::WifiPreamble,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> callback) [member function]
     cls.add_method('SetReceiveOkCallback', 
                    'void', 
                    [param('ns3::Callback< void, ns3::Ptr< ns3::Packet >, double, ns3::WifiTxVector, ns3::WifiPreamble, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], 
                    is_pure_virtual=True, is_virtual=True)
+    ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_pure_virtual=True, is_virtual=True)
     ## wifi-phy.h (module 'wifi'): void ns3::WifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -6667,6 +6925,10 @@
     cls.add_constructor([param('ns3::WifiRemoteStationManager const &', 'arg0')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::WifiRemoteStationManager() [constructor]
     cls.add_constructor([])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedMcs(ns3::Mac48Address address) [member function]
+    cls.add_method('AddAllSupportedMcs', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddAllSupportedModes(ns3::Mac48Address address) [member function]
     cls.add_method('AddAllSupportedModes', 
                    'void', 
@@ -6687,6 +6949,10 @@
     cls.add_method('AddStationVhtCapabilities', 
                    'void', 
                    [param('ns3::Mac48Address', 'from'), param('ns3::VhtCapabilities', 'vhtcapabilities')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedErpSlotTime(ns3::Mac48Address address, bool isShortSlotTimeSupported) [member function]
+    cls.add_method('AddSupportedErpSlotTime', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortSlotTimeSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedMcs(ns3::Mac48Address address, ns3::WifiMode mcs) [member function]
     cls.add_method('AddSupportedMcs', 
                    'void', 
@@ -6695,6 +6961,10 @@
     cls.add_method('AddSupportedMode', 
                    'void', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'mode')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::AddSupportedPlcpPreamble(ns3::Mac48Address address, bool isShortPreambleSupported) [member function]
+    cls.add_method('AddSupportedPlcpPreamble', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('bool', 'isShortPreambleSupported')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetCtsToSelfTxVector() [member function]
     cls.add_method('DoGetCtsToSelfTxVector', 
                    'ns3::WifiTxVector', 
@@ -6725,10 +6995,10 @@
     cls.add_method('GetCtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'rtsMode')])
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::GetDataTxVector(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('GetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetDefaultMcs() const [member function]
     cls.add_method('GetDefaultMcs', 
                    'ns3::WifiMode', 
@@ -6786,6 +7056,16 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpBasicModes() const [member function]
+    cls.add_method('GetNNonErpBasicModes', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpBasicMode(uint32_t i) const [member function]
+    cls.add_method('GetNonErpBasicMode', 
+                   'ns3::WifiMode', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonUnicastMode() const [member function]
     cls.add_method('GetNonUnicastMode', 
                    'ns3::WifiMode', 
@@ -6795,6 +7075,11 @@
     cls.add_method('GetNumberOfTransmitAntennas', 
                    'uint32_t', 
                    [])
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager::ProtectionMode ns3::WifiRemoteStationManager::GetProtectionMode() const [member function]
+    cls.add_method('GetProtectionMode', 
+                   'ns3::WifiRemoteStationManager::ProtectionMode', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetRtsCtsThreshold() const [member function]
     cls.add_method('GetRtsCtsThreshold', 
                    'uint32_t', 
@@ -6804,11 +7089,36 @@
     cls.add_method('GetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortPreambleSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortPreambleSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetShortSlotTimeSupported(ns3::Mac48Address address) const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [param('ns3::Mac48Address', 'address')], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): static ns3::TypeId ns3::WifiRemoteStationManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetUseNonErpProtection() const [member function]
+    cls.add_method('GetUseNonErpProtection', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::HasHtSupported() const [member function]
     cls.add_method('HasHtSupported', 
                    'bool', 
@@ -6850,18 +7160,18 @@
     cls.add_method('NeedFragmentation', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRts(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector) [member function]
     cls.add_method('NeedRts', 
                    'bool', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiTxVector', 'txVector')])
     ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::NeedRtsRetransmission(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
-    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet, uint32_t fullPacketSize) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::PrepareForQueue(ns3::Mac48Address address, ns3::WifiMacHeader const * header, ns3::Ptr<ns3::Packet const> packet) [member function]
     cls.add_method('PrepareForQueue', 
                    'void', 
-                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint32_t', 'fullPacketSize')])
+                   [param('ns3::Mac48Address', 'address'), param('ns3::WifiMacHeader const *', 'header'), param('ns3::Ptr< ns3::Packet const >', 'packet')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::RecordDisassociated(ns3::Mac48Address address) [member function]
     cls.add_method('RecordDisassociated', 
                    'void', 
@@ -6878,6 +7188,10 @@
     cls.add_method('RecordWaitAssocTxOk', 
                    'void', 
                    [param('ns3::Mac48Address', 'address')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportAmpduTxStatus(ns3::Mac48Address address, uint8_t tid, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('ReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::ReportDataFailed(ns3::Mac48Address address, ns3::WifiMacHeader const * header) [member function]
     cls.add_method('ReportDataFailed', 
                    'void', 
@@ -6934,10 +7248,26 @@
     cls.add_method('SetMaxSsrc', 
                    'void', 
                    [param('uint32_t', 'maxSsrc')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetProtectionMode(ns3::WifiRemoteStationManager::ProtectionMode mode) [member function]
+    cls.add_method('SetProtectionMode', 
+                   'void', 
+                   [param('ns3::WifiRemoteStationManager::ProtectionMode', 'mode')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetRtsCtsThreshold(uint32_t threshold) [member function]
     cls.add_method('SetRtsCtsThreshold', 
                    'void', 
                    [param('uint32_t', 'threshold')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortPreambleEnabled(bool enable) [member function]
+    cls.add_method('SetShortPreambleEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetShortSlotTimeEnabled(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeEnabled', 
+                   'void', 
+                   [param('bool', 'enable')])
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetUseNonErpProtection(bool enable) [member function]
+    cls.add_method('SetUseNonErpProtection', 
+                   'void', 
+                   [param('bool', 'enable')])
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::SetVhtSupported(bool enable) [member function]
     cls.add_method('SetVhtSupported', 
                    'void', 
@@ -6976,6 +7306,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetHtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetHtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetLongRetryCount(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetLongRetryCount', 
                    'uint32_t', 
@@ -6996,6 +7331,11 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNNonErpSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNNonErpSupported', 
+                   'uint32_t', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNSupported(ns3::WifiRemoteStation const * station) const [member function]
     cls.add_method('GetNSupported', 
                    'uint32_t', 
@@ -7006,14 +7346,14 @@
                    'uint32_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfReceiveAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfReceiveAntennas', 
-                   'uint32_t', 
-                   [param('ns3::WifiRemoteStation const *', 'station')], 
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiMode ns3::WifiRemoteStationManager::GetNonErpSupported(ns3::WifiRemoteStation const * station, uint32_t i) const [member function]
+    cls.add_method('GetNonErpSupported', 
+                   'ns3::WifiMode', 
+                   [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
-    ## wifi-remote-station-manager.h (module 'wifi'): uint32_t ns3::WifiRemoteStationManager::GetNumberOfTransmitAntennas(ns3::WifiRemoteStation const * station) const [member function]
-    cls.add_method('GetNumberOfTransmitAntennas', 
-                   'uint32_t', 
+    ## wifi-remote-station-manager.h (module 'wifi'): uint8_t ns3::WifiRemoteStationManager::GetNumberOfSupportedRxAntennas(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetNumberOfSupportedRxAntennas', 
+                   'uint8_t', 
                    [param('ns3::WifiRemoteStation const *', 'station')], 
                    is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::WifiRemoteStationManager::GetPhy() const [member function]
@@ -7041,6 +7381,11 @@
                    'ns3::WifiMode', 
                    [param('ns3::WifiRemoteStation const *', 'station'), param('uint32_t', 'i')], 
                    is_const=True, visibility='protected')
+    ## wifi-remote-station-manager.h (module 'wifi'): bool ns3::WifiRemoteStationManager::GetVhtSupported(ns3::WifiRemoteStation const * station) const [member function]
+    cls.add_method('GetVhtSupported', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation const *', 'station')], 
+                   is_const=True, visibility='protected')
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::WifiRemoteStationManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
@@ -7136,10 +7481,10 @@
                    'bool', 
                    [param('ns3::Mac48Address', 'address'), param('ns3::WifiMode', 'ctsMode')], 
                    visibility='private', is_virtual=True)
-    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiTxVector ns3::WifiRemoteStationManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -7166,6 +7511,11 @@
                    'bool', 
                    [param('ns3::WifiRemoteStation *', 'station'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
                    visibility='private', is_virtual=True)
+    ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportAmpduTxStatus(ns3::WifiRemoteStation * station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr) [member function]
+    cls.add_method('DoReportAmpduTxStatus', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'nSuccessfulMpdus'), param('uint32_t', 'nFailedMpdus'), param('double', 'rxSnr'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
     ## wifi-remote-station-manager.h (module 'wifi'): void ns3::WifiRemoteStationManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -7712,6 +8062,8 @@
     return
 
 def register_Ns3EdcaTxopN_methods(root_module, cls):
+    ## edca-txop-n.h (module 'wifi'): ns3::EdcaTxopN::m_aMpduEnabled [variable]
+    cls.add_instance_attribute('m_aMpduEnabled', 'std::map< ns3::Mac48Address, bool >', is_const=False)
     ## edca-txop-n.h (module 'wifi'): static ns3::TypeId ns3::EdcaTxopN::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
@@ -7801,6 +8153,11 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    is_const=True)
+    ## edca-txop-n.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::EdcaTxopN::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True)
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetBaAgreementExists(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetBaAgreementExists', 
                    'bool', 
@@ -7859,14 +8216,14 @@
     cls.add_method('GotAck', 
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, ns3::WifiMode txMode) [member function]
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address recipient, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('ns3::WifiMode', 'txMode')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck() [member function]
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'recipient'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [])
+                   [param('uint32_t', 'nMpdus')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::GotAddBaResponse(ns3::MgtAddBaResponseHeader const * respHdr, ns3::Mac48Address recipient) [member function]
     cls.add_method('GotAddBaResponse', 
                    'void', 
@@ -7899,10 +8256,6 @@
     cls.add_method('StartAccessIfNeeded', 
                    'void', 
                    [])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRts() [member function]
-    cls.add_method('NeedRts', 
-                   'bool', 
-                   [])
     ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::NeedRtsRetransmission() [member function]
     cls.add_method('NeedRtsRetransmission', 
                    'bool', 
@@ -7957,6 +8310,10 @@
     cls.add_method('SetMsduAggregator', 
                    'void', 
                    [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggr) [member function]
+    cls.add_method('SetMpduAggregator', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggr')])
     ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
     cls.add_method('PushFront', 
                    'void', 
@@ -7986,14 +8343,14 @@
     cls.add_method('CompleteMpduTx', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader', 'hdr'), param('ns3::Time', 'tstamp')])
-    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist() [member function]
+    ## edca-txop-n.h (module 'wifi'): bool ns3::EdcaTxopN::GetAmpduExist(ns3::Mac48Address dest) [member function]
     cls.add_method('GetAmpduExist', 
                    'bool', 
-                   [])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(bool ampdu) [member function]
+                   [param('ns3::Mac48Address', 'dest')])
+    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::SetAmpduExist(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpduExist', 
                    'void', 
-                   [param('bool', 'ampdu')])
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')])
     ## edca-txop-n.h (module 'wifi'): uint16_t ns3::EdcaTxopN::GetNextSequenceNumberfor(ns3::WifiMacHeader * hdr) [member function]
     cls.add_method('GetNextSequenceNumberfor', 
                    'uint16_t', 
@@ -8129,6 +8486,115 @@
                    [param('int', 'value')])
     return
 
+def register_Ns3ErpInformation_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation(ns3::ErpInformation const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformation const &', 'arg0')])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation::ErpInformation() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## erp-information.h (module 'wifi'): ns3::WifiInformationElementId ns3::ErpInformation::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetBarkerPreambleMode() const [member function]
+    cls.add_method('GetBarkerPreambleMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetNonErpPresent() const [member function]
+    cls.add_method('GetNonErpPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint16_t ns3::ErpInformation::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): uint8_t ns3::ErpInformation::GetUseProtection() const [member function]
+    cls.add_method('GetUseProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): ns3::Buffer::Iterator ns3::ErpInformation::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetBarkerPreambleMode(uint8_t barkerPreambleMode) [member function]
+    cls.add_method('SetBarkerPreambleMode', 
+                   'void', 
+                   [param('uint8_t', 'barkerPreambleMode')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetErpSupported(uint8_t erpSupported) [member function]
+    cls.add_method('SetErpSupported', 
+                   'void', 
+                   [param('uint8_t', 'erpSupported')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetNonErpPresent(uint8_t nonErpPresent) [member function]
+    cls.add_method('SetNonErpPresent', 
+                   'void', 
+                   [param('uint8_t', 'nonErpPresent')])
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformation::SetUseProtection(uint8_t useProtection) [member function]
+    cls.add_method('SetUseProtection', 
+                   'void', 
+                   [param('uint8_t', 'useProtection')])
+    return
+
+def register_Ns3ErpInformationChecker_methods(root_module, cls):
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker::ErpInformationChecker() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker::ErpInformationChecker(ns3::ErpInformationChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformationChecker const &', 'arg0')])
+    return
+
+def register_Ns3ErpInformationValue_methods(root_module, cls):
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue() [constructor]
+    cls.add_constructor([])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue(ns3::ErpInformationValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ErpInformationValue const &', 'arg0')])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue::ErpInformationValue(ns3::ErpInformation const & value) [constructor]
+    cls.add_constructor([param('ns3::ErpInformation const &', 'value')])
+    ## erp-information.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::ErpInformationValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## erp-information.h (module 'wifi'): bool ns3::ErpInformationValue::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)
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation ns3::ErpInformationValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::ErpInformation', 
+                   [], 
+                   is_const=True)
+    ## erp-information.h (module 'wifi'): std::string ns3::ErpInformationValue::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)
+    ## erp-information.h (module 'wifi'): void ns3::ErpInformationValue::Set(ns3::ErpInformation const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::ErpInformation const &', 'value')])
+    return
+
 def register_Ns3EventImpl_methods(root_module, cls):
     ## event-impl.h (module 'core'): ns3::EventImpl::EventImpl(ns3::EventImpl const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::EventImpl const &', 'arg0')])
@@ -8262,6 +8728,11 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetRxHighestSupportedAntennas() const [member function]
+    cls.add_method('GetRxHighestSupportedAntennas', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): uint16_t ns3::HtCapabilities::GetRxHighestSupportedDataRate() const [member function]
     cls.add_method('GetRxHighestSupportedDataRate', 
                    'uint16_t', 
@@ -8316,10 +8787,21 @@
                    'uint8_t', 
                    [], 
                    is_const=True)
-    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) [member function]
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): uint8_t ns3::HtCapabilities::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-capabilities.h (module 'wifi'): bool ns3::HtCapabilities::IsSupportedMcs(uint8_t mcs) const [member function]
     cls.add_method('IsSupportedMcs', 
                    'bool', 
-                   [param('uint8_t', 'mcs')])
+                   [param('uint8_t', 'mcs')], 
+                   is_const=True)
     ## ht-capabilities.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtCapabilities::Serialize(ns3::Buffer::Iterator start) const [member function]
     cls.add_method('Serialize', 
                    'ns3::Buffer::Iterator', 
@@ -8406,6 +8888,14 @@
     cls.add_method('SetTxMcsSetDefined', 
                    'void', 
                    [param('uint8_t', 'txmcssetdefined')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-capabilities.h (module 'wifi'): void ns3::HtCapabilities::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
     return
 
 def register_Ns3HtCapabilitiesChecker_methods(root_module, cls):
@@ -8448,6 +8938,299 @@
                    [param('ns3::HtCapabilities const &', 'value')])
     return
 
+def register_Ns3HtOperations_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations::HtOperations(ns3::HtOperations const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperations const &', 'arg0')])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations::HtOperations() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::DeserializeInformationField(ns3::Buffer::Iterator start, uint8_t length) [member function]
+    cls.add_method('DeserializeInformationField', 
+                   'uint8_t', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint8_t', 'length')], 
+                   is_virtual=True)
+    ## ht-operations.h (module 'wifi'): ns3::WifiInformationElementId ns3::HtOperations::ElementId() const [member function]
+    cls.add_method('ElementId', 
+                   'ns3::WifiInformationElementId', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): uint64_t ns3::HtOperations::GetBasicMcsSet1() const [member function]
+    cls.add_method('GetBasicMcsSet1', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint64_t ns3::HtOperations::GetBasicMcsSet2() const [member function]
+    cls.add_method('GetBasicMcsSet2', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetDualBeacon() const [member function]
+    cls.add_method('GetDualBeacon', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetDualCtsProtection() const [member function]
+    cls.add_method('GetDualCtsProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetHtProtection() const [member function]
+    cls.add_method('GetHtProtection', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetInformationFieldSize() const [member function]
+    cls.add_method('GetInformationFieldSize', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetInformationSubset1() const [member function]
+    cls.add_method('GetInformationSubset1', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetInformationSubset2() const [member function]
+    cls.add_method('GetInformationSubset2', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetInformationSubset3() const [member function]
+    cls.add_method('GetInformationSubset3', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetLSigTxopProtectionFullSupport() const [member function]
+    cls.add_method('GetLSigTxopProtectionFullSupport', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetNonGfHtStasPresent() const [member function]
+    cls.add_method('GetNonGfHtStasPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetObssNonHtStasPresent() const [member function]
+    cls.add_method('GetObssNonHtStasPresent', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPcoActive() const [member function]
+    cls.add_method('GetPcoActive', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPhase() const [member function]
+    cls.add_method('GetPhase', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetPrimaryChannel() const [member function]
+    cls.add_method('GetPrimaryChannel', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetRifsMode() const [member function]
+    cls.add_method('GetRifsMode', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetRxHighestSupportedDataRate() const [member function]
+    cls.add_method('GetRxHighestSupportedDataRate', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetSecondaryChannelOffset() const [member function]
+    cls.add_method('GetSecondaryChannelOffset', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint16_t ns3::HtOperations::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint16_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetStaChannelWidth() const [member function]
+    cls.add_method('GetStaChannelWidth', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetStbcBeacon() const [member function]
+    cls.add_method('GetStbcBeacon', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxMaxNSpatialStreams() const [member function]
+    cls.add_method('GetTxMaxNSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxMcsSetDefined() const [member function]
+    cls.add_method('GetTxMcsSetDefined', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxRxMcsSetUnequal() const [member function]
+    cls.add_method('GetTxRxMcsSetUnequal', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): uint8_t ns3::HtOperations::GetTxUnequalModulation() const [member function]
+    cls.add_method('GetTxUnequalModulation', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): bool ns3::HtOperations::IsSupportedMcs(uint8_t mcs) [member function]
+    cls.add_method('IsSupportedMcs', 
+                   'bool', 
+                   [param('uint8_t', 'mcs')])
+    ## ht-operations.h (module 'wifi'): ns3::Buffer::Iterator ns3::HtOperations::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'ns3::Buffer::Iterator', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SerializeInformationField(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('SerializeInformationField', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetBasicMcsSet(uint64_t ctrl1, uint64_t ctrl2) [member function]
+    cls.add_method('SetBasicMcsSet', 
+                   'void', 
+                   [param('uint64_t', 'ctrl1'), param('uint64_t', 'ctrl2')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetDualBeacon(uint8_t dualbeacon) [member function]
+    cls.add_method('SetDualBeacon', 
+                   'void', 
+                   [param('uint8_t', 'dualbeacon')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetDualCtsProtection(uint8_t dualctsprotection) [member function]
+    cls.add_method('SetDualCtsProtection', 
+                   'void', 
+                   [param('uint8_t', 'dualctsprotection')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetHtProtection(uint8_t htprotection) [member function]
+    cls.add_method('SetHtProtection', 
+                   'void', 
+                   [param('uint8_t', 'htprotection')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetHtSupported(uint8_t htsupported) [member function]
+    cls.add_method('SetHtSupported', 
+                   'void', 
+                   [param('uint8_t', 'htsupported')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset1(uint8_t ctrl) [member function]
+    cls.add_method('SetInformationSubset1', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset2(uint16_t ctrl) [member function]
+    cls.add_method('SetInformationSubset2', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetInformationSubset3(uint16_t ctrl) [member function]
+    cls.add_method('SetInformationSubset3', 
+                   'void', 
+                   [param('uint16_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetLSigTxopProtectionFullSupport(uint8_t lsigtxopprotectionfullsupport) [member function]
+    cls.add_method('SetLSigTxopProtectionFullSupport', 
+                   'void', 
+                   [param('uint8_t', 'lsigtxopprotectionfullsupport')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetNonGfHtStasPresent(uint8_t nongfhtstaspresent) [member function]
+    cls.add_method('SetNonGfHtStasPresent', 
+                   'void', 
+                   [param('uint8_t', 'nongfhtstaspresent')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetObssNonHtStasPresent(uint8_t obssnonhtstaspresent) [member function]
+    cls.add_method('SetObssNonHtStasPresent', 
+                   'void', 
+                   [param('uint8_t', 'obssnonhtstaspresent')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPcoActive(uint8_t pcoactive) [member function]
+    cls.add_method('SetPcoActive', 
+                   'void', 
+                   [param('uint8_t', 'pcoactive')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPhase(uint8_t pcophase) [member function]
+    cls.add_method('SetPhase', 
+                   'void', 
+                   [param('uint8_t', 'pcophase')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetPrimaryChannel(uint8_t ctrl) [member function]
+    cls.add_method('SetPrimaryChannel', 
+                   'void', 
+                   [param('uint8_t', 'ctrl')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRifsMode(uint8_t rifsmode) [member function]
+    cls.add_method('SetRifsMode', 
+                   'void', 
+                   [param('uint8_t', 'rifsmode')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRxHighestSupportedDataRate(uint16_t maxsupportedrate) [member function]
+    cls.add_method('SetRxHighestSupportedDataRate', 
+                   'void', 
+                   [param('uint16_t', 'maxsupportedrate')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetRxMcsBitmask(uint8_t index) [member function]
+    cls.add_method('SetRxMcsBitmask', 
+                   'void', 
+                   [param('uint8_t', 'index')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetSecondaryChannelOffset(uint8_t secondarychanneloffset) [member function]
+    cls.add_method('SetSecondaryChannelOffset', 
+                   'void', 
+                   [param('uint8_t', 'secondarychanneloffset')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetStaChannelWidth(uint8_t stachannelwidth) [member function]
+    cls.add_method('SetStaChannelWidth', 
+                   'void', 
+                   [param('uint8_t', 'stachannelwidth')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetStbcBeacon(uint8_t stbcbeacon) [member function]
+    cls.add_method('SetStbcBeacon', 
+                   'void', 
+                   [param('uint8_t', 'stbcbeacon')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxMaxNSpatialStreams(uint8_t maxtxspatialstreams) [member function]
+    cls.add_method('SetTxMaxNSpatialStreams', 
+                   'void', 
+                   [param('uint8_t', 'maxtxspatialstreams')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxMcsSetDefined(uint8_t txmcssetdefined) [member function]
+    cls.add_method('SetTxMcsSetDefined', 
+                   'void', 
+                   [param('uint8_t', 'txmcssetdefined')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxRxMcsSetUnequal(uint8_t txrxmcssetunequal) [member function]
+    cls.add_method('SetTxRxMcsSetUnequal', 
+                   'void', 
+                   [param('uint8_t', 'txrxmcssetunequal')])
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperations::SetTxUnequalModulation(uint8_t txunequalmodulation) [member function]
+    cls.add_method('SetTxUnequalModulation', 
+                   'void', 
+                   [param('uint8_t', 'txunequalmodulation')])
+    return
+
+def register_Ns3HtOperationsChecker_methods(root_module, cls):
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker::HtOperationsChecker() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker::HtOperationsChecker(ns3::HtOperationsChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperationsChecker const &', 'arg0')])
+    return
+
+def register_Ns3HtOperationsValue_methods(root_module, cls):
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue() [constructor]
+    cls.add_constructor([])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue(ns3::HtOperationsValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtOperationsValue const &', 'arg0')])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue::HtOperationsValue(ns3::HtOperations const & value) [constructor]
+    cls.add_constructor([param('ns3::HtOperations const &', 'value')])
+    ## ht-operations.h (module 'wifi'): ns3::Ptr<ns3::AttributeValue> ns3::HtOperationsValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## ht-operations.h (module 'wifi'): bool ns3::HtOperationsValue::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)
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations ns3::HtOperationsValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::HtOperations', 
+                   [], 
+                   is_const=True)
+    ## ht-operations.h (module 'wifi'): std::string ns3::HtOperationsValue::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)
+    ## ht-operations.h (module 'wifi'): void ns3::HtOperationsValue::Set(ns3::HtOperations const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::HtOperations const &', 'value')])
+    return
+
 def register_Ns3IntegerValue_methods(root_module, cls):
     ## integer.h (module 'core'): ns3::IntegerValue::IntegerValue() [constructor]
     cls.add_constructor([])
@@ -8937,6 +9720,92 @@
                    is_pure_virtual=True, is_const=True, is_virtual=True)
     return
 
+def register_Ns3NetDeviceQueue_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue(ns3::NetDeviceQueue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueue const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue::NetDeviceQueue() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::HasWakeCallbackSet() const [member function]
+    cls.add_method('HasWakeCallbackSet', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueue::IsStopped() const [member function]
+    cls.add_method('IsStopped', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::SetWakeCallback(ns3::Callback<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetWakeCallback', 
+                   'void', 
+                   [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Start() [member function]
+    cls.add_method('Start', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Stop() [member function]
+    cls.add_method('Stop', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueue::Wake() [member function]
+    cls.add_method('Wake', 
+                   'void', 
+                   [], 
+                   is_virtual=True)
+    return
+
+def register_Ns3NetDeviceQueueInterface_methods(root_module, cls):
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface(ns3::NetDeviceQueueInterface const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceQueueInterface const &', 'arg0')])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueueInterface::NetDeviceQueueInterface() [constructor]
+    cls.add_constructor([])
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetSelectedQueue(ns3::Ptr<ns3::QueueItem> item) const [member function]
+    cls.add_method('GetSelectedQueue', 
+                   'uint8_t', 
+                   [param('ns3::Ptr< ns3::QueueItem >', 'item')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::NetDeviceQueue> ns3::NetDeviceQueueInterface::GetTxQueue(uint8_t i) const [member function]
+    cls.add_method('GetTxQueue', 
+                   'ns3::Ptr< ns3::NetDeviceQueue >', 
+                   [param('uint8_t', 'i')], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint8_t ns3::NetDeviceQueueInterface::GetTxQueuesN() const [member function]
+    cls.add_method('GetTxQueuesN', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): static ns3::TypeId ns3::NetDeviceQueueInterface::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## net-device.h (module 'network'): bool ns3::NetDeviceQueueInterface::IsQueueDiscInstalled() const [member function]
+    cls.add_method('IsQueueDiscInstalled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetQueueDiscInstalled(bool installed) [member function]
+    cls.add_method('SetQueueDiscInstalled', 
+                   'void', 
+                   [param('bool', 'installed')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetSelectQueueCallback(ns3::Callback<unsigned char, ns3::Ptr<ns3::QueueItem>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function]
+    cls.add_method('SetSelectQueueCallback', 
+                   'void', 
+                   [param('ns3::Callback< unsigned char, ns3::Ptr< ns3::QueueItem >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::SetTxQueuesN(uint8_t numTxQueues) [member function]
+    cls.add_method('SetTxQueuesN', 
+                   'void', 
+                   [param('uint8_t', 'numTxQueues')])
+    ## net-device.h (module 'network'): void ns3::NetDeviceQueueInterface::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', 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]
@@ -9016,6 +9885,11 @@
                    'uint32_t', 
                    [], 
                    is_const=True)
+    ## node.h (module 'network'): ns3::Time ns3::Node::GetLocalTime() const [member function]
+    cls.add_method('GetLocalTime', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
     ## node.h (module 'network'): uint32_t ns3::Node::GetNApplications() const [member function]
     cls.add_method('GetNApplications', 
                    'uint32_t', 
@@ -9302,6 +10176,27 @@
                    is_const=True)
     return
 
+def register_Ns3QueueItem_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## net-device.h (module 'network'): ns3::QueueItem::QueueItem(ns3::Ptr<ns3::Packet> p) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'p')])
+    ## net-device.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::QueueItem::GetPacket() const [member function]
+    cls.add_method('GetPacket', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## net-device.h (module 'network'): uint32_t ns3::QueueItem::GetPacketSize() const [member function]
+    cls.add_method('GetPacketSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## net-device.h (module 'network'): void ns3::QueueItem::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
+    return
+
 def register_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -9389,6 +10284,16 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetShortSlotTimeSupported(bool enable) [member function]
+    cls.add_method('SetShortSlotTimeSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetShortSlotTimeSupported() const [member function]
+    cls.add_method('GetShortSlotTimeSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## regular-wifi-mac.h (module 'wifi'): ns3::Mac48Address ns3::RegularWifiMac::GetAddress() const [member function]
     cls.add_method('GetAddress', 
                    'ns3::Mac48Address', 
@@ -9464,6 +10369,16 @@
                    'ns3::Ptr< ns3::WifiRemoteStationManager >', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::HtCapabilities ns3::RegularWifiMac::GetHtCapabilities() const [member function]
+    cls.add_method('GetHtCapabilities', 
+                   'ns3::HtCapabilities', 
+                   [], 
+                   is_const=True)
+    ## regular-wifi-mac.h (module 'wifi'): ns3::VhtCapabilities ns3::RegularWifiMac::GetVhtCapabilities() const [member function]
+    cls.add_method('GetVhtCapabilities', 
+                   'ns3::VhtCapabilities', 
+                   [], 
+                   is_const=True)
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetForwardUpCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet>, ns3::Mac48Address, ns3::Mac48Address, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> upCallback) [member function]
     cls.add_method('SetForwardUpCallback', 
                    'void', 
@@ -9539,6 +10454,11 @@
                    'void', 
                    [param('ns3::WifiPhyStandard', 'standard')], 
                    visibility='protected', is_virtual=True)
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::ConfigureContentionWindow(uint32_t cwMin, uint32_t cwMax) [member function]
+    cls.add_method('ConfigureContentionWindow', 
+                   'void', 
+                   [param('uint32_t', 'cwMin'), param('uint32_t', 'cwMax')], 
+                   visibility='protected')
     ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetTypeOfStation(ns3::TypeOfStation type) [member function]
     cls.add_method('SetTypeOfStation', 
                    'void', 
@@ -9604,6 +10524,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): void ns3::RegularWifiMac::SetErpSupported(bool enable) [member function]
+    cls.add_method('SetErpSupported', 
+                   'void', 
+                   [param('bool', 'enable')], 
+                   visibility='protected')
+    ## regular-wifi-mac.h (module 'wifi'): bool ns3::RegularWifiMac::GetErpSupported() const [member function]
+    cls.add_method('GetErpSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='protected')
     return
 
 def register_Ns3Ssid_methods(root_module, cls):
diff -Naur ns-3.24.1/src/mesh/model/dot11s/airtime-metric.cc ns-3.25/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.24.1/src/mesh/model/dot11s/airtime-metric.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/model/dot11s/airtime-metric.cc	2016-03-23 21:36:53.000000000 -0700
@@ -82,7 +82,7 @@
    */
   NS_ASSERT (!peerAddress.IsGroup ());
   //obtain current rate:
-  WifiMode mode = mac->GetWifiRemoteStationManager ()->GetDataTxVector (peerAddress, &m_testHeader, m_testFrame, m_testFrame->GetSize ()).GetMode();
+  WifiMode mode = mac->GetWifiRemoteStationManager ()->GetDataTxVector (peerAddress, &m_testHeader, m_testFrame).GetMode();
   //obtain frame error rate:
   double failAvg = mac->GetWifiRemoteStationManager ()->GetInfo (peerAddress).GetFrameErrorRate ();
   if (failAvg == 1)
@@ -96,7 +96,7 @@
   //calculate metric
   uint32_t metric = (uint32_t)((double)( /*Overhead + payload*/
                                  mac->GetPifs () + mac->GetSlot () + mac->GetEifsNoDifs () + //DIFS + SIFS + AckTxTime = PIFS + SLOT + EifsNoDifs
-                                 mac->GetWifiPhy ()->CalculateTxDuration (m_testFrame->GetSize (), txVector, WIFI_PREAMBLE_LONG, mac->GetWifiPhy ()->GetFrequency(), 0, 0)
+                                 mac->GetWifiPhy ()->CalculateTxDuration (m_testFrame->GetSize (), txVector, WIFI_PREAMBLE_LONG, mac->GetWifiPhy ()->GetFrequency())
                                  ).GetMicroSeconds () / (10.24 * (1.0 - failAvg)));
   return metric;
 }
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-0-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -8,26 +8,26 @@
      
        BÈ       Ô€              mÈ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       ØÉ N   N   ˆƒ<                             ªª           
+       ÆÉ N   N   ˆƒ<                             ªª           
      
-       ¸Ð       Ô€              ëÑ ²   ²   ˆƒ<                             ªª    E  €    @  
+       yÐ       Ô€              ¬Ñ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ûÑ       Ô€              +ñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
+À 	 l                                                                                                             ¼Ñ       Ô€              ìð N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       Wò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
+       ò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       i÷       Ô€              ø N   N   ˆƒ<                            ªª           
+       ÷       Ô€              Ã÷ N   N   ˆƒ<                            ªª           
      
-       $ø       Ô€              {ø ²   ²   ˆƒ<                             ªª    E  €    @  
+       Ó÷       Ô€              *ø ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             Àù       Ô€              û ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             où       Ô€              «ú ²   ²   ˆƒ<                            ªª    E  €    @  
 
  	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
  ¼&èÔèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          ° êt'     è    Œ$0H`lx æ&èrmesh       #        Ô€              V  ²   ²   ˆƒ<                             ªª    E  €   @  
 
 À 	 l                                                                                                             f        Ô€              ½  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                                     Ô€              s  ²   ²   ˆƒ<                             ªª    E  €   @  
+ 	À l                                                                                                                     Ô€              j  ²   ²   ˆƒ<                             ªª    E  €   @  
 
  	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          ð S‡.     è    Œ$0H`lx
  ].èu'èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          À 
@@ -35,21 +35,21 @@
 
 À 	 l                                                                                                             †¦       Ô€              Ý¦ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             !¨       Ô€              “© ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             !¨       Ô€              Š© ²   ²   ˆƒ<                0            ªª    E  €   @  
 
  	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ           s(6     è    Œ$0H`lx
  þ5è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       #        Ô€              V  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
 À 	 l                                                                                                             f        Ô€              ½  ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                                     Ô€              ²  ²   ²   ˆƒ<                @            ªª    E  €   @  
+ 	À l                                                                                                                     Ô€              ©  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
  	À l                                                                                                             Á  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     } ?   ?   Ðˆ<                 ƒ           ˆ                     ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           0~ ?   ?   Ð€<                ð ƒ           ˆ                     Ù~       Ô€              ³ ?   ?   Ð€<                @ƒ         ˆ  –                  >€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           C¥       Ô€              v¦ ²   ²   ˆƒ<                P            ªª    E  €   @  
+ Ÿ=è·6èrmesh       JO A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     } ?   ?   Ðˆ<                 ƒ           ˆ                     ý~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ            ?   ?   Ð€<                ð ƒ           ˆ                     Ç       Ô€              V€ ?   ?   Ð€<                @ƒ         ˆ  –                  â€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           ÿ� ?   ?   Ðˆ<                @ƒ         ˆ  –                  C¥       Ô€              v¦ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             †¦       Ô€              Ý¦ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             !¨       Ô€              À© ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             !¨       Ô€              ·© ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  	À l                                                                                                             +b F   F   €€  ÿÿÿÿÿÿ          P³jE     è    Œ$0H`lx
  @EèX>èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          jùE     è    Œ$0H`lx kEèrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-1-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       ž  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            %  >   >   Ð€<                   Œ$0H`lrmeshq   9u         €(  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         t)  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         w*        Ô€               #,        Ô€               ­,  <   <   Ð€<                      Œ$0H`lq  9u          ˜–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         c—        Ô€               í—  <   <   Ð€<                @    Œ$0H`lq  9u          ý—        Ô€               É˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         Ù˜        Ô€               '™  <   <   Ð€<                     Œ$0H`lq  9u          Ì™        Ô€               “È  A   A   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx – èrmesh        ’É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¢É        Ô€               ðÉ  <   <   Ð€<                0    Œ$0H`lq  9u          ”Ê        Ô€               ÑÊ  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         zË        Ô€               Ì  <   <   Ð€<                     Œ$0H`lq  9u          Ì        Ô€               »O A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`lx É èrmesh        À7 F   F   €€  ÿÿÿÿÿÿ          ` H7     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       ž  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            %  >   >   Ð€<                   Œ$0H`lrmeshq   9u         ›'  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         q)        Ô€               W*        Ô€               á*  <   <   Ð€<                      Œ$0H`lq  9u          ˜–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         c—        Ô€               í—  <   <   Ð€<                @    Œ$0H`lq  9u          ý—        Ô€               É˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         Ù˜        Ô€               '™  <   <   Ð€<                     Œ$0H`lq  9u          Ì™        Ô€               “È  A   A   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx – èrmesh        ’É  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¢É        Ô€               ðÉ  <   <   Ð€<                0    Œ$0H`lq  9u          ”Ê        Ô€               ÑÊ  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         zË        Ô€               Ì  <   <   Ð€<                     Œ$0H`lq  9u          Ì        Ô€               »O A   A   €€  ÿÿÿÿÿÿ            JO     è    Œ$0H`lx É èrmesh        À7 F   F   €€  ÿÿÿÿÿÿ          ` H7     è    Œ$0H`lx
  ÅèÉ èrmesh        ³a F   F   €€  ÿÿÿÿÿÿ          P ³a     è    Œ$0H`lx
  7èOèrmesh        Ûð A   A   €€  ÿÿÿÿÿÿ          0 jð     è    Œ$0H`lx bèrmesh        –  F   F   €€  ÿÿÿÿÿÿ          p hØ     è    Œ$0H`lx
  fèbèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          ` Ó     è    Œ$0H`lx
@@ -14,29 +14,30 @@
      
        È       Ô€              îÈ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       XÉ N   N   ˆƒ<                             ªª           
+       FÉ N   N   ˆƒ<                             ªª           
      
-       Ê       Ô€              õÊ N   N   ˆƒ<                             ªª           
+       Ê       Ô€              ÑÊ N   N   ˆƒ<                             ªª           
      
-       7Ï       Ô€              |Ð ²   ²   ˆƒ<                             ªª    E  €    @  
+       
+Ï       Ô€              =Ð ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ŒÐ       Ô€              ãÐ ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             MÐ       Ô€              ¤Ð ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             'Ò       Ô€              «ñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
+À 	 l                                                                                                             èÑ       Ô€              lñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ             ªª           
 ÿÿÿÿÿÿ
-       Öñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
+       —ñ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+       Ãò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       ‚ö       Ô€              -÷ N   N   ˆƒ<                            ªª           
+       1ö       Ô€              Üö N   N   ˆƒ<                            ªª           
      
-       =÷       Ô€              ”÷ N   N   ˆƒ<                            ªª           
+       ìö       Ô€              C÷ N   N   ˆƒ<                            ªª           
      
-       Qø       Ô€              „ù ²   ²   ˆƒ<                             ªª    E  €    @  
+        ø       Ô€              3ù ²   ²   ˆƒ<                             ªª    E  €    @  
 
- 	À l                                                                                                             ”ù       Ô€              ýù ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             Cù       Ô€              £ù ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             Aû       Ô€              ×ü ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             çú       Ô€              kü ²   ²   ˆƒ<                            ªª    E  €    @  
 
  	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
  J&èEèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
@@ -46,9 +47,9 @@
 
 À 	 l                                                                                                             ’        Ô€              Å  ²   ²   ˆƒ<                              ªª    E  €   @  
 
- 	À l                                                                                                             Õ        Ô€              k  ²   ²   ˆƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             Õ        Ô€              b  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             °        Ô€              ã	  ²   ²   ˆƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             §        Ô€              Ú	  ²   ²   ˆƒ<                             ªª    E  €   @  
 
  	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
  ë-èæ&èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          ð S‡.     è    Œ$0H`lx
@@ -59,9 +60,9 @@
 
 À 	 l                                                                                                             ²¦       Ô€              å§ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
- 	À l                                                                                                             õ§       Ô€              ‹¨ ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             õ§       Ô€              ‚¨ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             Ð©       Ô€              B« ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             Ç©       Ô€              '« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
  	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
  Œ5è‡.èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ           s(6     è    Œ$0H`lx
@@ -71,22 +72,22 @@
 
 À 	 l                                                                                                             ’        Ô€              Å  ²   ²   ˆƒ<                @             ªª    E  €   @  
 
- 	À l                                                                                                             Õ        Ô€              ª  ²   ²   ˆƒ<                @            ªª    E  €   @  
+ 	À l                                                                                                             Õ        Ô€              ¡  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ï        Ô€              +
+ 	À l                                                                                                             æ        Ô€              
   ²   ²   ˆƒ<                @            ªª    E  €   @  
 
  	À l                                                                                                              –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
  -=è(6èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     ¢| ?   ?   Ðˆ<                 ƒ           ˆ                     K}       Ô€              š} E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           œ~ ?   ?   Ð€<                ð ƒ           ˆ                     ¬~       Ô€              $       Ô€              F ?   ?   Ð€<                @ƒ         ˆ  –                  ï       Ô€              ³€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           Å‚       Ô€              Ó£       Ô€              ¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
+ Ÿ=è·6èrmesh       »O A   A   €€  ÿÿÿÿÿÿ          à JX>     è    Œ$0H`lx Ê=èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     ¢| ?   ?   Ðˆ<                 ƒ           ˆ                     K}       Ô€              9~       Ô€              ˆ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           ‹ ?   ?   Ð€<                ð ƒ           ˆ                     ›       Ô€              ê ?   ?   Ð€<                @ƒ         ˆ  –                  ’€       Ô€              V� E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  ,  ÿÿÿÿÿÿ           “� ?   ?   Ðˆ<                @ƒ         ˆ  –                  <‚       Ô€              Ó£       Ô€              ¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             ¥       Ô€              m¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             ²¦       Ô€              å§ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
- 	À l                                                                                                             õ§       Ô€              ¸¨ ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             õ§       Ô€              ¯¨ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ý©       Ô€              K« ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             ô©       Ô€              '« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  	À l                                                                                                             À7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
  ÎDèÊ=èrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          P³jE     è    Œ$0H`lx
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-2-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       *  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                   Œ$0H`lrmeshq   9u         F&        Ô€               Ð&  <   <   Ð€<                     Œ$0H`lq   9u          ¬'  >   >   Ð€<                    Œ$0H`lrmeshq   9u         (  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         )  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         ±)        Ô€               ;*  <   <   Ð€<                0    Œ$0H`lq   9u          K*        Ô€               G+        Ô€               ç+  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         ÷+        Ô€               E,  <   <   Ð€<                      Œ$0H`lq  9u          ê,        Ô€               (–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        &—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         6—        Ô€               „—  <   <   Ð€<                @    Œ$0H`lq  9u          )˜        Ô€               ]˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         ™        Ô€               �™  <   <   Ð€<                     Œ$0H`lq  9u           ™        Ô€               É  A   A   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx – èrmesh        ÎÉ        Ô€               XÊ  <   <   Ð€<                0    Œ$0H`lq  9u          >Ë  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         @Ì        Ô€               ¥Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       *  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                   Œ$0H`lrmeshq   9u         F&        Ô€               Ð&  <   <   Ð€<                     Œ$0H`lq   9u          .'  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         ×'        Ô€               n(  >   >   Ð€<                    Œ$0H`lrmeshq   9u         5)  <   <   Ð€<                0    Œ$0H`lq   9u          E)        Ô€               *  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         **        Ô€               x*  <   <   Ð€<                      Œ$0H`lq  9u          +        Ô€               í+        Ô€               (–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        &—  >   >   Ð€<                    Œ$0H`lrmeshq   9u         6—        Ô€               „—  <   <   Ð€<                @    Œ$0H`lq  9u          )˜        Ô€               ]˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         ™        Ô€               �™  <   <   Ð€<                     Œ$0H`lq  9u           ™        Ô€               É  A   A   €€  ÿÿÿÿÿÿ            “È      è    Œ$0H`lx – èrmesh        ÎÉ        Ô€               XÊ  <   <   Ð€<                0    Œ$0H`lq  9u          >Ë  >   >   Ð€<                @   Œ$0H`lrmeshq  9u         @Ì        Ô€               ¥Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
  ¨è– èrmesh        H7 F   F   €€  ÿÿÿÿÿÿ          ` H7     è    Œ$0H`lx
  ÅèÉ èrmesh        +b F   F   €€  ÿÿÿÿÿÿ          P ³a     è    Œ$0H`lx
  7èOèrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          ` Mf     è    Œ$0H`lx
@@ -17,36 +17,35 @@
 ÿÿÿÿÿÿ
        [Ç N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       BÈ       Ô€              ØÉ N   N   ˆƒ<                             ªª           
+       BÈ       Ô€              ÆÉ N   N   ˆƒ<                             ªª           
      
-       èÉ       Ô€              uÊ N   N   ˆƒ<                             ªª           
+       ÖÉ       Ô€              QÊ N   N   ˆƒ<                             ªª           
      
-       2Ë       Ô€              ÝË N   N   ˆƒ<                             ªª           
+       Ë       Ô€              ¹Ë N   N   ˆƒ<                             ªª           
      
-       ˆÍ       Ô€              úÎ ²   ²   ˆƒ<                             ªª    E  €    @  
+       dÍ       Ô€              ÍÎ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             
-Ï       Ô€              sÏ ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             ÝÎ       Ô€              4Ï ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ¸Ð       Ô€              ëÑ ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             yÐ       Ô€              ¬Ñ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             Wò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
+À 	 l                                                                                                             ò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÐ           ªª           
 ÿÿÿÿÿÿ
-       ‚ò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+       Cò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       ­ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+       nó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       •ô       Ô€              Fö N   N   ˆƒ<                            ªª           
+       Vô       Ô€              õõ N   N   ˆƒ<                            ªª           
      
-       Vö       Ô€              ­ö N   N   ˆƒ<                            ªª           
+       ö       Ô€              \ö N   N   ˆƒ<                            ªª           
      
-       i÷       Ô€              ø N   N   ˆƒ<                            ªª           
+       ÷       Ô€              Ã÷ N   N   ˆƒ<                            ªª           
      
-       Àù       Ô€              û ²   ²   ˆƒ<                            ªª    E  €    @  
+       où       Ô€              «ú ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             û       Ô€              Ïû ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             »ú       Ô€              cû ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ý       Ô€              Gþ ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             ¨ü       Ô€              Ûý ²   ²   ˆƒ<                            ªª    E  €    @  
 
  	À l                                                                                                             H7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
  J&èEèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
@@ -56,12 +55,12 @@
 
 À 	 l                                                                                                             #        Ô€              V  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              s  ²   ²   ˆƒ<                             ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              j  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ƒ        Ô€              Ú  ²   ²   ˆƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             z        Ô€              Ñ  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             
-        Ô€              R  ²   ²   ˆƒ<                             ªª    E  €   @  
+ 	À l                                                                                                             
+        Ô€              I  ²   ²   ˆƒ<                             ªª    E  €   @  
 
  	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
  Î-è¼&èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
@@ -72,11 +71,11 @@
 
 À 	 l                                                                                                             C¥       Ô€              v¦ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             !¨       Ô€              “© ²   ²   ˆƒ<                0            ªª    E  €   @  
+À 	 l                                                                                                             !¨       Ô€              Š© ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             £©       Ô€              9ª ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             š©       Ô€              ª ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             ~«       Ô€              ±¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             c«       Ô€              –¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
  	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
  o5è].èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
@@ -87,27 +86,27 @@
 
 À 	 l                                                                                                             #        Ô€              V  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                                     Ô€              ²  ²   ²   ˆƒ<                @            ªª    E  €   @  
+À 	 l                                                                                                                     Ô€              ©  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             Â        Ô€              "	  ²   ²   ˆƒ<                @            ªª    E  €   @  
+ 	À l                                                                                                             ¹        Ô€              	  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             g
-        Ô€              š  ²   ²   ˆƒ<                @            ªª    E  €   @  
+ 	À l                                                                                                             U
+        Ô€              ˆ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
  	À l                                                                                                             …$  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
  =èþ5èrmesh       (–  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
  -=è(6èrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          “É=     è    Œ$0H`lx
- Ÿ=è·6èrmesh       *{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           } ?   ?   Ðˆ<                 ƒ           ˆ                     }       Ô€              ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ  –   ÿÿÿÿÿÿ           è~ ?   ?   Ðˆ<                 ƒ           ˆ                     ø~       Ô€              ³ ?   ?   Ð€<                @ƒ         ˆ  –                  Ã       Ô€              0� E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           û�       Ô€              ‰‚ ?   ?   Ð€<                @ƒ         ˆ  –                  ™‚       Ô€              d¢       Ô€              —£ ²   ²   ˆƒ<                P            ªª    E  €   @  
+ Ÿ=è·6èrmesh       *{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           } ?   ?   Ðˆ<                 ƒ           ˆ                     }       Ô€              ý} ?   ?   Ðˆ<                 ƒ           ˆ                     ~       Ô€              Ç       Ô€              V€ ?   ?   Ð€<                @ƒ         ˆ  –                  f€       Ô€              ÿ� ?   ?   Ðˆ<                @ƒ         ˆ  –                  ‚       Ô€              d¢       Ô€              —£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             §£       Ô€              þ£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             C¥       Ô€              v¦ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             !¨       Ô€              À© ²   ²   ˆƒ<                P            ªª    E  €   @  
+À 	 l                                                                                                             !¨       Ô€              ·© ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             Ð©       Ô€              Bª ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             Ç©       Ô€              ª ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ‡«       Ô€              º¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             c«       Ô€              –¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
  	À l                                                                                                             ¥Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
  ±DèŸ=èrmesh       H7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-3-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       ž  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        	&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         &        Ô€               g&  <   <   Ð€<                     Œ$0H`lq   9u          '        Ô€               @'  >   >   Ð€<                    Œ$0H`lrmeshq   9u         é'        Ô€               t)  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         „)        Ô€               Ò)  <   <   Ð€<                0    Œ$0H`lq   9u          w*        Ô€               +  <   <   Ðˆ<                     Œ$0H`lq  9u          +        Ô€               {+  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         #,        Ô€               ­,  <   <   Ð€<                      Œ$0H`lq  9u          ½,        Ô€               Ü?  A   A   €€  ÿÿÿÿÿÿ            k?      è    Œ$0H`lx $ èrmesh        ˜–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        c—        Ô€               í—  <   <   Ð€<                @    Œ$0H`lq  9u          É˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         Ì™        Ô€               ü¨ A   A   €€  ÿÿÿÿÿÿ          0 ‹¨     è    Œ$0H`lx $ èrmesh        -Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       ž  E   E   Ð€  ÿÿÿÿÿÿ            ‚%              ˆ      ÿÿÿÿÿÿ            $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        	&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         &        Ô€               g&  <   <   Ð€<                     Œ$0H`lq   9u          '        Ô€               ›'  >   >   Ðˆ<                   Œ$0H`lrmeshq   9u         «'        Ô€               (  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ª(        Ô€               Ì(  <   <   Ð€<                0    Œ$0H`lq   9u          q)        Ô€               ®)  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         W*        Ô€               á*  <   <   Ð€<                      Œ$0H`lq  9u          ñ*        Ô€               °+  <   <   Ðˆ<                     Œ$0H`lq  9u          À+        Ô€               Ü?  A   A   €€  ÿÿÿÿÿÿ            k?      è    Œ$0H`lx $ èrmesh        ˜–  A   A   €€  ÿÿÿÿÿÿ          0 (–      è    Œ$0H`lx $ èrmesh        c—        Ô€               í—  <   <   Ð€<                @    Œ$0H`lq  9u          É˜  >   >   Ð€<                P   Œ$0H`lrmeshq  9u         Ì™        Ô€               ü¨ A   A   €€  ÿÿÿÿÿÿ          0 ‹¨     è    Œ$0H`lx $ èrmesh        -Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
  ¨è– èrmesh        À7 F   F   €€  ÿÿÿÿÿÿ          ` H7     è    Œ$0H`lx
  ÅèÉ èrmesh       Ü  A   A   €€  ÿÿÿÿÿÿ          @ «I     è    Œ$0H`lx Åèrmesh       $  F   F   €€  ÿÿÿÿÿÿ          ` Mf     è    Œ$0H`lx
  Jè7èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          p hØ     è    Œ$0H`lx
@@ -13,45 +13,46 @@
        ŒÅ F   F   €€  ÿÿÿÿÿÿ          Ð ­I&     è    Œ$0H`lx
  -&èèrmesh       ¯Æ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       Ê       Ô€              õÊ N   N   ˆƒ<                             ªª           
+       Ê       Ô€              ÑÊ N   N   ˆƒ<                             ªª           
      
-       Ë       Ô€              \Ë N   N   ˆƒ<                             ªª           
+       áÊ       Ô€              8Ë N   N   ˆƒ<                             ªª           
      
-       Ì       Ô€              LÍ ²   ²   ˆƒ<                              ªª    E  €    @  
+       õË       Ô€              (Í ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             \Í       Ô€              òÍ ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             8Í       Ô€              ÅÍ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             7Ï       Ô€              |Ð ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             
+Ï       Ô€              =Ð ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+À 	 l                                                                                                             Ãò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       -ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+       îò N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Yô N   N   ˆƒ<                             ªª           
+       ô N   N   ˆƒ<                             ªª           
      
-       iô       Ô€              dõ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
+       *ô       Ô€              %õ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       Åõ N   N   ˆƒ<                            ªª           
+       tõ N   N   ˆƒ<                            ªª           
      
-       ‚ö       Ô€              -÷ N   N   ˆƒ<                            ªª           
+       1ö       Ô€              Üö N   N   ˆƒ<                            ªª           
      
-       Aû       Ô€              ×ü ²   ²   ˆƒ<                            ªª    E  €    @  
+       çú       Ô€              kü ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             çü       Ô€              >ý ²   ²   ˆƒ<                            ªª    E  €    @  
+ 	À l                                                                                                             {ü       Ô€              Òü ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             ƒþ       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
+ 	À l                                                                                                             þ       Ô€              À7 F   F   €€  ÿÿÿÿÿÿ          Ð È»&     è    Œ$0H`lx
  J&èEèrmesh         ²   ²   ˆƒ<                              ªª    E  €   @  
 
 À 	 l                                                                                                                     Ô€              o  ²   ²   ˆƒ<                             ªª    E  €   @  
 
 À 	 l                                                                                                             ³        Ô€              æ  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       °        Ô€              ã	  ²   ²   ˆƒ<                             ªª    E  €   @  
+À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       §        Ô€              Ú	  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             ó	        Ô€              J
+ 	À l                                                                                                             ê	        Ô€              A
   ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             Ž        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
+ 	À l                                                                                                             …        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
  Î-è¼&èrmesh        –  F   F   €€  ÿÿÿÿÿÿ          à è\.     è    Œ$0H`lx
  ë-èæ&èrmesh       (¢ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
@@ -59,11 +60,11 @@
 
 À 	 l                                                                                                             Ó£       Ô€              ¥ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       Ð©       Ô€              B« ²   ²   ˆƒ<                0            ªª    E  €   @  
+À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       Ç©       Ô€              '« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             R«       Ô€              ©« ²   ²   ˆƒ<                0            ªª    E  €   @  
+ 	À l                                                                                                             7«       Ô€              Ž« ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             í¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
+ 	À l                                                                                                             Ò¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
  o5è].èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ          ð þ5     è    Œ$0H`lx
  Œ5è‡.èrmesh         ²   ²   ˆƒ<                @             ªª    E  €   @  
 
@@ -71,25 +72,25 @@
 
 À 	 l                                                                                                             ³        Ô€              æ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       ï        Ô€              +
+À 	 l                                                                                                             Ü  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       æ        Ô€              
   ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ;
-        Ô€              ’
+ 	À l                                                                                                             )
+        Ô€              €
   ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             Ö        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
+ 	À l                                                                                                             Ä        Ô€              $  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
  =èþ5èrmesh        –  F   F   €€  ÿÿÿÿÿÿ           (Ÿ=     è    Œ$0H`lx
- -=è(6èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     K}       Ô€              š} ?   ?   Ðˆ<                 ƒ           ˆ                     |~ ?   ?   Ðˆ<                 ƒ           ˆ                     $       Ô€              ï       Ô€              ¼€ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           ¿� ?   ?   Ð€<                ð ƒ           ˆ                     Ï�       Ô€              ‚ ?   ?   Ð€<                @ƒ         ˆ  –                  Å‚       Ô€              ‰ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ           (¢ ²   ²   ˆƒ<                P             ªª    E  €   @  
+ -=è(6èrmesh       ž{ E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ      ÿÿÿÿÿÿ           À{ ?   ?   Ð€<                 ƒ           ˆ                     K}       Ô€              ‘} ?   ?   Ðˆ<                 ƒ           ˆ                     9~       Ô€              ˆ~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           ‹ ?   ?   Ð€<                ð ƒ           ˆ                     ›       Ô€              ê ?   ?   Ð€<                @ƒ         ˆ  –                  ’€       Ô€              V� E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ           <‚       Ô€              (¢ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
 À 	 l                                                                                                             8¢       Ô€              �¢ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
 À 	 l                                                                                                             Ó£       Ô€              ¥ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       ý©       Ô€              K« ²   ²   ˆƒ<                P            ªª    E  €   @  
+À 	 l                                                                                                             ü¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       ô©       Ô€              '« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             [«       Ô€              ²« ²   ²   ˆƒ<                P            ªª    E  €   @  
+ 	À l                                                                                                             7«       Ô€              Ž« ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             ö¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
+ 	À l                                                                                                             Ò¬       Ô€              -Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
  ±DèŸ=èrmesh       À7 F   F   €€  ÿÿÿÿÿÿ           H@E     è    Œ$0H`lx
  ÎDèÊ=èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-proactive-regression-test-4-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         �%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         F&        Ô€               Ð&  <   <   Ð€<                     Œ$0H`lq   9u          à&        Ô€               ¬'  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¼'        Ô€               (  <   <   Ð€<                     Œ$0H`lq  9u          ±)        Ô€               ;*  <   <   Ð€<                0    Œ$0H`lq   9u          ¢*  <   <   Ðˆ<                     Œ$0H`lq  9u          G+        Ô€               ç+  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         ê,        Ô€               k?  A   A   €€  ÿÿÿÿÿÿ            k?      è    Œ$0H`lx $ èrmesh        ‹¨ A   A   €€  ÿÿÿÿÿÿ          0 ‹¨     è    Œ$0H`lx $ èrmesh        ¥Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         �%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         F&        Ô€               Ð&  <   <   Ð€<                     Œ$0H`lq   9u          à&        Ô€               ×'        Ô€               n(  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ~(        Ô€               Ì(  <   <   Ð€<                     Œ$0H`lq  9u          *  >   >   Ð€<                @   Œ$0H`lrmeshq   9u         +        Ô€               H+  <   <   Ðˆ<                     Œ$0H`lq  9u          í+        Ô€               k?  A   A   €€  ÿÿÿÿÿÿ            k?      è    Œ$0H`lx $ èrmesh        ‹¨ A   A   €€  ÿÿÿÿÿÿ          0 ‹¨     è    Œ$0H`lx $ èrmesh        ¥Å F   F   €€  ÿÿÿÿÿÿ          P -Å     è    Œ$0H`lx
  ¨è– èrmesh       k  A   A   €€  ÿÿÿÿÿÿ          @ «I     è    Œ$0H`lx Åèrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          ` Mf     è    Œ$0H`lx
  Jè7èrmesh       ‹¨ A   A   €€  ÿÿÿÿÿÿ          P Ëê     è    Œ$0H`lx fèrmesh       ¥Å F   F   €€  ÿÿÿÿÿÿ          p m     è    Œ$0H`lx
  ëèØèrmesh       k  A   A   €€  ÿÿÿÿÿÿ          ` ë‹     è    Œ$0H`lx èrmesh       …$  F   F   €€  ÿÿÿÿÿÿ          € �¨     è    Œ$0H`lx
@@ -7,50 +7,50 @@
        sÅ N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
        Æ F   F   €€  ÿÿÿÿÿÿ          Ð ­I&     è    Œ$0H`lx
- -&èèrmesh       2Ë       Ô€              ÝË N   N   ˆƒ<                             ªª           
+ -&èèrmesh       Ë       Ô€              ¹Ë N   N   ˆƒ<                             ªª           
      
-       íË       Ô€              DÌ ²   ²   ˆƒ<                              ªª    E  €    @  
+       ÉË       Ô€               Ì ²   ²   ˆƒ<                              ªª    E  €    @  
 
-À 	 l                                                                                                             ˆÍ       Ô€              úÎ ²   ²   ˆƒ<                             ªª    E  €    @  
+À 	 l                                                                                                             dÍ       Ô€              ÍÎ ²   ²   ˆƒ<                             ªª    E  €    @  
 
-À 	 l                                                                                                             ­ó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+À 	 l                                                                                                             nó N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Øó N   N   ˆƒ<                             ªª           
+       ™ó N   N   ˆƒ<                             ªª           
      
-       •ô       Ô€              äô N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
+       Vô       Ô€              ¥ô N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ°           ªª           
 ÿÿÿÿÿÿ
-       Fö N   N   ˆƒ<                            ªª           
+       õõ N   N   ˆƒ<                            ªª           
      
-       ý       Ô€              Gþ ²   ²   ˆƒ<                            ªª    E  €    @  
+       ¨ü       Ô€              Ûý ²   ²   ˆƒ<                            ªª    E  €    @  
 
- 	À l                                                                                                             Wþ       Ô€                  ²   ²   ˆƒ<                              ªª    E  €   @  
+ 	À l                                                                                                             ëý       Ô€                  ²   ²   ˆƒ<                              ªª    E  €   @  
 
 À 	 l                                                                                                             D        Ô€              w  ²   ²   ˆƒ<                             ªª    E  €   @  
 
-À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       
-        Ô€              R  ²   ²   ˆƒ<                             ªª    E  €   @  
+À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          À +Î-     è    Œ$0H`lx J&èrmesh       
+        Ô€              I  ²   ²   ˆƒ<                             ªª    E  €   @  
 
- 	À l                                                                                                             b        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
+ 	À l                                                                                                             Y        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          ð Íê-     è    Œ$0H`lx
  Î-è¼&èrmesh        ¡ ²   ²   ˆƒ<                0             ªª    E  €   @  
 
 À 	 l                                                                                                             d¢       Ô€              —£ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
-À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       ~«       Ô€              ±¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
+À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          Ð Ko5     è    Œ$0H`lx ë-èrmesh       c«       Ô€              –¬ ²   ²   ˆƒ<                0            ªª    E  €   @  
 
- 	À l                                                                                                             Á¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
+ 	À l                                                                                                             ¦¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ           í‹5     è    Œ$0H`lx
  o5è].èrmesh           ²   ²   ˆƒ<                @             ªª    E  €   @  
 
 À 	 l                                                                                                             D        Ô€              w  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
-À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       g
-        Ô€              š  ²   ²   ˆƒ<                @            ªª    E  €   @  
+À 	 l                                                                                                             k  A   A   €€  ÿÿÿÿÿÿ          à k=     è    Œ$0H`lx Œ5èrmesh       U
+        Ô€              ˆ  ²   ²   ˆƒ<                @            ªª    E  €   @  
 
- 	À l                                                                                                             ª        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
- =èþ5èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     ~ ?   ?   Ðˆ<                 ƒ           ˆ                     è~ ?   ?   Ðˆ<                 ƒ           ˆ                     0� E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ           R� ?   ?   Ð€<                ð ƒ           ˆ                     û�       Ô€              ‰‚ ?   ?   Ð€<                @ƒ         ˆ  –                  ƒ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ            ¡ ²   ²   ˆƒ<                P             ªª    E  €   @  
+ 	À l                                                                                                             ˜        Ô€              …$  F   F   €€  ÿÿÿÿÿÿ          -=     è    Œ$0H`lx
+ =èþ5èrmesh       ,| ?   ?   Ð€<                 ƒ           ˆ                     ý} ?   ?   Ðˆ<                 ƒ           ˆ                     ý~ E   E   Ð€  ÿÿÿÿÿÿ          0‚%            ˆ      ÿÿÿÿÿÿ            ?   ?   Ð€<                ð ƒ           ˆ                     Ç       Ô€              V€ ?   ?   Ð€<                @ƒ         ˆ  –                  â€ E   E   Ð€  ÿÿÿÿÿÿ           ‚%            ˆ  6  ÿÿÿÿÿÿ            ¡ ²   ²   ˆƒ<                P             ªª    E  €   @  
 
 À 	 l                                                                                                             d¢       Ô€              —£ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
-À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       ‡«       Ô€              º¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
+À 	 l                                                                                                             ‹¨ A   A   €€  ÿÿÿÿÿÿ          ‹±D     è    Œ$0H`lx -=èrmesh       c«       Ô€              –¬ ²   ²   ˆƒ<                P            ªª    E  €   @  
 
- 	À l                                                                                                             Ê¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
+ 	À l                                                                                                             ¦¬       Ô€              ¥Å F   F   €€  ÿÿÿÿÿÿ          P-ÎD     è    Œ$0H`lx
  ±DèŸ=èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-0-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -21,21 +21,21 @@
              ªª           
      
 
-       '        Ô€              î  b   b   ˆƒ<                       
+               Ô€              å  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              þ        Ô€              v0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
+À 	                              õ        Ô€              m0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
 ÿÿÿÿÿÿ
-       ¢1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+       ™1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       Á7        Ô€              l8  N   N   ˆƒ<                      
+       ¯7        Ô€              Z8  N   N   ˆƒ<                      
       ªª           
 
      
-       |8        Ô€              Ó8  b   b   ˆƒ<                
+       j8        Ô€              Á8  b   b   ˆƒ<                
              ªª    E  0    @  
 
- 	À                              ¬9        Ô€              …:  b   b   ˆƒ<                
+ 	À                              š9        Ô€              j:  b   b   ˆƒ<                
             ªª    E  0    @  
 
  	À                              Á  F   F   €€  ÿÿÿÿÿÿ          Ð E     è    Œ$0H`lx
@@ -45,7 +45,7 @@
 À 	                              F§       Ô€              �§ b   b   ˆƒ<                
               ªª    E  0   @  
 
- 	À                              v¨       Ô€              |© b   b   ˆƒ<                
+ 	À                              v¨       Ô€              s© b   b   ˆƒ<                
              ªª    E  0   @  
 
  	À                              +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
@@ -56,34 +56,29 @@
  6è/èrmesh       jð A   A   €€  ÿÿÿÿÿÿ          Ð *·6     è    Œ$0H`lx (6èrmesh       … E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
    ˆ  `                  9… ?   ?   Ð€<                à ƒ        
    ˆ                     â…       Ô€              p† ?   ?   Ð€<                0ƒ      
-   ˆ  Ê                  î‘       Ô€              µ’ b   b   ˆƒ<                0      
+   ˆ  Ê                  Ü‘       Ô€              £’ b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              Å’       Ô€              “ b   b   ˆƒ<                
+À 	                              ³’       Ô€              
+“ b   b   ˆƒ<                
 0             ªª    E  0   @  
 
- 	À                              õ“       Ô€              û” b   b   ˆƒ<                
-0            ªª    E  0   @  
-
- 	À                              L– b   b   ˆ‹<                
-0            ªª    E  0   @  
+ 	À                              ¬” b   b   ˆ‹<                
+0             ªª    E  0   @  
 
- 	À                              _™ b   b   ˆ‹<                
+ 	À                              …•       Ô€              L– b   b   ˆƒ<                
 0            ªª    E  0   @  
 
- 	À                              �       Ô€              ½Ÿ b   b   ˆ‹<                
+ 	À                              �— b   b   ˆ‹<                
 0            ªª    E  0   @  
 
- 	À                              -¡ b   b   ˆƒ<                @      
+ 	À                              š       Ô€              Õš b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              =¡       Ô€              ”¡ b   b   ˆƒ<                
+À 	                              åš       Ô€              <› b   b   ˆƒ<                
 @             ªª    E  0   @  
 
- 	À                              m¢       Ô€              O£ b   b   ˆƒ<                
-@            ªª    E  0   @  
-
- 	À                              o¥ b   b   ˆ‹<                
+ 	À                              œ       Ô€              Q� b   b   ˆƒ<                
 @            ªª    E  0   @  
 
  	À                              �:        Ô€              û:  /   /   Ð€<                @„       
@@ -94,47 +89,38 @@
 
 À 	                              äÃ	       Ô€              _Ä	 E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ           
            —Å	 E   E   Ð€  ÿÿÿÿÿÿ          p‚%            ˆ  ž        
-           ’È	       Ô€              YÉ	 b   b   ˆƒ<                `      
+           ‰È	       Ô€              PÉ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              iÉ	       Ô€              Ôã E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
+À 	                              `É	       Ô€              Ôã E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
            å E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
-           óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  `       
+           óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  [       
           ‘é       Ô€              èé b   b   ˆƒ<                
 P             ªª    E  0   @  
 
  	À                              Áê       Ô€              ˆë b   b   ˆƒ<                
 P            ªª    E  0   @  
 
- 	À                              Iì b   b   ˆƒ<                
+ 	À                              øë b   b   ˆƒ<                
 `             ªª    E  0   @  
 
- 	À                              ˆí b   b   ˆ‹<                
-`             ªª    E  0   @  
-
- 	À                              éî       Ô€              wï ?   ?   Ð€<                 ƒ         ˆ  ^       
-          ‡ï       Ô€              „ð b   b   ˆ‹<                
+ 	À                              Ñì       Ô€              éí b   b   ˆ‹<                
 P            ªª    E  0   @  
 
- 	À                              ºñ b   b   ˆ‹<                
-`             ªª    E  0   @  
-
- 	À                              “ò       Ô€              ´ó b   b   ˆƒ<                
-`            ªª    E  0   @  
+ 	À                              ïï       Ô€              }ð ?   ?   Ð€<                 ƒ         ˆ  [       
+          �ð       Ô€              ûò b   b   ˆ‹<                
+P            ªª    E  0   @  
 
- 	À                              2õ b   b   ˆ‹<                
+ 	À                              õ b   b   ˆƒ<                
 `            ªª    E  0   @  
 
  	À                              Á  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
  ùLèùEèrmesh       JO A   A   €€  ÿÿÿÿÿÿ          0ŠšM     è    Œ$0H`lx Mèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
- ›TèšMèrmesh       jð A   A   €€  ÿÿÿÿÿÿ          @ª;U     è    Œ$0H`lx ­Tèrmesh       *%       Ô€              :' /   /   Ðˆ<                Ð„       
-            J'       Ô€              Á  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
- <\èšMèrmesh       ÓM /   /   Ð€<                ð„                   †N -   -   Ð€<                 rmeshu  4        –N       Ô€              äN -   -   Ð€<                Prmeshu  7        uO       Ô€              ŽO A   A   €€  ÿÿÿÿÿÿ          `ÊÜ\     è    Œ$0H`lx N\èrmesh       �P >   >   Ð€<                  Œ$0H`lrmeshq  9u        �P       Ô€              ëP -   -   Ð€<                prmeshu  4        |Q       Ô€              
-R >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        R       Ô€              ÏR -   -   Ð€<                 rmeshu  7        ßR       Ô€              #b A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       Eb >   >   Ð€<                €  Œ$0H`lrmeshq   9u        îb       Ô€              xc <   <   Ð€<                @   Œ$0H`lq  9u         ˆc       Ô€              6e >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        Fe       Ô€              ”e <   <   Ð€<                �   Œ$0H`lq  9u         9f       Ô€              jÐ A   A   €€  ÿÿÿÿÿÿ           ê]d     è    Œ$0H`lxïcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
- ~kè^dèrmesh       J/ A   A   €€  ÿÿÿÿÿÿ          °
-ÿk     è    Œ$0H`lx�kèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
- sè^dèrmesh       ïÎ -   -   Ð€<                €rmeshu  4        ÿÎ       Ô€              MÏ -   -   Ð€<                Àrmeshu  7        MÐ -   -   Ðˆ<                Àrmeshu  7        ÞÐ       Ô€              ÷Ð A   A   €€  ÿÿÿÿÿÿ          Ð* s     è    Œ$0H`lx1sèrmesh       öÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        Ò       Ô€              fÒ -   -   Ð€<                àrmeshu  4        ÷Ò       Ô€              mÓ -   -   Ð€<                 rmeshu  7        }Ó       Ô€              Á  A   A   €€  ÿÿÿÿÿÿ          °“Òz     è    Œ$0H`lx Àzèrmesh       %Á  >   >   Ð€<                ð  Œ$0H`lrmeshq   9u        ÎÁ        Ô€              XÂ  <   <   Ð€<                À   Œ$0H`lq  9u         hÂ        Ô€              MÄ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        ]Ä        Ô€              «Ä  <   <   Ð€<                    Œ$0H`lq  9u         PÅ        Ô€              JW A   A   €€  ÿÿÿÿÿÿ          Ji{     è    Œ$0H`lxÓzèrmesh       |`       Ô€              ò` -   -   Ð€<                àrmeshu  7        +b F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
- a‚èi{èrmesh       öb       Ô€              vd       Ô€              jø A   A   €€  ÿÿÿÿÿÿ           j
-ƒ     è    Œ$0H`lxt‚èrmesh    	   Á  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
-ƒèrmesh    	   ÎÁ        Ô€           	   XÂ  <   <   Ð€<                    Œ$0H`lq  9u      	   >Ã  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   AÄ        Ô€           	   JW A   A   €€  ÿÿÿÿÿÿ          0Š«Š     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
-«ŠèŠèrmesh    	   jø A   A   €€  ÿÿÿÿÿÿ          @ªL’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ ›TèùEèrmesh       óî /   /   Ð€<                Ð„                   \ð -   -   Ð€<                àrmeshu  4        lð       Ô€              ±ð A   A   €€  ÿÿÿÿÿÿ          @ª;U     è    Œ$0H`lx ­Tèrmesh       Cñ -   -   Ð€<                Prmeshu  7        Ôñ       Ô€              %       Ô€              J/ <   <   €€  ÿÿÿÿÿÿ          `Ê¼\     è    Œ$0H`lx rmesh       A0 >   >   Ð€<                   Œ$0H`lrmeshq  9u        Q0       Ô€              Ÿ0 <   <   Ð€<                p   Œ$0H`lq   9u         D1       Ô€              f1 >   >   Ð€<                €  Œ$0H`lrmeshq   9u        2       Ô€              [3 <   <   Ðˆ<                   Œ$0H`lq  9u         k3       Ô€              +6 F   F   €€  ÿÿÿÿÿÿ           3Ãc     è    Œ$0H`lx
+ <\è½\èrmesh       jÐ A   A   €€  ÿÿÿÿÿÿ          �ê]d     è    Œ$0H`lxÃcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          0S�k     è    Œ$0H`lx
+ ~kè½\èrmesh       Ç- -   -   Ð€<                @rmeshu  4        ×-       Ô€              %. -   -   Ð€<                 rmeshu  7        / -   -   Ðˆ<                 rmeshu  7        ­/       Ô€              Æ/ A   A   €€  ÿÿÿÿÿÿ          °
+ÿk     è    Œ$0H`lx�kèrmesh       Å0 >   >   Ð€<                P  Œ$0H`lrmeshq  9u        Õ0       Ô€              51 -   -   Ð€<                Àrmeshu  4        Æ1       Ô€              <2 -   -   Ð€<                `rmeshu  7        L2       Ô€              #b A   A   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx sèrmesh       Eb >   >   Ð€<                Ð  Œ$0H`lrmeshq   9u        îb       Ô€              xc <   <   Ð€<                €   Œ$0H`lq  9u         ˆc       Ô€              Ud >   >   Ð€<                �  Œ$0H`lrmeshq  9u        ed       Ô€              ³d <   <   Ð€<                à   Œ$0H`lq  9u         Xe       Ô€              jø A   A   €€  ÿÿÿÿÿÿ          ð*Ès     è    Œ$0H`lx1sèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ           “Òz     è    Œ$0H`lx
+ ÀzèÈsèrmesh       JW A   A   €€  ÿÿÿÿÿÿ           Ji{     è    Œ$0H`lxÓzèrmesh       jø A   A   €€  ÿÿÿÿÿÿ          j
+ƒ     è    Œ$0H`lxÓzèrmesh    	   Ë¾  -   -   Ð€<                 rmeshu  4     	   \¿        Ô€           	   Ò¿  -   -   Ð€<                Àrmeshu  7     	   â¿        Ô€           	   Á  F   F   €€  ÿÿÿÿÿÿ          ÐÓŠ     è    Œ$0H`lx
+ Šè
+ƒèrmesh    	   -Á  >   >   Ð€<                0  Œ$0H`lrmeshq   9u     	   ÖÁ        Ô€           	   LÂ  -   -   Ð€<                àrmeshu  4     	   \Â        Ô€           	   ªÂ  -   -   Ð€<                @rmeshu  7     	   ;Ã        Ô€           	   J7 A   A   €€  ÿÿÿÿÿÿ          PŠ‹Š     è    Œ$0H`lxŠèrmesh    	   a9 >   >   Ðˆ<                ð  Œ$0H`lrmeshq  9u     	   q9       Ô€           	   ¿9 -   -   Ð€<                `rmeshu  4     	   P:       Ô€           	   Ï: -   -   Ð€<                 rmeshu  7     	   ß:       Ô€           	   #b A   A   €€  ÿÿÿÿÿÿ          óµ‘     è    Œ$0H`lx £‘èrmesh    	   Eb >   >   Ð€<                p  Œ$0H`lrmeshq   9u     	   îb       Ô€           	   xc <   <   Ð€<                    Œ$0H`lq  9u      	   ˆc       Ô€           	   .e >   >   Ðˆ<                0  Œ$0H`lrmeshq  9u     	   >e       Ô€           	   Œe <   <   Ð€<                €   Œ$0H`lq  9u      	   1f       Ô€           	   jÄ A   A   €€  ÿÿÿÿÿÿ          �ª’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-1-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       %  >   >   Ð€<                    Œ$0H`lrmeshq   9u         &  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         '  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         é'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ï(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         õ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         û*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         À—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ì™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ûš  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ê›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Þœ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÖÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÜÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¾Ç  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÄÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        Ñ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         Ñ        Ô€               jÑ  <   <   Ð€<                      Œ$0H`lq   9u          HÒ  <   <   Ðˆ<                      Œ$0H`lq   9u          íÒ        Ô€               DÕ        Ô€               ˜6 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          Û7       Ô€               »O A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`lx É èrmesh        ÝO >   >   Ð€<                @   Œ$0H`lrmeshq  9u         †P       Ô€               Q <   <   Ð€<                      Œ$0H`lq   9u           Q       Ô€               öi >   >   Ð€<                0   Œ$0H`lrmeshq   9u         j       Ô€               Tj <   <   Ð€<                P    Œ$0H`lq  9u          ùj       Ô€               ý– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         	™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ý™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         › >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         å› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         èœ       Ô€               Î�       Ô€               Xž <   <   Ð€<                p    Œ$0H`lq  9u          ³a F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       %  >   >   Ð€<                    Œ$0H`lrmeshq   9u         &  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         '  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         é'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ï(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         õ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         û*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         À—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ½˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ì™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ûš  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ê›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Þœ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         âÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ÖÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÜÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¾Ç  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ÄÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        Ñ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         Ñ        Ô€               jÑ  <   <   Ð€<                      Œ$0H`lq   9u          HÒ  <   <   Ðˆ<                      Œ$0H`lq   9u          íÒ        Ô€               ;Õ        Ô€               ˜6 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          Û7       Ô€               »O A   A   €€  ÿÿÿÿÿÿ           JO     è    Œ$0H`lx É èrmesh        ÝO >   >   Ð€<                @   Œ$0H`lrmeshq  9u         †P       Ô€               Q <   <   Ð€<                      Œ$0H`lq   9u           Q       Ô€               öi >   >   Ð€<                0   Œ$0H`lrmeshq   9u         j       Ô€               Tj <   <   Ð€<                P    Œ$0H`lq  9u          ùj       Ô€               ý– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         	™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         ý™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         › >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         å› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         èœ       Ô€               Î�       Ô€               Xž <   <   Ð€<                p    Œ$0H`lq  9u          ³a F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
  – èOèrmesh        Àg F   F   €€  ÿÿÿÿÿÿ          € Hg     è    Œ$0H`lx
 bè•èrmesh        Ûð A   A   €€  ÿÿÿÿÿÿ          @ jð     è    Œ$0H`lx bèrmesh        ®  F   F   €€  ÿÿÿÿÿÿ          � hð     è    Œ$0H`lx
 bènèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
@@ -35,33 +35,33 @@
              ªª           
      
 
-       $        Ô€              ë  b   b   ˆƒ<                       
+               Ô€              â  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              û        Ô€              R  b   b   ˆƒ<                       
+À 	                              ò        Ô€              I  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              +        Ô€              ÷0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
+À 	                              "        Ô€              î0  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ�            ªª           
 ÿÿÿÿÿÿ
-       "1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+       1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       N2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+       E2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       Ú6        Ô€              …7  N   N   ˆƒ<                      
+       È6        Ô€              s7  N   N   ˆƒ<                      
       ªª           
 
      
-       •7        Ô€              ì7  N   N   ˆƒ<                      
+       ƒ7        Ô€              Ú7  N   N   ˆƒ<                      
       ªª           
 
      
-       ©8        Ô€              p9  b   b   ˆƒ<                
+       —8        Ô€              ^9  b   b   ˆƒ<                
              ªª    E  0    @  
 
- 	À                              €9        Ô€              é9  b   b   ˆƒ<                
+ 	À                              n9        Ô€              Î9  b   b   ˆƒ<                
             ªª    E  0    @  
 
- 	À                              Â:        Ô€               ®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
+ 	À                              §:        Ô€               ®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
 ¤è±èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          Ð E     è    Œ$0H`lx
  3è3èrmesh       »O A   A   €€  ÿÿÿÿÿÿ            ÊÓ     è    Œ$0H`lx Eèrmesh        ¤       Ô€              3¦ b   b   ˆ‹<                       
       ªª    E  0   @  
@@ -72,10 +72,10 @@
 À 	                              s§       Ô€              :¨ b   b   ˆƒ<                
               ªª    E  0   @  
 
- 	À                              J¨       Ô€              à¨ b   b   ˆƒ<                
+ 	À                              J¨       Ô€              ×¨ b   b   ˆƒ<                
              ªª    E  0   @  
 
- 	À                              ¹©       Ô€              €ª b   b   ˆƒ<                
+ 	À                              °©       Ô€              wª b   b   ˆƒ<                
              ªª    E  0   @  
 
  	À                              ÀO F   F   €€  ÿÿÿÿÿÿ           ÈÓ&     è    Œ$0H`lx
@@ -94,43 +94,37 @@
    ˆ  `                  ¦… ?   ?   Ð€<                à ƒ        
    ˆ                     ¶…       Ô€              † ?   ?   Ð€<                0ƒ      
    ˆ  Ê                  ­†       Ô€              ;‡ ?   ?   Ð€<                Pƒ      
-   ˆ  u                 ë�       Ô€              ²‘ b   b   ˆƒ<                0      
+   ˆ  u                 Ù�       Ô€               ‘ b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              Â‘       Ô€              ’ b   b   ˆƒ<                0      
+À 	                              °‘       Ô€              ’ b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              ò’       Ô€              ¹“ b   b   ˆƒ<                
+À 	                              à’       Ô€              I• b   b   ˆ‹<                
 0             ªª    E  0   @  
 
- 	À                              É“       Ô€              _” b   b   ˆƒ<                
+ 	À                              Y•       Ô€              °• b   b   ˆƒ<                
 0            ªª    E  0   @  
 
- 	À                              °• b   b   ˆ‹<                
+ 	À                              — b   b   ˆ‹<                
 0            ªª    E  0   @  
 
- 	À                              Ã˜ b   b   ˆ‹<                
-0            ªª    E  0   @  
-
- 	À                              œ       Ô€              Ýœ b   b   ˆƒ<                @      
+ 	À                              Ú—       Ô€              ™       Ô€              Ò™ b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              íœ       Ô€              !Ÿ b   b   ˆ‹<                
-0            ªª    E  0   @  
-
- 	À                              úŸ       Ô€              ‘  b   b   ˆƒ<                @      
+À 	                              â™       Ô€              9š b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              j¡       Ô€              1¢ b   b   ˆƒ<                
+À 	                              ›       Ô€              Ù› b   b   ˆƒ<                
 @             ªª    E  0   @  
 
- 	À                              A¢       Ô€              ³¢ b   b   ˆƒ<                
+ 	À                              é›       Ô€              µœ b   b   ˆƒ<                
 @            ªª    E  0   @  
 
- 	À                              Ó¤ b   b   ˆ‹<                
-@            ªª    E  0   @  
+ 	À                              Ž�       Ô€              Už b   b   ˆƒ<                
+0            ªª    E  0   @  
 
- 	À                              ¬¥       Ô€              Ë9        Ô€              E:  /   /   Ð€<                `„       
+ 	À                              Ë9        Ô€              E:  /   /   Ð€<                `„       
             U:        Ô€              £:  /   /   Ð€<                @„       
             8;        Ô€               ®  F   F   €€  ÿÿÿÿÿÿ          p(·=     è    Œ$0H`lx
 (6èí<èrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          P“É=     è    Œ$0H`lx
@@ -145,55 +139,60 @@
 
 À 	                              Ä	       Ô€              ÔÄ	 E   E   Ð€  ÿÿÿÿÿÿ          ‚%              ˆ           
            #Å	 E   E   Ð€  ÿÿÿÿÿÿ          p‚%            ˆ  ž        
-           �Ç	       Ô€              VÈ	 b   b   ˆƒ<                `      
+           †Ç	       Ô€              MÈ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              fÈ	       Ô€              ½È	 b   b   ˆƒ<                `      
+À 	                              ]È	       Ô€              ´È	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              –É	       Ô€              Iä E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
+À 	                              �É	       Ô€              Iä E   E   Ð€  ÿÿÿÿÿÿ           ‚%              ˆ           
            ˜ä E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
            Ðå E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
-           )è       Ô€              ·è ?   ?   Ð€<                 ƒ         ½  É       
-          Çè       Ô€              é ?   ?   Ð€<                �ƒ         ½  `       
+           )è       Ô€              ·è ?   ?   Ð€<                 ƒ         ½  Ä       
+          Çè       Ô€              é ?   ?   Ð€<                �ƒ         ½  [       
           ¾é       Ô€              …ê b   b   ˆƒ<                
 P             ªª    E  0   @  
 
  	À                              •ê       Ô€              ìê b   b   ˆƒ<                
 P            ªª    E  0   @  
 
- 	À                              Iì       Ô€              ­î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
-          ½î       Ô€              ï ?   ?   Ð€<                 ƒ         ˆ  ^       
-          ´ï       Ô€              èï b   b   ˆ‹<                
+ 	À                              •ì b   b   ˆƒ<                
+`             ªª    E  0   @  
+
+ 	À                              ¥ì       Ô€              Mí b   b   ˆ‹<                
 P            ªª    E  0   @  
 
- 	À                              Áð       Ô€              ˆñ b   b   ˆƒ<                
-0            ªª    E  0   @  
+ 	À                              %ï       Ô€              ³ï ?   ?   Ð€<                °ƒ         ˆ  Ä       
+          Ãï       Ô€              ð ?   ?   Ð€<                 ƒ         ˆ  [       
+          ºð       Ô€              _ò b   b   ˆ‹<                
+P            ªª    E  0   @  
 
- 	À                              Wò b   b   ˆ‹<                
-`             ªª    E  0   @  
+ 	À                              8ó       Ô€              ÿó b   b   ˆƒ<                
+@            ªª    E  0   @  
 
- 	À                              gò       Ô€              ó b   b   ˆƒ<                
+ 	À                              �ô b   b   ˆƒ<                
 `            ªª    E  0   @  
 
- 	À                              –ô b   b   ˆ‹<                
-`            ªª    E  0   @  
+ 	À                              Zõ       Ô€              ºö b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              Üø b   b   ˆƒ<                
+P            ªª    E  0   @  
 
- 	À                              oõ       Ô€              6ö b   b   ˆƒ<                
-@            ªª    E  0   @  
+ 	À                              ú b   b   ˆ‹<                
+P            ªª    E  0   @  
 
  	À                               ®  F   F   €€  ÿÿÿÿÿÿ          ÀhùL     è    Œ$0H`lx
 kEè/Lèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
- ùLèùEèrmesh       »O A   A   €€  ÿÿÿÿÿÿ          0ŠšM     è    Œ$0H`lx Mèrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          ÐˆšT     è    Œ$0H`lx
+ ùLèùEèrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          ÐˆšT     è    Œ$0H`lx
 Mè/Lèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
- ›TèšMèrmesh       î$ <   <   Ð€<                à„                  
-            þ$       Ô€              L% /   /   Ð€<                Ð„       
-            r& -   -   Ð€<                ðrmeshu  4        â& /   /   Ðˆ<                Ð„       
-            w'       Ô€              ,( -   -   Ðˆ<                ðrmeshu  4        ö( -   -   Ðˆ<                ðrmeshu  4        Û) -   -   Ðˆ<                ðrmeshu  4        À* -   -   Ðˆ<                ðrmeshu  4        ·+ -   -   Ðˆ<                ðrmeshu  4        Š, -   -   Ðˆ<                ðrmeshu  4        ˜®  A   A   €€  ÿÿÿÿÿÿ           ¨;\     è    Œ$0H`lx­Tèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
- <\èšMèrmesh       {M /   /   Ð€<                ð„                   N       Ô€              2N -   -   Ð€<                 rmeshu  4        ÃN       Ô€              9O -   -   Ð€<                Prmeshu  7        IO       Ô€              ÿO A   A   €€  ÿÿÿÿÿÿ          `ÊÜ\     è    Œ$0H`lx N\èrmesh       !P >   >   Ð€<                  Œ$0H`lrmeshq  9u        @Q -   -   Ð€<                prmeshu  4        PQ       Ô€              žQ >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        GR       Ô€              {R -   -   Ð€<                 rmeshu  7        S       Ô€              ¸O A   A   €€  ÿÿÿÿÿÿ          ÈÜc     è    Œ$0H`lxN\èrmesh       ³a A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       ²b >   >   Ð€<                €  Œ$0H`lrmeshq   9u        Âb       Ô€              c <   <   Ð€<                @   Œ$0H`lq  9u         µc       Ô€              éc >   >   Ð€<                P  Œ$0H`lrmeshq  9u        Êd >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        se       Ô€              ýe <   <   Ð€<                �   Œ$0H`lq  9u         f       Ô€              ÛÐ A   A   €€  ÿÿÿÿÿÿ           ê]d     è    Œ$0H`lxïcèrmesh       ˜®  A   A   €€  ÿÿÿÿÿÿ           è}k     è    Œ$0H`lxïcèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
- ~kè^dèrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ          0s     è    Œ$0H`lx�kèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
- sè^dèrmesh       ›Î -   -   Ð€<                €rmeshu  4        ,Ï       Ô€              ¢Ð -   -   Ðˆ<                Àrmeshu  7        ²Ð       Ô€              hÑ A   A   €€  ÿÿÿÿÿÿ          Ð* s     è    Œ$0H`lx1sèrmesh       ŠÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        3Ò       Ô€              »Ò -   -   Ð€<                àrmeshu  4        ËÒ       Ô€              Ó -   -   Ð€<                 rmeshu  7        ªÓ       Ô€              ˜®  A   A   €€  ÿÿÿÿÿÿ          @(Àz     è    Œ$0H`lx1sèrmesh       “À  A   A   €€  ÿÿÿÿÿÿ          °“Òz     è    Œ$0H`lx Àzèrmesh       ’Á  >   >   Ð€<                ð  Œ$0H`lrmeshq   9u        ¢Á        Ô€              ðÁ  <   <   Ð€<                À   Œ$0H`lq  9u         •Â        Ô€              ÉÂ  >   >   Ð€<                Ð  Œ$0H`lrmeshq  9u        áÃ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        ŠÄ        Ô€              Å  <   <   Ð€<                    Œ$0H`lq  9u         $Å        Ô€              »W A   A   €€  ÿÿÿÿÿÿ          Ji{     è    Œ$0H`lxÓzèrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ          PHa‚     è    Œ$0H`lx1sèrmesh       @` -   -   Ð€<                `rmeshu  4        P`       Ô€              ž` -   -   Ð€<                àrmeshu  7        /a       Ô€              ³a F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
- a‚èi{èrmesh       ºb >   >   Ð€<                p  Œ$0H`lrmeshq   9u        Êb       Ô€              c -   -   Ð€<                 rmeshu  4        ©c       Ô€              :d -   -   Ð€<                €rmeshu  7        Jd       Ô€              Ûø A   A   €€  ÿÿÿÿÿÿ           j
-ƒ     è    Œ$0H`lxt‚èrmesh    	   “À  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
-ƒèrmesh    	   ’Á  >   >   Ð€<                �  Œ$0H`lrmeshq   9u     	   ¢Á        Ô€           	   ðÁ  <   <   Ð€<                    Œ$0H`lq  9u      	   •Â        Ô€           	   ÒÂ  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   {Ã        Ô€           	   Ä  <   <   Ð€<                    Œ$0H`lq  9u      	   Ä        Ô€           	   ˜Æ  A   A   €€  ÿÿÿÿÿÿ          °hŠ     è    Œ$0H`lxŠèrmesh    	   »W A   A   €€  ÿÿÿÿÿÿ          0Š«Š     è    Œ$0H`lxŠèrmesh    	   ³a F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
-«ŠèŠèrmesh    	   ¸� A   A   €€  ÿÿÿÿÿÿ          Àˆã‘     è    Œ$0H`lx¶‘èrmesh    	   Ûø A   A   €€  ÿÿÿÿÿÿ          @ªL’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ ›TèùEèrmesh       ›î /   /   Ð€<                Ð„                   0ï       Ô€              ªï /   /   Ð€<                à„                   ð -   -   Ð€<                àrmeshu  4        ™ð       Ô€              ˜ñ -   -   Ð€<                Prmeshu  7        ¨ñ       Ô€              îò /   /   Ðˆ<                à„                   òó /   /   Ðˆ<                à„                   Àô /   /   Ðˆ<                à„                   ©õ /   /   Ðˆ<                à„                   Ò$ <   <   Ð€<                ð„                  
+            â$       Ô€               % -   -   Ð€<                 rmeshu  4        s& -   -   Ðˆ<                 rmeshu  4        s' -   -   Ðˆ<                 rmeshu  4        j) -   -   Ðˆ<                 rmeshu  4        =* -   -   Ðˆ<                 rmeshu  4        ++ -   -   Ðˆ<                 rmeshu  4        ˜®  A   A   €€  ÿÿÿÿÿÿ          ¨;\     è    Œ$0H`lx­Tèrmesh       “À  A   A   €€  ÿÿÿÿÿÿ          ðN\     è    Œ$0H`lx <\èrmesh       ³/ <   <   €€  ÿÿÿÿÿÿ          `Ê¼\     è    Œ$0H`lx rmesh       Õ/ >   >   Ð€<                   Œ$0H`lrmeshq  9u        ~0       Ô€              1 <   <   Ð€<                p   Œ$0H`lq   9u         1       Ô€              Ó1 >   >   Ð€<                €  Œ$0H`lrmeshq   9u        ã1       Ô€              12 <   <   Ð€<                   Œ$0H`lq  9u         ó2 <   <   Ðˆ<                   Œ$0H`lq  9u         ˜3       Ô€              ³5 F   F   €€  ÿÿÿÿÿÿ           3Ãc     è    Œ$0H`lx
+ <\è½\èrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ           ÈÜc     è    Œ$0H`lxÃcèrmesh       ˜®  A   A   €€  ÿÿÿÿÿÿ          0è}k     è    Œ$0H`lxÃcèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ          0S�k     è    Œ$0H`lx
+ ~kè½\èrmesh       s- -   -   Ð€<                @rmeshu  4        .       Ô€              q/ -   -   Ðˆ<                 rmeshu  7        �/       Ô€              70 A   A   €€  ÿÿÿÿÿÿ          °
+ÿk     è    Œ$0H`lx�kèrmesh       Y0 >   >   Ð€<                P  Œ$0H`lrmeshq  9u        1       Ô€              Š1 -   -   Ð€<                Àrmeshu  4        š1       Ô€              è1 -   -   Ð€<                `rmeshu  7        y2       Ô€              ¸O A   A   €€  ÿÿÿÿÿÿ          @s     è    Œ$0H`lx�kèrmesh       ³a A   A   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx sèrmesh       ²b >   >   Ð€<                Ð  Œ$0H`lrmeshq   9u        Âb       Ô€              c <   <   Ð€<                €   Œ$0H`lq  9u         µc       Ô€              éc >   >   Ð€<                �  Œ$0H`lrmeshq  9u        ’d       Ô€              e <   <   Ð€<                à   Œ$0H`lq  9u         ,e       Ô€              Ûø A   A   €€  ÿÿÿÿÿÿ          ð*Ès     è    Œ$0H`lx1sèrmesh       ˜®  A   A   €€  ÿÿÿÿÿÿ          P(Àz     è    Œ$0H`lx1sèrmesh       “À  F   F   €€  ÿÿÿÿÿÿ           “Òz     è    Œ$0H`lx
+ ÀzèÈsèrmesh       »W A   A   €€  ÿÿÿÿÿÿ           Ji{     è    Œ$0H`lxÓzèrmesh       ¸O A   A   €€  ÿÿÿÿÿÿ          `Ha‚     è    Œ$0H`lxÓzèrmesh       ³a F   F   €€  ÿÿÿÿÿÿ          °³s‚     è    Œ$0H`lx
+ a‚èi{èrmesh       Ûø A   A   €€  ÿÿÿÿÿÿ          j
+ƒ     è    Œ$0H`lxÓzèrmesh    	   ˜®  A   A   €€  ÿÿÿÿÿÿ          phŠ     è    Œ$0H`lxt‚èrmesh    	    ¿  -   -   Ð€<                 rmeshu  4     	   0¿        Ô€           	   ~¿  -   -   Ð€<                Àrmeshu  7     	   À        Ô€           	   “À  F   F   €€  ÿÿÿÿÿÿ          ÐÓŠ     è    Œ$0H`lx
+ Šè
+ƒèrmesh    	   šÁ  >   >   Ð€<                0  Œ$0H`lrmeshq   9u     	   ªÁ        Ô€           	   øÁ  -   -   Ð€<                àrmeshu  4     	   ‰Â        Ô€           	   ÿÂ  -   -   Ð€<                @rmeshu  7     	   Ã        Ô€           	   »7 A   A   €€  ÿÿÿÿÿÿ          PŠ‹Š     è    Œ$0H`lxŠèrmesh    	   Ý7 >   >   Ð€<                ð  Œ$0H`lrmeshq  9u     	   õ8 >   >   Ðˆ<                ð  Œ$0H`lrmeshq  9u     	   ž9       Ô€           	   : -   -   Ð€<                `rmeshu  4     	   $:       Ô€           	   {: -   -   Ð€<                 rmeshu  7     	   ;       Ô€           	   ¸O A   A   €€  ÿÿÿÿÿÿ          €ˆ£‘     è    Œ$0H`lxŠèrmesh    	   ³a A   A   €€  ÿÿÿÿÿÿ          óµ‘     è    Œ$0H`lx £‘èrmesh    	   ²b >   >   Ð€<                p  Œ$0H`lrmeshq   9u     	   Âb       Ô€           	   c <   <   Ð€<                    Œ$0H`lq  9u      	   µc       Ô€           	   ×c >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   Âd >   >   Ðˆ<                0  Œ$0H`lrmeshq  9u     	   ke       Ô€           	   õe <   <   Ð€<                €   Œ$0H`lq  9u      	   f       Ô€           	   ÛÄ A   A   €€  ÿÿÿÿÿÿ          �ª’     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-2-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¯%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         £&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         |'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‚(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˆ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ž*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         j@  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         pA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jC  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         yD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jF  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         (–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        uÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         iÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         oÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         QÇ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         WÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        ØÉ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œË  >   >   Ð€<                0   Œ$0H`lrmeshq   9u         �Ì  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÍ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         “Î  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ™Ï  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÐ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         HÑ        Ô€               8Ò  -   -   Ð€<      	          0 rmeshu  7         °Ò  <   <   Ðˆ<                      Œ$0H`lq   9u          ÀÒ        Ô€               )Ó  -   -   Ð€<                @ rmeshu   4         ºÓ        Ô€               BÔ  -   -   Ðˆ<      	          0 rmeshu  7         Õ  -   -   Ð€<                @ rmeshu  7         Õ        Ô€               7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         7       Ô€               c7 <   <   Ð€<                P    Œ$0H`lq  9u          8       Ô€               IP >   >   Ð€<                @   Œ$0H`lrmeshq  9u         LQ       Ô€               2j       Ô€               ¼j <   <   Ð€<                P    Œ$0H`lq  9u          •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<                `   Œ$0H`lrmeshq  9u         �– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿ— >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         œ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         �™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿš >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         x› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         !œ       Ô€               «œ <   <   Ð€<                `    Œ$0H`lq   9u          »œ       Ô€               ‘� >   >   Ð€<                p   Œ$0H`lrmeshq   9u         ¡�       Ô€               ï� <   <   Ð€<                p    Œ$0H`lq  9u          ”ž       Ô€               ’© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         •ª       Ô€       	        >6       Ô€       	        È6 <   <   Ð€<      	          �    Œ$0H`lq  9u          +b F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
+ÔÃ²¡          ÿÿ  i       u$  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        —$  >   >   Ð€<                    Œ$0H`lrmeshq   9u         ¯%  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         £&  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         |'  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‚(  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ˆ)  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         Ž*  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         j@  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         pA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jC  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         yD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         RE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         jF  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         (–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        uÄ  >   >   Ð€<                    Œ$0H`lrmeshq   9u         iÅ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         oÆ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         QÇ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         WÈ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ‰É  A   A   €€  ÿÿÿÿÿÿ           “È      è    Œ$0H`lx – èrmesh        ØÉ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ±Ê  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         œË  >   >   Ð€<                0   Œ$0H`lrmeshq   9u         �Ì  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÍ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         “Î  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ™Ï  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         ŸÐ  >   >   Ðˆ<                0   Œ$0H`lrmeshq   9u         HÑ        Ô€               /Ò  -   -   Ð€<      	          0 rmeshu  7         °Ò  <   <   Ðˆ<                      Œ$0H`lq   9u          ÀÒ        Ô€                Ó  -   -   Ð€<                @ rmeshu   4         ±Ó        Ô€               9Ô  -   -   Ðˆ<      	          0 rmeshu  7         þÔ  -   -   Ð€<                @ rmeshu  7         Õ        Ô€               7 >   >   Ð€<                0   Œ$0H`lrmeshq   9u         7       Ô€               c7 <   <   Ð€<                P    Œ$0H`lq  9u          8       Ô€               IP >   >   Ð€<                @   Œ$0H`lrmeshq  9u         LQ       Ô€               2j       Ô€               ¼j <   <   Ð€<                P    Œ$0H`lq  9u          •• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        ·• >   >   Ð€<                `   Œ$0H`lrmeshq  9u         �– >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿ— >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         œ˜ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         �™ >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         Ÿš >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         x› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         !œ       Ô€               «œ <   <   Ð€<                `    Œ$0H`lq   9u          »œ       Ô€               ‘� >   >   Ð€<                p   Œ$0H`lrmeshq   9u         ¡�       Ô€               ï� <   <   Ð€<                p    Œ$0H`lq  9u          ”ž       Ô€               ’© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         •ª       Ô€       	        >6       Ô€       	        È6 <   <   Ð€<      	          �    Œ$0H`lq  9u          +b F   F   €€  ÿÿÿÿÿÿ          ` ³a     è    Œ$0H`lx
  – èOèrmesh        Hg F   F   €€  ÿÿÿÿÿÿ          € Hg     è    Œ$0H`lx
 bè•èrmesh       },  A   A   €€  ÿÿÿÿÿÿ            Mn     è    Œ$0H`lxèrmesh       (®  F   F   €€  ÿÿÿÿÿÿ          � hð     è    Œ$0H`lx
 bènèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          p Ó     è    Œ$0H`lx
@@ -36,41 +36,41 @@
              ªª           
      
 
-                Ô€       	       ç  b   b   ˆƒ<                       
+               Ô€       	       Þ  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              ÷        Ô€              N  b   b   ˆƒ<                       
+À 	                              î        Ô€              E  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              '        Ô€              î  b   b   ˆƒ<                       
+À 	                                      Ô€              å  b   b   ˆƒ<                       
       ªª    E  0    @  
 
 À 	                              …,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
-’è`èrmesh       ¢1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
+’è`èrmesh       ™1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿÀ           ªª           
 ÿÿÿÿÿÿ
-       Í1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+       Ä1  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       ù2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       ð2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ò5        Ô€       	       �6  N   N   ˆƒ<                      
+       à5        Ô€       	       ‹6  N   N   ˆƒ<                      
       ªª           
 
      
-       ­6        Ô€              7  N   N   ˆƒ<                      
+       ›6        Ô€              ò6  N   N   ˆƒ<                      
       ªª           
 
      
-       Á7        Ô€              l8  N   N   ˆƒ<                      
+       ¯7        Ô€              Z8  N   N   ˆƒ<                      
       ªª           
 
      
-       ¬9        Ô€              …:  b   b   ˆƒ<                
+       š9        Ô€              j:  b   b   ˆƒ<                
             ªª    E  0    @  
 
- 	À                              •:        Ô€              ì:  b   b   ˆƒ<                
+ 	À                              z:        Ô€              Ñ:  b   b   ˆƒ<                
             ªª    E  0    @  
 
- 	À                              Å;        Ô€              Œ<  b   b   ˆƒ<      	          
+ 	À                              ª;        Ô€              q<  b   b   ˆƒ<      	          
             ªª    E  0    @  
 
  	À                              (®  F   F   €€  ÿÿÿÿÿÿ          ð ¨2     è    Œ$0H`lx
@@ -87,13 +87,13 @@
 À 	                              o¦       Ô€              6§ b   b   ˆƒ<                       
       ªª    E  0   @  
 
-À 	                              v¨       Ô€              |© b   b   ˆƒ<                
+À 	                              v¨       Ô€              s© b   b   ˆƒ<                
              ªª    E  0   @  
 
- 	À                              Œ©       Ô€              ã© b   b   ˆƒ<                
+ 	À                              ƒ©       Ô€              Ú© b   b   ˆƒ<                
              ªª    E  0   @  
 
- 	À                              ¼ª       Ô€              ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
+ 	À                              ³ª       Ô€              ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
 3è`èrmesh       HO F   F   €€  ÿÿÿÿÿÿ           ÈÓ&     è    Œ$0H`lx
 EèR&èrmesh       +b F   F   €€  ÿÿÿÿÿÿ          à 3æ&     è    Œ$0H`lx
  Ô&èÔèrmesh       L <   <   Ð€<                 „       	           
@@ -111,33 +111,36 @@
    ˆ  É                  … E   E   Ð€  ÿÿÿÿÿÿ           ‚%         
    ˆ  `                  â…       Ô€              p† ?   ?   Ð€<                0ƒ      
    ˆ  Ê                  €†       Ô€              Î† ?   ?   Ð€<                Pƒ      
-   ˆ  u                 w‡       Ô€              í‰ ?   ?   Ðˆ<      	           ƒ      
-   ˆ                   óŠ ?   ?   Ðˆ<      	           ƒ      
-   ˆ                   ç�       Ô€       	       ®� b   b   ˆƒ<                0      
+   ˆ  u                 w‡       Ô€              ä‰ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   êŠ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   Õ�       Ô€       	       œ� b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              ¾�       Ô€              ‘ b   b   ˆƒ<                0      
+À 	                              ¬�       Ô€              ‘ b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              î‘       Ô€              µ’ b   b   ˆƒ<                0      
+À 	                              Ü‘       Ô€              £’ b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              ]—       Ô€       	       Ù› b   b   ˆ‹<                @      
+À 	                              ½“       Ô€       	       �— b   b   ˆ‹<                
+0            ªª    E  0   @  
+
+ 	À                              ­—       Ô€              Î˜ b   b   ˆ‹<                @      
       ªª    E  0   @  
 
-À 	                              é›       Ô€              @œ b   b   ˆƒ<                @      
+À 	                              Þ˜       Ô€              5™ b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              �       Ô€              ½Ÿ b   b   ˆ‹<                
-0            ªª    E  0   @  
-
- 	À                              ÍŸ       Ô€              -¡ b   b   ˆƒ<                @      
+À 	                              š       Ô€              Õš b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              m¢       Ô€              o¥ b   b   ˆ‹<                
+À 	                              œ       Ô€              Q� b   b   ˆƒ<                
 @            ªª    E  0   @  
 
- 	À                              ¥       Ô€              Å& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
+ 	À                              a�       Ô€              ¸� b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              ‘ž       Ô€              Å& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
 6èä<èrmesh       9        Ô€       	       Ž9  /   /   Ð€<                À„       
             ž9        Ô€              ì9  /   /   Ð€<                `„       
             �:        Ô€              û:  /   /   Ð€<                @„       
@@ -155,54 +158,58 @@
 À 	                              Ã	       Ô€              ÔÃ	 b   b   ˆƒ<                P      
       ªª    E  0   @  
 
-À 	                              RÇ	 b   b   ˆ‹<                `      
+À 	                              IÇ	 b   b   ˆ‹<                `      
       ªª    E  0   @  
 
-À 	                              bÇ	       Ô€              ¹Ç	 b   b   ˆƒ<                `      
+À 	                              YÇ	       Ô€              °Ç	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              ’È	       Ô€              YÉ	 b   b   ˆƒ<                `      
+À 	                              ‰È	       Ô€              PÉ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
 À 	                              å E   E   Ð€  ÿÿÿÿÿÿ          €‚%            ˆ  ž        
            [å E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
            “æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
-           ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  1       
-          üç       Ô€              Jè ?   ?   Ð€<                 ƒ         ½  É       
-          óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  `       
-          �ê       Ô€       	       ì ?   ?   Ðˆ<                 ƒ         ˆ  /       
-          ì       Ô€              jì ?   ?   Ð€<                °ƒ         ˆ  Ç       
-          gí ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
-          @î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
-          éî       Ô€              wï ?   ?   Ð€<                 ƒ         ˆ  ^       
-          „ð b   b   ˆ‹<                
+           ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  ,       
+          üç       Ô€              Jè ?   ?   Ð€<                 ƒ         ½  Ä       
+          óè       Ô€              �é ?   ?   Ð€<                �ƒ         ½  [       
+          Áê       Ô€              èî ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          øî       Ô€              Fï ?   ?   Ð€<                °ƒ         ˆ  Ä       
+          ïï       Ô€              }ð ?   ?   Ð€<                 ƒ         ˆ  [       
+          ûò b   b   ˆ‹<                
 P            ªª    E  0   @  
 
- 	À                              ”ð       Ô€              ëð b   b   ˆƒ<                
-0            ªª    E  0   @  
+ 	À                              ó       Ô€              bó b   b   ˆƒ<                
+@            ªª    E  0   @  
 
- 	À                              Äñ       Ô€              2õ b   b   ˆ‹<                
+ 	À                              õ b   b   ˆƒ<                
 `            ªª    E  0   @  
 
- 	À                              Bõ       Ô€              ™õ b   b   ˆƒ<                
-@            ªª    E  0   @  
+ 	À                              -õ       Ô€              ö b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              öö       Ô€              ½÷ b   b   ˆƒ<      	          
+@            ªª    E  0   @  
+
+ 	À                              ?ø b   b   ˆƒ<                
+P            ªª    E  0   @  
+
+ 	À                              ~ù b   b   ˆ‹<                
+P            ªª    E  0   @  
 
- 	À                              rö       Ô€              9÷ b   b   ˆƒ<      	          
-@            ªª    E  0   @  
+ 	À                              Wú       Ô€              û b   b   ˆƒ<      	          
+P            ªª    E  0   @  
 
  	À                              Å& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
 XEèÿKèrmesh       (®  F   F   €€  ÿÿÿÿÿÿ          ÀhùL     è    Œ$0H`lx
 kEè/Lèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          °ÓM     è    Œ$0H`lx
  ùLèùEèrmesh       HO F   F   €€  ÿÿÿÿÿÿ          ÐˆšT     è    Œ$0H`lx
 Mè/Lèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          Àó¬T     è    Œ$0H`lx
- ›TèšMèrmesh       …$ <   <   Ð€<                à„                  
-            *%       Ô€              ¤% /   /   Ð€<                Ð„       
-            & -   -   Ð€<                ðrmeshu  4        :' /   /   Ðˆ<                Ð„       
-            ×' -   -   Ðˆ<                ðrmeshu  4        ¡( -   -   Ðˆ<                ðrmeshu  4        †) -   -   Ðˆ<                ðrmeshu  4        k* -   -   Ðˆ<                ðrmeshu  4        b+ -   -   Ðˆ<                ðrmeshu  4        5, -   -   Ðˆ<                ðrmeshu  4        (®  A   A   €€  ÿÿÿÿÿÿ           ¨;\     è    Œ$0H`lx­Tèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          àN\     è    Œ$0H`lx
- <\èšMèrmesh       ÓM /   /   Ð€<                ð„                   ãM       Ô€              †N -   -   Ð€<                 rmeshu  4        uO       Ô€              �P >   >   Ð€<                  Œ$0H`lrmeshq  9u        |Q       Ô€              
-R >   >   Ðˆ<                  Œ$0H`lrmeshq  9u        ÏR -   -   Ð€<                 rmeshu  7        HO A   A   €€  ÿÿÿÿÿÿ          ÈÜc     è    Œ$0H`lxN\èrmesh       #b A   A   €€  ÿÿÿÿÿÿ          03ïc     è    Œ$0H`lx Ýcèrmesh       îb       Ô€              xc <   <   Ð€<                @   Œ$0H`lq  9u         6e >   >   Ðˆ<                P  Œ$0H`lrmeshq  9u        9f       Ô€              (®  A   A   €€  ÿÿÿÿÿÿ           è}k     è    Œ$0H`lxïcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          `S�k     è    Œ$0H`lx
- ~kè^dèrmesh       HO A   A   €€  ÿÿÿÿÿÿ          0s     è    Œ$0H`lx�kèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx
- sè^dèrmesh       ïÎ -   -   Ð€<                €rmeshu  4        ÞÐ       Ô€              öÑ >   >   Ð€<                �  Œ$0H`lrmeshq  9u        ÷Ò       Ô€              mÓ -   -   Ð€<                 rmeshu  7        (®  A   A   €€  ÿÿÿÿÿÿ          @(Àz     è    Œ$0H`lx1sèrmesh       ÎÁ        Ô€              XÂ  <   <   Ð€<                À   Œ$0H`lq  9u         5Ã  >   >   Ð€<                Ð  Œ$0H`lrmeshq  9u        MÄ  >   >   Ðˆ<                Ð  Œ$0H`lrmeshq  9u        PÅ        Ô€              HO A   A   €€  ÿÿÿÿÿÿ          PHa‚     è    Œ$0H`lx1sèrmesh       ë_ -   -   Ð€<                `rmeshu  4        |`       Ô€              ò` -   -   Ð€<                àrmeshu  7        a       Ô€              +b F   F   €€  ÿÿÿÿÿÿ          ð³s‚     è    Œ$0H`lx
- a‚èi{èrmesh       Mb >   >   Ð€<                p  Œ$0H`lrmeshq   9u        öb       Ô€              lc -   -   Ð€<                 rmeshu  4        |c       Ô€              åc -   -   Ð€<                €rmeshu  7        vd       Ô€           	   Á  A   A   €€  ÿÿÿÿÿÿ          ÓŠ     è    Œ$0H`lx
-ƒèrmesh    	   %Á  >   >   Ð€<                �  Œ$0H`lrmeshq   9u     	   ÎÁ        Ô€           	   XÂ  <   <   Ð€<                    Œ$0H`lq  9u      	   hÂ        Ô€           	   >Ã  >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   NÃ        Ô€           	   œÃ  <   <   Ð€<                    Œ$0H`lq  9u      	   AÄ        Ô€           	   (Æ  A   A   €€  ÿÿÿÿÿÿ          °hŠ     è    Œ$0H`lxŠèrmesh    	   +b F   F   €€  ÿÿÿÿÿÿ          @óµ‘     è    Œ$0H`lx
-«ŠèŠèrmesh    	   H� A   A   €€  ÿÿÿÿÿÿ          Àˆã‘     è    Œ$0H`lx¶‘èrmesh    
\ No newline at end of file
+ ›TèùEèrmesh       óî /   /   Ð€<                Ð„                   ï       Ô€              Qï /   /   Ð€<                à„                   \ð -   -   Ð€<                àrmeshu  4        ºð /   /   Ðˆ<                à„                   šñ /   /   Ðˆ<                à„                   •ò /   /   Ðˆ<                à„                   ™ó /   /   Ðˆ<                à„                   gô /   /   Ðˆ<                à„                   Põ /   /   Ðˆ<                à„                   …$ <   <   Ð€<                ð„                  
+            %       Ô€              K% -   -   Ð€<                 rmeshu  4        & -   -   Ðˆ<                 rmeshu  4        ' -   -   Ðˆ<                 rmeshu  4        ( -   -   Ðˆ<                 rmeshu  4        ) -   -   Ðˆ<                 rmeshu  4        è) -   -   Ðˆ<                 rmeshu  4        Ö* -   -   Ðˆ<                 rmeshu  4        (®  A   A   €€  ÿÿÿÿÿÿ          ¨;\     è    Œ$0H`lx­Tèrmesh       Á  A   A   €€  ÿÿÿÿÿÿ          ðN\     è    Œ$0H`lx <\èrmesh       A0 >   >   Ð€<                   Œ$0H`lrmeshq  9u        D1       Ô€              2       Ô€              [3 <   <   Ðˆ<                   Œ$0H`lq  9u         +6 F   F   €€  ÿÿÿÿÿÿ           3Ãc     è    Œ$0H`lx
+ <\è½\èrmesh       HO A   A   €€  ÿÿÿÿÿÿ           ÈÜc     è    Œ$0H`lxÃcèrmesh       (®  A   A   €€  ÿÿÿÿÿÿ          0è}k     è    Œ$0H`lxÃcèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ          0S�k     è    Œ$0H`lx
+ ~kè½\èrmesh       Ç- -   -   Ð€<                @rmeshu  4        ­/       Ô€              Å0 >   >   Ð€<                P  Œ$0H`lrmeshq  9u        Æ1       Ô€              <2 -   -   Ð€<                `rmeshu  7        HO A   A   €€  ÿÿÿÿÿÿ          @s     è    Œ$0H`lx�kèrmesh       #b A   A   €€  ÿÿÿÿÿÿ          ps1s     è    Œ$0H`lx sèrmesh       îb       Ô€              xc <   <   Ð€<                €   Œ$0H`lq  9u         Ud >   >   Ð€<                �  Œ$0H`lrmeshq  9u        Xe       Ô€              (®  A   A   €€  ÿÿÿÿÿÿ          P(Àz     è    Œ$0H`lx1sèrmesh       Á  F   F   €€  ÿÿÿÿÿÿ           “Òz     è    Œ$0H`lx
+ ÀzèÈsèrmesh       HO A   A   €€  ÿÿÿÿÿÿ          `Ha‚     è    Œ$0H`lxÓzèrmesh       +b F   F   €€  ÿÿÿÿÿÿ          °³s‚     è    Œ$0H`lx
+ a‚èi{èrmesh    	   (®  A   A   €€  ÿÿÿÿÿÿ          phŠ     è    Œ$0H`lxt‚èrmesh    	   \¿        Ô€           	   Á  F   F   €€  ÿÿÿÿÿÿ          ÐÓŠ     è    Œ$0H`lx
+ Šè
+ƒèrmesh    	   ÖÁ        Ô€           	   LÂ  -   -   Ð€<                àrmeshu  4     	   ;Ã        Ô€           	   I8 >   >   Ð€<                ð  Œ$0H`lrmeshq  9u     	   a9 >   >   Ðˆ<                ð  Œ$0H`lrmeshq  9u     	   P:       Ô€           	   Ï: -   -   Ð€<                 rmeshu  7     	   HO A   A   €€  ÿÿÿÿÿÿ          €ˆ£‘     è    Œ$0H`lxŠèrmesh    	   #b A   A   €€  ÿÿÿÿÿÿ          óµ‘     è    Œ$0H`lx £‘èrmesh    	   îb       Ô€           	   xc <   <   Ð€<                    Œ$0H`lq  9u      	   Cd >   >   Ð€<                0  Œ$0H`lrmeshq  9u     	   .e >   >   Ðˆ<                0  Œ$0H`lrmeshq  9u     	   1f       Ô€           
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-3-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ÔÃ²¡          ÿÿ  i       $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         A  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         D  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         É—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         –Ñ        Ô€       	        äÑ  -   -   Ð€<      	          0 rmeshu  7         íÒ        Ô€               ~Ó  -   -   Ð€<                @ rmeshu   4         ŽÓ        Ô€               îÓ  -   -   Ðˆ<      	          0 rmeshu  7         Ô        Ô€               ³Ô  -   -   Ð€<                @ rmeshu  7         DÕ        Ô€               …à        Ô€       
+ÔÃ²¡          ÿÿ  i       $  <   <   €€  ÿÿÿÿÿÿ            $      è    Œ$0H`lx rmesh        Ü?  A   A   €€  ÿÿÿÿÿÿ     	     	 k?      è    Œ$0H`lx $ èrmesh        þ?  >   >   Ð€<      	             Œ$0H`lrmeshq   9u         A  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æA  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þB  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         D  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         æD  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         þE  >   >   Ðˆ<      	             Œ$0H`lrmeshq   9u         ˜–  A   A   €€  ÿÿÿÿÿÿ           (–      è    Œ$0H`lx $ èrmesh        º–  >   >   Ð€<                    Œ$0H`lrmeshq   9u         É—  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «˜  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨™  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ®š  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         «›  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         ¨œ  >   >   Ðˆ<                    Œ$0H`lrmeshq   9u         }Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         �Ñ        Ô€       	        ÛÑ  -   -   Ð€<      	          0 rmeshu  7         íÒ        Ô€               uÓ  -   -   Ð€<                @ rmeshu   4         …Ó        Ô€               åÓ  -   -   Ðˆ<      	          0 rmeshu  7         vÔ        Ô€               ªÔ  -   -   Ð€<                @ rmeshu  7         ;Õ        Ô€               …à        Ô€       
         á  <   <   Ð€<      
      	     	P    Œ$0H`lq  9u          A7       Ô€               Ë7 <   <   Ð€<                P    Œ$0H`lq  9u          -• <   <   €€  ÿÿÿÿÿÿ          P -•     è    Œ$0H`lx rmesh        å› >   >   Ðˆ<                `   Œ$0H`lrmeshq  9u         õ›       Ô€               Cœ <   <   Ð€<                `    Œ$0H`lq   9u          èœ       Ô€               %� >   >   Ð€<                p   Œ$0H`lrmeshq   9u         Î�       Ô€               Xž <   <   Ð€<                p    Œ$0H`lq  9u          hž       Ô€               © F   F   €€  ÿÿÿÿÿÿ     	     	p ‹¨     è    Œ$0H`lx
 È è•èrmesh        &© >   >   Ð€<      	          €   Œ$0H`lrmeshq  9u         Ï©       Ô€               Yª <   <   Ð€<           	     	€    Œ$0H`lq  9u          iª       Ô€       	        6 >   >   Ð€<           	     	�   Œ$0H`lrmeshq  9u         6       Ô€       	        `6 <   <   Ð€<      	          �    Œ$0H`lq  9u          7       Ô€               $ F   F   €€  ÿÿÿÿÿÿ     	     	  «     è    Œ$0H`lx
@@ -42,34 +42,34 @@
      
 
        ù        Ô€       
-       ä  b   b   ˆƒ<           	            
+       Û  b   b   ˆƒ<           	            
       ªª    E  0    @  
 
-À 	                              ô        Ô€       	       K  b   b   ˆƒ<                       
+À 	                              ë        Ô€       	       B  b   b   ˆƒ<                       
       ªª    E  0    @  
 
-À 	                              $        Ô€              ,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
-’è`èrmesh       N2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
+À 	                                      Ô€              ,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
+’è`èrmesh       E2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿà           ªª           
 ÿÿÿÿÿÿ
-       y2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+       p2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ¥3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
+       œ3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       ¶5  N   N   ˆƒ<           	           
+       ¤5  N   N   ˆƒ<           	           
       ªª           
 
      
-       Æ5        Ô€       	       6  N   N   ˆƒ<                      
+       ´5        Ô€       	       6  N   N   ˆƒ<                      
       ªª           
 
      
-       Ú6        Ô€              Â:        Ô€              ‰;  b   b   ˆƒ<                
+       È6        Ô€              §:        Ô€              n;  b   b   ˆƒ<                
             ªª    E  0    @  
 
- 	À                              ™;        Ô€              ð;  b   b   ˆƒ<      	          
+ 	À                              ~;        Ô€              Õ;  b   b   ˆƒ<      	          
             ªª    E  0    @  
 
- 	À                              É<        Ô€              �=  b   b   ˆƒ<      
+ 	À                              ®<        Ô€              u=  b   b   ˆƒ<      
      	     
             ªª    E  0    @  
 
@@ -87,13 +87,13 @@
 À 	                              3¦ b   b   ˆ‹<                       
       ªª    E  0   @  
 
-À 	                              ¹©       Ô€              €ª b   b   ˆƒ<                
+À 	                              °©       Ô€              wª b   b   ˆƒ<                
              ªª    E  0   @  
 
- 	À                              �ª       Ô€              çª b   b   ˆƒ<      	          
+ 	À                              ‡ª       Ô€              Þª b   b   ˆƒ<      	          
              ªª    E  0   @  
 
- 	À                              À«       Ô€              ‡¬ b   b   ˆƒ<      
+ 	À                              ·«       Ô€              ~¬ b   b   ˆƒ<      
      	     
              ªª    E  0   @  
 
@@ -117,53 +117,56 @@
    ˆ  É                  Í…       Ô€       
        ;‡ ?   ?   Ð€<                Pƒ      
    ˆ  u                 K‡       Ô€              ™‡ ?   ?   Ð€<      	           ƒ      
-   ˆ                   �‰ ?   ?   Ðˆ<      	           ƒ      
-   ˆ                   ‡Š ?   ?   Ðˆ<      	           ƒ      
-   ˆ                   0‹       Ô€              ¾‹ ?   ?   Ð€<      
+   ˆ                   x‰ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   ~Š ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   '‹       Ô€              µ‹ ?   ?   Ð€<      
      	     	Àƒ      
-   ˆ  ¤                 ß�       Ô€       
-       «� b   b   ˆ‹<           	     0      
+   ˆ  ¤                 Í�       Ô€       
+       ™� b   b   ˆ‹<           	     0      
       ªª    E  0   @  
 
-À 	                              »�       Ô€       	       � b   b   ˆƒ<                0      
+À 	                              ©�       Ô€       	        � b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              ë�       Ô€              œ“ b   b   ˆ‹<           	     @      
+À 	                              Ù�       Ô€              �“ b   b   ˆ‹<           	     @      
       ªª    E  0   @  
 
-À 	                              ¬“       Ô€       	       ” b   b   ˆƒ<                @      
+À 	                              ‘“       Ô€       	       è“ b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              0• b   b   ˆ‹<                @      
+À 	                              • b   b   ˆ‹<                @      
       ªª    E  0   @  
 
-À 	                              !— b   b   ˆ‹<           	     @      
-      ªª    E  0   @  
-
-À 	                              1—       Ô€       	       ™ b   b   ˆ‹<                @      
-      ªª    E  0   @  
-
-À 	                              =› b   b   ˆ‹<                @      
+À 	                              Ú—       Ô€              2˜ b   b   ˆ‹<                @      
       ªª    E  0   @  
 
-À 	                              œ       Ô€              Ýœ b   b   ˆƒ<                @      
+À 	                              ™       Ô€              Ò™ b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              úŸ       Ô€              ¬¥       Ô€              å       Ô€       
+À 	                              Ž�       Ô€              Už b   b   ˆƒ<                
+0            ªª    E  0   @  
+
+ 	À                              ež       Ô€              ¼ž b   b   ˆƒ<      	          
+0            ªª    E  0   @  
+
+ 	À                              •Ÿ       Ô€              \  b   b   ˆƒ<      
+     	     
+0            ªª    E  0   @  
+
+ 	À                              å       Ô€       
        [ -   -   Ð€<      
      	     	Ðrmeshu  7        ) F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
-/6èh5èrmesh              Ô€       
-       … -   -   Ð€<      
-     	     	ðrmeshu  4        †        Ô€       
+/6èh5èrmesh              Ô€       
+       !       Ô€       
        M& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
 6èä<èrmesh       Ø8  /   /   Ð€<           	     	 „       
             è8        Ô€       	       69  /   /   Ð€<                À„       
             Ë9        Ô€              E:  /   /   Ð€<                `„       
              ®  F   F   €€  ÿÿÿÿÿÿ          p(·=     è    Œ$0H`lx
-(6èí<èrmesh       Xí  >   >   Ðˆ<      
-     	     	  Œ$0H`lrmeshq  9u        [î        Ô€       
-       Aï        Ô€       
-       Ëï  <   <   Ð€<      
+(6èí<èrmesh       €ì  >   >   Ð€<      
+     	     	  Œ$0H`lrmeshq  9u        ƒí        Ô€       
+       iî        Ô€       
+       óî  <   <   Ð€<      
      	     	    Œ$0H`lq  9u         U F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
 í<èô=èrmesh       -… F   F   €€  ÿÿÿÿÿÿ          Ð-ŽD     è    Œ$0H`lx
 ·=è^Dèrmesh       ÀO F   F   €€  ÿÿÿÿÿÿ          €HXE     è    Œ$0H`lx
@@ -177,50 +180,47 @@
       ªª    E  0   @  
 
 À 	                              
-Â	       Ô€              IÄ	       Ô€       
-       Å	 b   b   ˆƒ<           	     `      
+Â	       Ô€              @Ä	       Ô€       
+       Å	 b   b   ˆƒ<           	     `      
       ªª    E  0   @  
 
-À 	                               Å	       Ô€       	       wÅ	 b   b   ˆƒ<                `      
+À 	                              Å	       Ô€       	       nÅ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              ¶Æ	 b   b   ˆ‹<                `      
+À 	                              ­Æ	 b   b   ˆ‹<                `      
       ªª    E  0   @  
 
-À 	                              �Ç	       Ô€              VÈ	 b   b   ˆƒ<                `      
+À 	                              †Ç	       Ô€              MÈ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
 À 	                              Ðå E   E   Ð€  ÿÿÿÿÿÿ          �‚%            ˆ  8       
            æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
-           "ç ?   ?   Ð€<           	     	`ƒ           ½  ›        
-          2ç       Ô€       	       €ç ?   ?   Ð€<                ðƒ         ½  1       
+           "ç ?   ?   Ð€<           	     	`ƒ           ½  –        
+          2ç       Ô€       	       €ç ?   ?   Ð€<                ðƒ         ½  ,       
           )è       Ô€              ·é       Ô€       
-       Eê ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
-          Uê       Ô€       	       £ê ?   ?   Ð€<                 ƒ         ˆ  /       
-           ë ?   ?   Ðˆ<                 ƒ         ˆ  /       
-          Iì       Ô€              Ôí ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
-          ­î ?   ?   Ðˆ<                °ƒ         ˆ  Ç       
-          Áð       Ô€              ˆñ b   b   ˆƒ<                
-0            ªª    E  0   @  
-
- 	À                              ˜ñ       Ô€              ïñ b   b   ˆƒ<      	          
-0            ªª    E  0   @  
-
- 	À                              Èò       Ô€              �ó b   b   ˆƒ<      
-     	     
-0            ªª    E  0   @  
+       'ë ?   ?   Ðˆ<           	     	€ƒ         ˆ  –        
+          7ë       Ô€       	       …ë ?   ?   Ð€<                 ƒ         ˆ  ,       
+          ‚ì ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          í ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          |î ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          %ï       Ô€              ³ï ?   ?   Ð€<                °ƒ         ˆ  Ä       
+          8ó       Ô€              Zõ       Ô€              ºö b   b   ˆ‹<                
+@            ªª    E  0   @  
+
+ 	À                              Êö       Ô€              !÷ b   b   ˆƒ<      	          
+@            ªª    E  0   @  
 
- 	À                              oõ       Ô€              6ö b   b   ˆƒ<                
-@            ªª    E  0   @  
+ 	À                              ú÷       Ô€              ú b   b   ˆ‹<                
+P            ªª    E  0   @  
 
- 	À                              Fö       Ô€              �ö b   b   ˆƒ<      	          
-@            ªª    E  0   @  
+ 	À                              +ú       Ô€              ‚ú b   b   ˆƒ<      	          
+P            ªª    E  0   @  
 
- 	À                              v÷       Ô€              =ø b   b   ˆƒ<      
+ 	À                              [û       Ô€              "ü b   b   ˆƒ<      
      	     
-@            ªª    E  0   @  
+P            ªª    E  0   @  
 
  	À                              $ö F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
 ŽDè–Eèrmesh       M& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
 XEèÿKèrmesh       -… F   F   €€  ÿÿÿÿÿÿ           mÐS     è    Œ$0H`lx
-XEèÿKèrmesh       €M -   -   Ð€<                0rmeshu  4        eN -   -   Ðˆ<                0rmeshu  4        SO -   -   Ðˆ<                0rmeshu  4        P -   -   Ðˆ<                0rmeshu  4        ðP -   -   Ðˆ<                0rmeshu  4        ðQ -   -   Ðˆ<                0rmeshu  4        ºR -   -   Ðˆ<                0rmeshu  4        $e <   <   Ð€<      	          @„                              ùe <   <   Ðˆ<      	          @„                              g <   <   Ðˆ<      	          @„                              h <   <   Ðˆ<      	          @„                              i <   <   Ðˆ<      	          @„                              Ýi <   <   Ðˆ<      	          @„                              Íj <   <   Ðˆ<      	          @„                              äó -   -   Ð€<      	          Prmeshu  4        äô -   -   Ðˆ<      	          Prmeshu  4        ®õ -   -   Ðˆ<      	          Prmeshu  4        Šö -   -   Ðˆ<      	          Prmeshu  4        x÷ -   -   Ðˆ<      	          Prmeshu  4        Bø -   -   Ðˆ<      	          Prmeshu  4        ù -   -   Ðˆ<      	          Prmeshu  4        M& A   A   €€  ÿÿÿÿÿÿ          `�q[     è    Œ$0H`lxÿKèrmesh       -© <   <   €€  ÿÿÿÿÿÿ          p­6c     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ          €ÍËj     è    Œ$0H`lx rmesh       -i <   <   €€  ÿÿÿÿÿÿ          �í8r     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ           z     è    Œ$0H`lx rmesh       -… <   <   €€  ÿÿÿÿÿÿ          °-—�     è    Œ$0H`lx rmesh       M" <   <   €€  ÿÿÿÿÿÿ          ÀM4‰     è    Œ$0H`lx rmesh    	   -… <   <   €€  ÿÿÿÿÿÿ          ÐmÙ�     è    Œ$0H`lx rmesh    	   M* <   <   €€  ÿÿÿÿÿÿ          à�~˜     è    Œ$0H`lx rmesh    
\ No newline at end of file
+XEèÿKèrmesh       €M -   -   Ð€<                0rmeshu  4        AN -   -   Ðˆ<                0rmeshu  4        O -   -   Ðˆ<                0rmeshu  4        P -   -   Ðˆ<                0rmeshu  4        çP -   -   Ðˆ<                0rmeshu  4        ÞQ -   -   Ðˆ<                0rmeshu  4        ŸR -   -   Ðˆ<                0rmeshu  4        $e <   <   Ð€<      	          @„                              /f <   <   Ðˆ<      	          @„                              (g <   <   Ðˆ<      	          @„                              ýg <   <   Ðˆ<      	          @„                              íh <   <   Ðˆ<      	          @„                              Ôi <   <   Ðˆ<      	          @„                              èj <   <   Ðˆ<      	          @„                              äó -   -   Ð€<      	          Prmeshu  4        Àô -   -   Ðˆ<      	          Prmeshu  4        ®õ -   -   Ðˆ<      	          Prmeshu  4        xö -   -   Ðˆ<      	          Prmeshu  4        T÷ -   -   Ðˆ<      	          Prmeshu  4        0ø -   -   Ðˆ<      	          Prmeshu  4        'ù -   -   Ðˆ<      	          Prmeshu  4        M& A   A   €€  ÿÿÿÿÿÿ          `�q[     è    Œ$0H`lxÿKèrmesh       -© <   <   €€  ÿÿÿÿÿÿ          p­6c     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ          €ÍËj     è    Œ$0H`lx rmesh       -i <   <   €€  ÿÿÿÿÿÿ          �í8r     è    Œ$0H`lx rmesh       M> <   <   €€  ÿÿÿÿÿÿ           z     è    Œ$0H`lx rmesh       -… <   <   €€  ÿÿÿÿÿÿ          °-—�     è    Œ$0H`lx rmesh       M" <   <   €€  ÿÿÿÿÿÿ          ÀM4‰     è    Œ$0H`lx rmesh    	   -… <   <   €€  ÿÿÿÿÿÿ          ÐmÙ�     è    Œ$0H`lx rmesh    	   M* <   <   €€  ÿÿÿÿÿÿ          à�~˜     è    Œ$0H`lx rmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-4-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -4,7 +4,7 @@
      	     	0   Œ$0H`lrmeshq   9u         ýË        Ô€       	        ‡Ì  <   <   Ð€<      	     
      
       Œ$0H`lq   9u          —Ì        Ô€       
-        ÷Ì  -   -   Ð€<           	     	@ rmeshu   4         ÓÍ  -   -   Ðˆ<           	     	@ rmeshu   4         ÁÎ  -   -   Ðˆ<           	     	@ rmeshu   4         ‹Ï  -   -   Ðˆ<           	     	@ rmeshu   4         pÐ  -   -   Ðˆ<           	     	@ rmeshu   4         1Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         ÂÑ        Ô€       	        8Ò  -   -   Ð€<      	          0 rmeshu  7         HÒ        Ô€               ºÓ        Ô€               BÔ  -   -   Ðˆ<      	          0 rmeshu  7         RÔ        Ô€               Õ  -   -   Ð€<                @ rmeshu  7         Hà  >   >   Ð€<      	     
+        îÌ  -   -   Ð€<           	     	@ rmeshu   4         ÊÍ  -   -   Ðˆ<           	     	@ rmeshu   4         ¸Î  -   -   Ðˆ<           	     	@ rmeshu   4         ‚Ï  -   -   Ðˆ<           	     	@ rmeshu   4         gÐ  -   -   Ðˆ<           	     	@ rmeshu   4         (Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         ¹Ñ        Ô€       	        /Ò  -   -   Ð€<      	          0 rmeshu  7         ?Ò        Ô€               ±Ó        Ô€               9Ô  -   -   Ðˆ<      	          0 rmeshu  7         IÔ        Ô€               þÔ  -   -   Ð€<                @ rmeshu  7         Hà  >   >   Ð€<      	     
      
 0   Œ$0H`lrmeshq   9u         Xà        Ô€       
         ¦à  <   <   Ð€<      
@@ -55,35 +55,35 @@
        ªª    E  0    @  
 
 À 	                              Ì        Ô€       
-       G  b   b   ˆƒ<           	            
+       >  b   b   ˆƒ<           	            
       ªª    E  0    @  
 
-À 	                                       Ô€       	       ç  b   b   ˆƒ<                       
+À 	                                      Ô€       	       Þ  b   b   ˆƒ<                       
       ªª    E  0    @  
 
 À 	                              …,  F   F   €€  ÿÿÿÿÿÿ          ð �°     è    Œ$0H`lx
-’è`èrmesh       ù2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
+’è`èrmesh       ð2  N   N   ˆƒ  ÿÿÿÿÿÿ     ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       $3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
+       3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       P4  N   N   ˆƒ<      	     
+       G4  N   N   ˆƒ<      	     
            
        ªª           
 
      
-       `4        Ô€       
-       55  N   N   ˆƒ<           	           
+       W4        Ô€       
+       #5  N   N   ˆƒ<           	           
       ªª           
 
      
-       ò5        Ô€       	       Å;        Ô€              Œ<  b   b   ˆƒ<      	          
+       à5        Ô€       	       ª;        Ô€              q<  b   b   ˆƒ<      	          
             ªª    E  0    @  
 
- 	À                              œ<        Ô€              ó<  b   b   ˆƒ<      
+ 	À                              �<        Ô€              Ø<  b   b   ˆƒ<      
      	     
             ªª    E  0    @  
 
- 	À                              Ì=        Ô€       	       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
+ 	À                              ±=        Ô€       	       ùÇ  A   A   €€  ÿÿÿÿÿÿ     
      
   	L     è    Œ$0H`lx `èrmesh       ‹| F   F   €€  ÿÿÿÿÿÿ     	     	&     è    Œ$0H`lx
 Lè±èrmesh       ¼¡ b   b   ˆƒ<      	     
@@ -97,14 +97,14 @@
 À 	                              ü¢       Ô€       	       Ã£ b   b   ˆƒ<                       
       ªª    E  0   @  
 
-À 	                              ¼ª       Ô€              ƒ« b   b   ˆƒ<      	          
+À 	                              ³ª       Ô€              z« b   b   ˆƒ<      	          
              ªª    E  0   @  
 
- 	À                              “«       Ô€              ê« b   b   ˆƒ<      
+ 	À                              Š«       Ô€              á« b   b   ˆƒ<      
      	     
              ªª    E  0   @  
 
- 	À                              Ã¬       Ô€       	       ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
+ 	À                              º¬       Ô€       	       ¥Í F   F   €€  ÿÿÿÿÿÿ          ­Q&     è    Œ$0H`lx
 3è`èrmesh       i A   A   €€  ÿÿÿÿÿÿ     
      
 ° )í&     è    Œ$0H`lx &èrmesh       L <   <   Ð€<                 „       	           
@@ -138,71 +138,72 @@
        ÷… b   b   ˆƒ<           	     0      
       ªª    E  0   @  
 
-À 	                              w‡       Ô€              tˆ b   b   ˆ‹<           	     0      
+À 	                              kˆ b   b   ˆ‹<           	     0      
       ªª    E  0   @  
 
-À 	                              óŠ ?   ?   Ðˆ<      	           ƒ      
-   ˆ                   ‹       Ô€              Q‹ ?   ?   Ð€<      
+À 	                              êŠ ?   ?   Ðˆ<      	           ƒ      
+   ˆ                   úŠ       Ô€              H‹ ?   ?   Ð€<      
      	     	Àƒ      
-   ˆ  ¤                 ú‹       Ô€       	       ¢� b   b   ˆ‹<      	     
+   ˆ  ¤                 ñ‹       Ô€       	       �� b   b   ˆ‹<      	     
      @      
        ªª    E  0   @  
 
-À 	                              ²�       Ô€       
-       � b   b   ˆ‹<           	     0      
+À 	                               �       Ô€       
+       üŽ b   b   ˆ‹<           	     0      
       ªª    E  0   @  
 
-À 	                              ç�       Ô€       	       ®� b   b   ˆƒ<                0      
+À 	                              Õ�       Ô€       	       œ� b   b   ˆƒ<                0      
       ªª    E  0   @  
 
-À 	                              Š‘ b   b   ˆƒ<           	     @      
+À 	                              o‘ b   b   ˆƒ<           	     @      
       ªª    E  0   @  
 
-À 	                              ÿ’ b   b   ˆ‹<           	     @      
+À 	                              ä’ b   b   ˆ‹<           	     @      
       ªª    E  0   @  
 
-À 	                              Ÿ” b   b   ˆƒ<                @      
+À 	                              ½“       Ô€       	       „” b   b   ˆƒ<                @      
       ªª    E  0   @  
 
-À 	                              Ì• b   b   ˆ‹<                @      
+À 	                              ±• b   b   ˆ‹<                @      
       ªª    E  0   @  
 
-À 	                              „– b   b   ˆ‹<           	     @      
-      ªª    E  0   @  
-
-À 	                              ]—       Ô€       	       ž™ b   b   ˆ‹<                @      
-      ªª    E  0   @  
-
-À 	                              Ù› b   b   ˆ‹<                @      
+À 	                              Î˜ b   b   ˆ‹<                @      
       ªª    E  0   @  
 
-À 	                              ¨ -   -   Ð€<      	     
+À 	                              ‘ž       Ô€              XŸ b   b   ˆƒ<      	          
+0            ªª    E  0   @  
+
+ 	À                              hŸ       Ô€              ¿Ÿ b   b   ˆƒ<      
+     	     
+0            ªª    E  0   @  
+
+ 	À                              ˜        Ô€       	       ¨ -   -   Ð€<      	     
      
 rmeshu  4        ¸       Ô€       
         -   -   Ð€<      
      	     	Ðrmeshu  7        —       Ô€       	       ° F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
-/6èh5èrmesh       Ò >   >   Ð€<      	     
+/6èh5èrmesh       É >   >   Ð€<      	     
      
-   Œ$0H`lrmeshq   9u        â       Ô€       
-       0 -   -   Ð€<      
-     	     	ðrmeshu  4        Á       Ô€       	       I  -   -   Ð€<      	     
+   Œ$0H`lrmeshq   9u        Ù       Ô€       
+       ' -   -   Ð€<      
+     	     	ðrmeshu  4        Ô -   -   Ðˆ<      
+     	     	ðrmeshu  4        e        Ô€       	       Û  -   -   Ð€<      	     
      
-0rmeshu  7        Y        Ô€       
+0rmeshu  7        ë        Ô€       
        Å& F   F   €€  ÿÿÿÿÿÿ          °í<     è    Œ$0H`lx
 6èä<èrmesh       8  /   /   Ð€<           	     	 „       
             9        Ô€       	       Ž9  /   /   Ð€<                À„       
             ñë  <   <   €€  ÿÿÿÿÿÿ     
      
 @‰ô=     è    Œ$0H`lx rmesh       ì  >   >   Ð€<      
-     	     	  Œ$0H`lrmeshq  9u        ëì  >   >   Ðˆ<      
-     	     	  Œ$0H`lrmeshq  9u        ”í        Ô€       	       î  <   <   Ð€<      	     
+     	     	  Œ$0H`lrmeshq  9u        ¼ì        Ô€       	       Fí  <   <   Ð€<      	     
      
-P   Œ$0H`lq   9u         .î        Ô€       
-       ï  >   >   Ð€<      	     
+P   Œ$0H`lq   9u         Ví        Ô€       
+       ,î  >   >   Ð€<      	     
      
-`  Œ$0H`lrmeshq   9u        ï        Ô€       
-       bï  <   <   Ð€<      
-     	     	    Œ$0H`lq  9u         ð        Ô€       	       ‹T F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
+`  Œ$0H`lrmeshq   9u        <î        Ô€       
+       Šî  <   <   Ð€<      
+     	     	    Œ$0H`lq  9u         /ï        Ô€       	       ‹T F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
 í<èô=èrmesh       ¥… F   F   €€  ÿÿÿÿÿÿ          Ð-ŽD     è    Œ$0H`lx
 ·=è^Dèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
@@ -219,47 +220,51 @@
        -À	 b   b   ˆƒ<           	     P      
       ªª    E  0   @  
 
-À 	                              Á	       Ô€       	       vÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
-   ˆ  ›                   Ä	 b   b   ˆ‹<      	     
+À 	                              Á	       Ô€       	       mÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  –                   Ä	 b   b   ˆ‹<      	     
      `      
        ªª    E  0   @  
 
-À 	                              Ä	       Ô€       
-       sÄ	 b   b   ˆƒ<           	     `      
+À 	                              Ä	       Ô€       
+       jÄ	 b   b   ˆƒ<           	     `      
       ªª    E  0   @  
 
-À 	                              LÅ	       Ô€       	       Æ	 b   b   ˆƒ<                `      
+À 	                              CÅ	       Ô€       	       
+Æ	 b   b   ˆƒ<                `      
       ªª    E  0   @  
 
-À 	                              RÇ	 b   b   ˆ‹<                `      
+À 	                              IÇ	 b   b   ˆ‹<                `      
       ªª    E  0   @  
 
 À 	                              “æ E   E   Ð€  ÿÿÿÿÿÿ          à‚%            ˆ  Î       
-           µæ ?   ?   Ð€<           	     	`ƒ           ½  ›        
-          ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  1       
+           µæ ?   ?   Ð€<           	     	`ƒ           ½  –        
+          ^ç       Ô€       	       ìç ?   ?   Ð€<                ðƒ         ½  ,       
           wè E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%            ˆ  s       
            zé ?   ?   Ð€<      	     
      
 �ƒ           ˆ           
           Šé       Ô€       
-       Øé ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
-          �ê       Ô€       	       ë ?   ?   Ð€<                 ƒ         ˆ  /       
-          ì ?   ?   Ðˆ<                 ƒ         ˆ  /       
-          Äñ       Ô€              ‹ò b   b   ˆƒ<      	          
-0            ªª    E  0   @  
+       Øé ?   ?   Ð€<           	     	€ƒ         ˆ  –        
+          ºê ?   ?   Ðˆ<           	     	€ƒ         ˆ  –        
+          cë       Ô€       	       ñë ?   ?   Ð€<                 ƒ         ˆ  ,       
+          îì ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          ëí ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          èî ?   ?   Ðˆ<                 ƒ         ˆ  ,       
+          öö       Ô€              ½÷ b   b   ˆƒ<      	          
+@            ªª    E  0   @  
 
- 	À                              ›ò       Ô€              òò b   b   ˆƒ<      
+ 	À                              Í÷       Ô€              $ø b   b   ˆƒ<      
      	     
-0            ªª    E  0   @  
+@            ªª    E  0   @  
 
- 	À                              Ëó       Ô€       	       rö       Ô€              9÷ b   b   ˆƒ<      	          
-@            ªª    E  0   @  
+ 	À                              ýø       Ô€       	       Wú       Ô€              û b   b   ˆƒ<      	          
+P            ªª    E  0   @  
 
- 	À                              I÷       Ô€               ÷ b   b   ˆƒ<      
+ 	À                              .û       Ô€              …û b   b   ˆƒ<      
      	     
-@            ªª    E  0   @  
+P            ªª    E  0   @  
 
- 	À                              yø       Ô€       	       «õ F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
+ 	À                              ^ü       Ô€       	       «õ F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
 ŽDè–Eèrmesh       Å& F   F   €€  ÿÿÿÿÿÿ          M/L     è    Œ$0H`lx
 XEèÿKèrmesh       œ   b   b   ˆƒ<      	     
      p      
@@ -316,20 +321,20 @@
 À 	                              º b   b   ˆ‹<           	     €      
       ªª    E  0   @  
 
-À 	                              » -   -   Ð€<           	     	°rmeshu  4        Û» -   -   Ðˆ<           	     	°rmeshu  4        É¼ -   -   Ðˆ<           	     	°rmeshu  4        ·½ -   -   Ðˆ<           	     	°rmeshu  4        x¾ -   -   Ðˆ<           	     	°rmeshu  4        x¿ -   -   Ðˆ<           	     	°rmeshu  4        oÀ -   -   Ðˆ<           	     	°rmeshu  4        ?f <   <   Ð€<      
+À 	                              » -   -   Ð€<           	     	°rmeshu  4        ÿ» -   -   Ðˆ<           	     	°rmeshu  4        í¼ -   -   Ðˆ<           	     	°rmeshu  4        ®½ -   -   Ðˆ<           	     	°rmeshu  4        ®¾ -   -   Ðˆ<           	     	°rmeshu  4        ¥¿ -   -   Ðˆ<           	     	°rmeshu  4        fÀ -   -   Ðˆ<           	     	°rmeshu  4        ?f <   <   Ð€<      
      	     	À„                              äf       Ô€       	       � A   A   €€  ÿÿÿÿÿÿ     
      
 °é×T     è    Œ$0H`lx Sèrmesh       «õ A   A   €€  ÿÿÿÿÿÿ     	     	Ðë@[     è    Œ$0H`lxØTèrmesh       t   E   E   Ð€  ÿÿÿÿÿÿ     
      
 À‚%           
    ˆ                      Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	à‚%         
-   ˆ  —                   ùë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   ùë  A   A   €€  ÿÿÿÿÿÿ     
      
 Ð	y\     è    Œ$0H`lxA[èrmesh       t  E   E   Ð€  ÿÿÿÿÿÿ     
      
 à‚%           
 	   ˆ                      Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	ð‚%         
-	   ˆ  —                   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       � A   A   €€  ÿÿÿÿÿÿ     
+	   ˆ  –                   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
 ð)d     è    Œ$0H`lxâbèrmesh       t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
@@ -337,7 +342,7 @@
 
    ˆ                      Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	‚%         
 
-   ˆ  —                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
      
 I»k     è    Œ$0H`lxƒjèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	0K$r     è    Œ$0H`lx»kèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
@@ -345,7 +350,7 @@
      
 0‚%           
    ˆ                      ƒ¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  —                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   «õ A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ùë  A   A   €€  ÿÿÿÿÿÿ     
      
 @‰ýz     è    Œ$0H`lxÅyèrmesh       ‹T A   A   €€  ÿÿÿÿÿÿ     	     	`‹f�     è    Œ$0H`lxýzèrmesh       � A   A   €€  ÿÿÿÿÿÿ     
      
@@ -353,7 +358,7 @@
      
 `‚%   	        
    ˆ                   	   Ã   E   E   Ð€  ÿÿÿÿÿÿ     	     	€‚% 	        
-   ˆ  —                	   ùë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                	   ùë  A   A   €€  ÿÿÿÿÿÿ     
      
 pÉ?Š     è    Œ$0H`lx‰èrmesh    	   t  E   E   Ð€  ÿÿÿÿÿÿ     
      
@@ -361,10 +366,10 @@
         
    ˆ                   	   Ã  E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚% 
         
-   ˆ  —                	   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   � A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                	   ‹T A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   � A   A   €€  ÿÿÿÿÿÿ     
      
 �éà‘     è    Œ$0H`lx©�èrmesh    	   t€ E   E   Ð€  ÿÿÿÿÿÿ     
      
  ‚%           
    ˆ                   	   Ã€ E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-   ˆ  —                	   «õ A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
+   ˆ  –                	   «õ A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-reactive-regression-test-5-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -19,7 +19,7 @@
      	     	0   Œ$0H`lrmeshq   9u         ÑË        Ô€       	        Ì  <   <   Ð€<      	     
      
       Œ$0H`lq   9u          ÄÌ        Ô€       
-        LÍ  -   -   Ð€<           	     	@ rmeshu   4         (Î  -   -   Ðˆ<           	     	@ rmeshu   4         Ï  -   -   Ðˆ<           	     	@ rmeshu   4         àÏ  -   -   Ðˆ<           	     	@ rmeshu   4         ÅÐ  -   -   Ðˆ<           	     	@ rmeshu   4         †Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         uÒ        Ô€               Ô        Ô€               Üß  >   >   Ð€<      	     
+        CÍ  -   -   Ð€<           	     	@ rmeshu   4         Î  -   -   Ðˆ<           	     	@ rmeshu   4         Ï  -   -   Ðˆ<           	     	@ rmeshu   4         ×Ï  -   -   Ðˆ<           	     	@ rmeshu   4         ¼Ð  -   -   Ðˆ<           	     	@ rmeshu   4         }Ñ  -   -   Ðˆ<           	     	@ rmeshu   4         lÒ        Ô€               vÔ        Ô€               Üß  >   >   Ð€<      	     
      
 0   Œ$0H`lrmeshq   9u         …à        Ô€       
         á  <   <   Ð€<      
@@ -59,29 +59,29 @@
        ªª    E  0    @  
 
 À 	                              ù        Ô€       
-       ä  b   b   ˆƒ<           	            
+       Û  b   b   ˆƒ<           	            
       ªª    E  0    @  
 
-À 	                              ¥3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
+À 	                              œ3  N   N   ˆƒ  ÿÿÿÿÿÿ     	ÿÿÿÿÿÿ           ªª           
 ÿÿÿÿÿÿ
-       Ð3  N   N   ˆƒ<      	     
+       Ç3  N   N   ˆƒ<      	     
            
        ªª           
 
      
-       �4        Ô€       
-       ¶5  N   N   ˆƒ<           	           
+       „4        Ô€       
+       ¤5  N   N   ˆƒ<           	           
       ªª           
 
      
-       &6  N   N   ˆƒ  ÿÿÿÿÿÿ     
+       6  N   N   ˆƒ  ÿÿÿÿÿÿ     
 ÿÿÿÿÿÿ�           ªª           
 ÿÿÿÿÿÿ
-       É<        Ô€              �=  b   b   ˆƒ<      
+       ®<        Ô€              u=  b   b   ˆƒ<      
      	     
             ªª    E  0    @  
 
- 	À                               =        Ô€       	       ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
+ 	À                              …=        Ô€       	       ‰Ç  A   A   €€  ÿÿÿÿÿÿ     
      
   	L     è    Œ$0H`lx `èrmesh       } F   F   €€  ÿÿÿÿÿÿ     	     	&     è    Œ$0H`lx
 Lè±èrmesh        ¡ b   b   ˆƒ<      	     
@@ -92,11 +92,11 @@
        À¢ b   b   ˆƒ<           	            
       ªª    E  0   @  
 
-À 	                              À«       Ô€              ‡¬ b   b   ˆƒ<      
+À 	                              ·«       Ô€              ~¬ b   b   ˆƒ<      
      	     
              ªª    E  0   @  
 
- 	À                              —¬       Ô€       	       ©h A   A   €€  ÿÿÿÿÿÿ     
+ 	À                              Ž¬       Ô€       	       ©h A   A   €€  ÿÿÿÿÿÿ     
      
 ° )í&     è    Œ$0H`lx &èrmesh       <       Ô€              Æ <   <   Ð€<      
      	     	 „                              Ö       Ô€       	       ” F   F   €€  ÿÿÿÿÿÿ     	     	0+¢-     è    Œ$0H`lx
@@ -131,60 +131,61 @@
        ”† b   b   ˆƒ<           	     0      
       ªª    E  0   @  
 
-À 	                              p‡ b   b   ˆƒ<      	     
+À 	                              g‡ b   b   ˆƒ<      	     
      @      
        ªª    E  0   @  
 
-À 	                              ‰ b   b   ˆ‹<           	     0      
+À 	                              ‰ b   b   ˆ‹<           	     0      
       ªª    E  0   @  
 
-À 	                              É‰ b   b   ˆ‹<      	     
+À 	                              À‰ b   b   ˆ‹<      	     
      @      
        ªª    E  0   @  
 
-À 	                              0‹       Ô€              ¾‹ ?   ?   Ð€<      
+À 	                              '‹       Ô€              µ‹ ?   ?   Ð€<      
      	     	Àƒ      
-   ˆ  ¤                 Î‹       Ô€       	       � b   b   ˆ‹<      	     
+   ˆ  ¤                 Å‹       Ô€       	       ôŒ b   b   ˆ‹<      	     
      @      
        ªª    E  0   @  
 
-À 	                              ß�       Ô€       
-       «� b   b   ˆ‹<           	     0      
+À 	                              Í�       Ô€       
+       ™� b   b   ˆ‹<           	     0      
       ªª    E  0   @  
 
-À 	                              '’ b   b   ˆƒ<           	     @      
+À 	                              ’ b   b   ˆƒ<           	     @      
       ªª    E  0   @  
 
-À 	                              œ“ b   b   ˆ‹<           	     @      
+À 	                              �“ b   b   ˆ‹<           	     @      
       ªª    E  0   @  
 
-À 	                              !— b   b   ˆ‹<           	     @      
-      ªª    E  0   @  
-
-À 	                              T -   -   Ð€<      	     
+À 	                              •Ÿ       Ô€              \  b   b   ˆƒ<      
+     	     
+0            ªª    E  0   @  
+
+ 	À                              l        Ô€       	       T -   -   Ð€<      	     
      
 rmeshu  4        å       Ô€       
        [ -   -   Ð€<      
      	     	Ðrmeshu  7        k       Ô€       	       ) F   F   €€  ÿÿÿÿÿÿ     	     	àkä<     è    Œ$0H`lx
-/6èh5èrmesh       f >   >   Ð€<      	     
+/6èh5èrmesh       ] >   >   Ð€<      	     
      
-   Œ$0H`lrmeshq   9u               Ô€       
-       … -   -   Ð€<      
-     	     	ðrmeshu  4        •       Ô€       	       õ -   -   Ð€<      	     
+   Œ$0H`lrmeshq   9u               Ô€       
+       )  -   -   Ðˆ<      
+     	     	ðrmeshu  4        9        Ô€       	       ‡  -   -   Ð€<      	     
      
-0rmeshu  7        †        Ô€       
+0rmeshu  7        !       Ô€       
        Ø8  /   /   Ð€<           	     	 „       
             ‰ë  <   <   €€  ÿÿÿÿÿÿ     
      
-@‰ô=     è    Œ$0H`lx rmesh       Xí  >   >   Ðˆ<      
-     	     	  Œ$0H`lrmeshq  9u        hí        Ô€       	       ¶í  <   <   Ð€<      	     
+@‰ô=     è    Œ$0H`lx rmesh       €ì  >   >   Ð€<      
+     	     	  Œ$0H`lrmeshq  9u        �ì        Ô€       	       Þì  <   <   Ð€<      	     
      
-P   Œ$0H`lq   9u         [î        Ô€       
-       ˜î  >   >   Ð€<      	     
+P   Œ$0H`lq   9u         ƒí        Ô€       
+       Àí  >   >   Ð€<      	     
      
-`  Œ$0H`lrmeshq   9u        Aï        Ô€       
-       Ëï  <   <   Ð€<      
-     	     	    Œ$0H`lq  9u         Ûï        Ô€       	       U F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
+`  Œ$0H`lrmeshq   9u        iî        Ô€       
+       óî  <   <   Ð€<      
+     	     	    Œ$0H`lq  9u         ï        Ô€       	       U F   F   €€  ÿÿÿÿÿÿ     	     	0‹]D     è    Œ$0H`lx
 í<èô=èrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
 p©•E     è    Œ$0H`lx^Dèrmesh       À½	 E   E   Ð€  ÿÿÿÿÿÿ     
@@ -200,35 +201,36 @@
        ÊÀ	 b   b   ˆƒ<           	     P      
       ªª    E  0   @  
 
-À 	                              ‹Á	 b   b   ˆƒ<      	     
+À 	                              ‚Á	 b   b   ˆƒ<      	     
      `      
        ªª    E  0   @  
 
-À 	                              ëÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
-   ˆ  ›                   pÃ	 b   b   ˆ‹<      	     
+À 	                              âÂ	 E   E   Ð€  ÿÿÿÿÿÿ     	     	P‚%         
+   ˆ  –                   gÃ	 b   b   ˆ‹<      	     
      `      
        ªª    E  0   @  
 
-À 	                              IÄ	       Ô€       
-       Å	 b   b   ˆƒ<           	     `      
+À 	                              @Ä	       Ô€       
+       Å	 b   b   ˆƒ<           	     `      
       ªª    E  0   @  
 
-À 	                              "ç ?   ?   Ð€<           	     	`ƒ           ½  ›        
+À 	                              "ç ?   ?   Ð€<           	     	`ƒ           ½  –        
           ìè E   E   Ð€  ÿÿÿÿÿÿ     	     	p‚%            ˆ  s       
            é ?   ?   Ð€<      	     
      
 �ƒ           ˆ           
           ·é       Ô€       
-       Eê ?   ?   Ð€<           	     	€ƒ         ˆ  ™        
-          Èò       Ô€              �ó b   b   ˆƒ<      
+       Eê ?   ?   Ð€<           	     	€ƒ         ˆ  –        
+          'ë ?   ?   Ðˆ<           	     	€ƒ         ˆ  –        
+          ú÷       Ô€              Áø b   b   ˆƒ<      
      	     
-0            ªª    E  0   @  
+@            ªª    E  0   @  
 
- 	À                              Ÿó       Ô€       	       v÷       Ô€              =ø b   b   ˆƒ<      
+ 	À                              Ñø       Ô€       	       [û       Ô€              "ü b   b   ˆƒ<      
      	     
-@            ªª    E  0   @  
+P            ªª    E  0   @  
 
- 	À                              Mø       Ô€       	       $ö F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
+ 	À                              2ü       Ô€       	       $ö F   F   €€  ÿÿÿÿÿÿ     	     	�«þK     è    Œ$0H`lx
 ŽDè–Eèrmesh           b   b   ˆƒ<      	     
      p      
        ªª    E  0   @  
@@ -240,10 +242,11 @@
 À 	                              o  b   b   ˆ‹<           	     p      
       ªª    E  0   @  
 
-À 	                              G  b   b   ˆ‹<           	     p      
+À 	                              å  b   b   ˆ‹<           	     p      
       ªª    E  0   @  
 
-À 	                              å  b   b   ˆ‹<           	     p      
+À 	                              2
+  b   b   ˆ‹<           	     p      
       ªª    E  0   @  
 
 À 	                              Ï  b   b   ˆ‹<           	     p      
@@ -260,7 +263,10 @@
        ªª    E  0   @  
 
 À 	                              ù¡       Ô€       
-       ä£ b   b   ˆ‹<           	     €      
+       À¢ b   b   ˆƒ<           	     €      
+      ªª    E  0   @  
+
+À 	                              ä£ b   b   ˆ‹<           	     €      
       ªª    E  0   @  
 
 À 	                              k¥ b   b   ˆ‹<           	     €      
@@ -278,20 +284,20 @@
 À 	                              ¥º b   b   ˆ‹<           	     €      
       ªª    E  0   @  
 
-À 	                              f» -   -   Ð€<           	     	°rmeshu  4        0¼ -   -   Ðˆ<           	     	°rmeshu  4        ½ -   -   Ðˆ<           	     	°rmeshu  4        ¾ -   -   Ðˆ<           	     	°rmeshu  4        Í¾ -   -   Ðˆ<           	     	°rmeshu  4        Í¿ -   -   Ðˆ<           	     	°rmeshu  4        ÄÀ -   -   Ðˆ<           	     	°rmeshu  4        ¨f <   <   Ð€<      
+À 	                              f» -   -   Ð€<           	     	°rmeshu  4        T¼ -   -   Ðˆ<           	     	°rmeshu  4        B½ -   -   Ðˆ<           	     	°rmeshu  4        ¾ -   -   Ðˆ<           	     	°rmeshu  4        ¿ -   -   Ðˆ<           	     	°rmeshu  4        ú¿ -   -   Ðˆ<           	     	°rmeshu  4        »À -   -   Ðˆ<           	     	°rmeshu  4        ¨f <   <   Ð€<      
      	     	À„                              ¸f       Ô€       	       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
 °é×T     è    Œ$0H`lx Sèrmesh       ö A   A   €€  ÿÿÿÿÿÿ     	     	Ðë@[     è    Œ$0H`lxØTèrmesh           E   E   Ð€  ÿÿÿÿÿÿ     
      
 À‚%           
    ˆ                      8  E   E   Ð€  ÿÿÿÿÿÿ     	     	à‚%         
-   ˆ  —                   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
 Ð	y\     è    Œ$0H`lxA[èrmesh          E   E   Ð€  ÿÿÿÿÿÿ     
      
 à‚%           
 	   ˆ                      8! E   E   Ð€  ÿÿÿÿÿÿ     	     	ð‚%         
-	   ˆ  —                   üT A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
+	   ˆ  –                   üT A   A   €€  ÿÿÿÿÿÿ     	     	 âb     è    Œ$0H`lxy\èrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
 ð)d     è    Œ$0H`lxâbèrmesh        € E   E   Ð€  ÿÿÿÿÿÿ     
      
@@ -299,7 +305,7 @@
 
    ˆ                      8� E   E   Ð€  ÿÿÿÿÿÿ     	     	‚%         
 
-   ˆ  —                   ö A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   ö A   A   €€  ÿÿÿÿÿÿ     	     	 +ƒj     è    Œ$0H`lxdèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
 I»k     è    Œ$0H`lxƒjèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	0K$r     è    Œ$0H`lx»kèrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
@@ -307,7 +313,7 @@
      
 0‚%           
    ˆ                      ø¾	 E   E   Ð€  ÿÿÿÿÿÿ     	     	@‚%         
-   ˆ  —                   ö A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                   ö A   A   €€  ÿÿÿÿÿÿ     	     	PkÅy     è    Œ$0H`lx\sèrmesh       ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
 @‰ýz     è    Œ$0H`lxÅyèrmesh       üT A   A   €€  ÿÿÿÿÿÿ     	     	`‹f�     è    Œ$0H`lxýzèrmesh       ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
@@ -315,7 +321,7 @@
      
 `‚%   	        
    ˆ                   	   8  E   E   Ð€  ÿÿÿÿÿÿ     	     	€‚% 	        
-   ˆ  —                	   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                	   ‰ë  A   A   €€  ÿÿÿÿÿÿ     
      
 pÉ?Š     è    Œ$0H`lx‰èrmesh    	      E   E   Ð€  ÿÿÿÿÿÿ     
      
@@ -323,10 +329,10 @@
         
    ˆ                   	   8! E   E   Ð€  ÿÿÿÿÿÿ     	     	�‚% 
         
-   ˆ  —                	   üT A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   ©Œ A   A   €€  ÿÿÿÿÿÿ     
+   ˆ  –                	   üT A   A   €€  ÿÿÿÿÿÿ     	     	 Ë¨�     è    Œ$0H`lx@Šèrmesh    	   ©Œ A   A   €€  ÿÿÿÿÿÿ     
      
 �éà‘     è    Œ$0H`lx©�èrmesh    	    € E   E   Ð€  ÿÿÿÿÿÿ     
      
  ‚%           
    ˆ                   	   8� E   E   Ð€  ÿÿÿÿÿÿ     	     	°‚%         
-   ˆ  —                	   ö A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
+   ˆ  –                	   ö A   A   €€  ÿÿÿÿÿÿ     	     	ÀëI˜     è    Œ$0H`lxá‘èrmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-simplest-regression-te