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               jE         $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3c         $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               `Sk         $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                3c         $0H`lx
+ <\\rmesh       j A   A               ]d         $0H`lxcrmesh         F   F               0Sk         $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               hL         $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3c         $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               `Sk         $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                3c         $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Sk         $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               hL         $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3c         $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               `Sk         $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                3c         $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Sk         $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                mS         $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          
      
 Ik         $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ky         $0H`lx\srmesh         A   A          
+                         A   A          	     	Pky         $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          
      
 Ik         $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ky         $0H`lx\srmesh         A   A          
+                         A   A          	     	Pky         $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-test-0-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-0-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -5,17 +5,18 @@
 
        $  E   E   Ѐ            p %                                    %  ?   ?   Ѐ<                p                                 %        Ԁ              &  N   N   <                                         
      
-       &        Ԁ              (        <                                  E      @  
+       &        Ԁ              '        <                                  E      @  
 
- 	 l                                                                                                             %(        Ԁ              =K  N   N                                 
+ 	 l                                                                                                             
+(        Ԁ              "K  N   N                                 
 
-       hL  N   N   <                                        
+       ML  N   N   <                                        
      
-       xL        Ԁ              M  N   N                                
+       ]L        Ԁ              sM  N   N                                
 
-       N        <                                 E      @  
+       M        <                                 E      @  
 
- 	 l                                                                                                             EO        Ԁ              X        <                                  E     @  
+ 	 l                                                                                                             O        Ԁ              X        <                                  E     @  
 
  	 l                                                                                                             h        Ԁ                      <                                  E     @  
 
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-simplest-regression-test-1-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -5,17 +5,17 @@
 
        %  E   E   Ѐ            p %                                    8%  ?   ?   Ѐ<                p                                 %        Ԁ              &  N   N   <                                         
      
-       &        Ԁ              '        <                                  E      @  
+       &        Ԁ              &        <                                  E      @  
 
- 	 l                                                                                                             Q(        Ԁ              K  N   N                                 
+ 	 l                                                                                                             6(        Ԁ              K  N   N                                 
 
-       K  N   N   <                                        
+       K  N   N   <                                        
      
-       L        Ԁ              M  N   N                                
+       L        Ԁ              L  N   N                                
 
-       	O        <                                 E      @  
+       N        <                                 E      @  
 
- 	 l                                                                                                             O        Ԁ              P        <                                  E     @  
+ 	 l                                                                                                             N        Ԁ              P        <                                  E     @  
 
  	 l                                                                                                                     Ԁ                      <                                  E     @  
 
@@ -731,29 +731,29 @@
 
  	 l                                                                                                          
      A   A               _         $0H`lx Ermesh    
-           <                 
+           <                 
                 E     @  
 
  	 l                                                                                                          
-   :        <                 
+   1        <                 
                 E     @  
 
  	 l                                                                                                          
-   u        <                 
+   l        <                 
                 E     @  
 
  	 l                                                                                                          
-   i        <                 
+   `        <                 
                 E     @  
 
  	 l                                                                                                          
-     -   -   Ѐ<                rmeshu  4     
-     -   -   Ј<                rmeshu  4     
-   |  -   -   Ј<                rmeshu  4     
-   X  -   -   Ј<                rmeshu  4     
-   F  -   -   Ј<                rmeshu  4     
-     -   -   Ј<                rmeshu  4     
-     -   -   Ј<                rmeshu  4     
+     -   -   Ѐ<                rmeshu  4     
+   |  -   -   Ј<                rmeshu  4     
+   s  -   -   Ј<                rmeshu  4     
+   O  -   -   Ј<                rmeshu  4     
+   =  -   -   Ј<                rmeshu  4     
+     -   -   Ј<                rmeshu  4     
+     -   -   Ј<                rmeshu  4     
     E   E   Ѐ            %                                 
     E   E   Ѐ            %                                 
    a <   <               3         $0H`lx rmesh    
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-0-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ò            i       &  >   >   Ѐ<                    $0H`lrmeshq   9u         )        Ԁ                       Ԁ                 <   <   Ѐ<                     $0H`lq  9u            A   A                           $0H`lx  rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               X  <   <   Ѐ<                0    $0H`lq  9u          h        Ԁ               >  >   >   Ѐ<                @   $0H`lrmeshq  9u         N        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          @        Ԁ               JO A   A                 JO         $0H`lx  rmesh        +b F   F               P a         $0H`lx
+ò            i       &  >   >   Ѐ<                    $0H`lrmeshq   9u         )        Ԁ                       Ԁ               ~  <   <   Ѐ<                     $0H`lq  9u            A   A                           $0H`lx  rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u                 Ԁ               X  <   <   Ѐ<                0    $0H`lq  9u          h        Ԁ               >  >   >   Ѐ<                @   $0H`lrmeshq  9u         N        Ԁ                 <   <   Ѐ<                     $0H`lq  9u          @        Ԁ               JO A   A                 JO         $0H`lx  rmesh        +b F   F               P a         $0H`lx
  7Ormesh        j A   A               0 j         $0H`lx brmesh         F   F               `          $0H`lx
  rmesh       JO A   A               @          $0H`lx rmesh       +b F   F               p          $0H`lx
  zrmesh       j A   A               P 2         $0H`lx rmesh         N   N                                
@@ -9,17 +9,17 @@
      
        a        Ԁ                N   N   <                                        
      
-               Ԁ              <        <                                 E      @  
+               Ԁ              3        <                                 E      @  
 
- 	 l                                                                                                             L        Ԁ                N   N                                 
+ 	 l                                                                                                             C        Ԁ                N   N                                 
 
-         N   N                                
+         N   N                                
 
-               Ԁ                 N   N   <                                       
+               Ԁ                 N   N   <                                       
      
-                Ԁ              O!        <                                 E      @  
+                Ԁ              +!        <                                 E      @  
 
- 	 l                                                                                                             "        Ԁ              #        <                                E      @  
+ 	 l                                                                                                             p"        Ԁ              #        <                                E      @  
 
  	 l                                                                                                               F   F                E         $0H`lx
  3rmesh       JO A   A                         $0H`lx Ermesh       0 N   N                                 
@@ -28,81 +28,81 @@
      
        1       Ԁ              2 N   N                                
 
-       t4       <                                  E      @  
+       b4       <                                  E      @  
 
- 	 l                                                                                                             4       Ԁ              \8 N   N                                 
+ 	 l                                                                                                             r4       Ԁ              J8 N   N                                 
 
-       9 N   N   <                0                        
+       v9 N   N   <                0                        
      
-       9       Ԁ              : N   N                                
+       9       Ԁ              : N   N                                
 
-       ;       <                0                 E      @  
+       s;       <                0                 E      @  
 
- 	 l                                                                                                             <       Ԁ              g N   N                                 
+ 	 l                                                                                                             <       Ԁ              g N   N                                 
 
         N   N                                
 
-       O$       Ԁ              % E   E   Ѐ             %              ,                  % ?   ?   Ѐ<                                                 &       Ԁ              .' ?   ?   Ѐ<                                             ( N   N   <                @                       
+       F$       Ԁ              % N   N   <                @                       
      
-       (       Ԁ              Q)       <                @                 E      @  
+       %       Ԁ              @& E   E   Ѐ             %                                    +b F   F               3&         $0H`lx
+ &rmesh       j A   A                t'         $0H`lx &rmesh       E	 E   E   Ѐ             %                                    F	 ?   ?   Ѐ<                              ,                 F	       Ԁ              G	       <                @                 E      @  
 
  
- l                                                                                                             *       Ԁ              F,       <                                 E      @  
+ l                                                                                                             cH	       Ԁ              I	       <                                 E      @  
 
  
- l                                                                                                             r0 N   N                                
+ l                                                                                                             L	 E   E   Ѐ            0%                                 	O	       Ԁ              O	 ?   ?   Ѐ<                @           ,                 O	       Ԁ              EQ	 N   N          P                     
 
-       0 N   N   <                P                        
+       pQ	 N   N   <                P                        
      
-       Y1       Ԁ              2 N   N   <                0                       
+       -R	       Ԁ              R	 N   N   <                0                       
      
-       2 N   N                                
+       ZS	 N   N                                
 
-       ^7       Ԁ              8       <                P                E      @  
+       X	       Ԁ              X	       <                P                E      @  
 
  
- l                                                                                                             8       Ԁ              +b F   F               03&         $0H`lx
- &rmesh       j A   A                t'         $0H`lx &rmesh       D        Ԁ              w        <                `                E     @  
+ l                                                                                                             X	       Ԁ              D        Ԁ              '        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                 E     @  
+ 	 l                                                                                                             7        Ԁ                      <                `                 E     @  
 
- 	 l                                                                                                             #        Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                               F   F               @S.         $0H`lx
- ].u'rmesh       JO A   A                
+ 	 l                                                                                                               F   F               `S.         $0H`lx
+ ].u'rmesh       JO A   A               
 /         $0H`lx .rmesh              <                p                 E     @  
 
  	 l                                                                                                                    Ԁ              _       <                p                 E     @  
 
- 	 l                                                                                                             S       Ԁ                     <                                 E     @  
+ 	 l                                                                                                                    Ԁ                     <                                 E     @  
 
  
  l                                                                                                             t       Ԁ                     <                P                E     @  
 
  
- l                                                                                                             C!       Ԁ              n"       <                                E     @  
+ l                                                                                                             :!       Ԁ              S"       <                                E     @  
 
  
- l                                                                                                             ~"       Ԁ              +b F   F               Ps(6         $0H`lx
- 5/rmesh       j A   A               *6         $0H`lx (6rmesh       D        Ԁ              '        <                                E     @  
+ l                                                                                                             c"       Ԁ              +b F   F               ps(6         $0H`lx
+ 5/rmesh       j A   A                *6         $0H`lx (6rmesh                Ԁ                      <                                E     @  
 
- 	 l                                                                                                             7        Ԁ                      <                                 E     @  
+ 	 l                                                                                                                     Ԁ              >        <                                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E     @  
+ 	 l                                                                                                             3        Ԁ                      <                `                E     @  
 
- 	 l                                                                                                               F   F               `=         $0H`lx
- =6rmesh       JO A   A                JX>         $0H`lx =rmesh              <                                 E     @  
+ 	 l                                                                                                               F   F               =         $0H`lx
+ =6rmesh       JO A   A               0JX>         $0H`lx =rmesh              <                                 E     @  
 
  	 l                                                                                                                    Ԁ              _       <                                 E     @  
 
  	 l                                                                                                             S       Ԁ                     <                                 E     @  
 
  
- l                                                                                                             t       Ԁ              W       <                p                E     @  
+ l                                                                                                             t       Ԁ                     <                p                E     @  
 
  
- l                                                                                                                     Ԁ              !       <                                E     @  
+ l                                                                                                                     Ԁ              "       <                                E     @  
 
  
- l                                                                                                             !       Ԁ              +b F   F               pjE         $0H`lx
- @EX>rmesh       j A   A               0jE         $0H`lx kErmesh    
\ No newline at end of file
+ l                                                                                                             "       Ԁ              +b F   F               jE         $0H`lx
+ @EX>rmesh       j A   A               @jE         $0H`lx kErmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-1-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,4 +1,4 @@
-ò            i       %  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               &        Ԁ               v'  <   <   Ѐ<                     $0H`lq  9u            A   A                 (          $0H`lx $ rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u         c        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ                 >   >   Ѐ<                @   $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               P H7         $0H`lx
+ò            i       %  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               &        Ԁ               m'  <   <   Ѐ<                     $0H`lq  9u            A   A                 (          $0H`lx $ rmesh          >   >   Ѐ<                    $0H`lrmeshq   9u         c        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u                  Ԁ                 >   >   Ѐ<                @   $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               P 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               ` h         $0H`lx
  fbrmesh         F   F               `          $0H`lx
@@ -14,99 +14,100 @@
      
        5        Ԁ                N   N   <                                        
      
-       H        Ԁ                      <                                  E      @  
+       H        Ԁ              {        <                                  E      @  
 
- 	 l                                                                                                                     Ԁ              3        <                                 E      @  
+ 	 l                                                                                                                     Ԁ              *        <                                 E      @  
 
- 	 l                                                                                                             x        Ԁ              #  N   N                                 
+ 	 l                                                                                                             o        Ԁ                N   N                                 
 
-         N   N                                
+       {  N   N                                
 
-         N   N   <                                        
+         N   N   <                                        
      
-               Ԁ              M   N   N   <                                       
+               Ԁ              2   N   N   <                                       
      
-       	!        Ԁ              W"        <                                 E      @  
+                Ԁ              3"        <                                 E      @  
 
- 	 l                                                                                                             g"        Ԁ              "        <                                E      @  
+ 	 l                                                                                                             C"        Ԁ              "        <                                E      @  
 
- 	 l                                                                                                             $        Ԁ              J%  N   N                                
+ 	 l                                                                                                             #        Ԁ              (%  N   N                                
 
          F   F                         $0H`lx
- rmesh         F   F                E         $0H`lx
+ rmesh         F   F                E         $0H`lx
  3rmesh       O A   A                         $0H`lx Ermesh       h0 N   N                                 
 
        1 N   N   <                                         
      
        1       Ԁ              3 N   N                                
 
-       l3       <                                  E      @  
+       Z3       <                                  E      @  
 
- 	 l                                                                                                             4       Ԁ              8 N   N                                 
+ 	 l                                                                                                             4       Ԁ              8 N   N                                 
 
-       9 N   N   <                0                        
+       8 N   N   <                0                        
      
-       9       Ԁ              .: N   N                                
+       9       Ԁ              : N   N                                
 
-       Z; N   N                                
+       H; N   N                                
 
-       <       <                0                 E      @  
+       {<       <                0                 E      @  
 
- 	 l                                                                                                             <       Ԁ               N   N                                 
+ 	 l                                                                                                             <       Ԁ               N   N                                 
 
         N   N                                
 
        >  N   N                                
 
-       ;" ?   ?   Ѐ<                              ,                 _#       Ԁ              $ N   N   <                                        
+       ;" ?   ?   Ѐ<                              ,                 _#       Ԁ              
+$ N   N   <                                        
      
-       #$       Ԁ              % E   E   Ѐ             %                                 a% E   E   Ѐ             %              ,                  d& ?   ?   Ѐ<                                                 t&       Ԁ              & ?   ?   Ѐ<                                             k'       Ԁ              ' ?   ?   Ѐ<                           ,                 i( N   N   <                @                       
+       $       Ԁ              	% E   E   Ѐ             %                                 4% N   N   <                @                       
      
-       &)       Ԁ              Y*       <                @                 E      @  
+       %       Ԁ              @& E   E   Ѐ             %              ,                  7 F   F               Ȼ&         $0H`lx
+ J&Ermesh       a F   F               3&         $0H`lx
+ &rmesh        A   A                t'         $0H`lx &rmesh       )F	 E   E   Ѐ             %                                    KF	 ?   ?   Ѐ<                              ,                 F	       Ԁ              'H	       <                @                 E      @  
 
  
- l                                                                                                             i*       Ԁ              >+       <                                 E      @  
+ l                                                                                                             7H	       Ԁ              H	       <                                 E      @  
 
  
- l                                                                                                             ,       Ԁ              -       <                                 E      @  
+ l                                                                                                             I	       Ԁ              K	       <                                 E      @  
 
  
- l                                                                                                             / N   N                                
+ l                                                                                                             <L	 E   E   Ѐ            0%                                 tM	 E   E   Ѐ             %              ,                  >N	       Ԁ              N	 ?   ?   Ѐ<                0                             N	       Ԁ              *O	 ?   ?   Ѐ<                @           ,                 O	       Ԁ              P	 N   N          @                     
 
-       / N   N                                
+       P	 N   N          P                     
 
-       1 N   N   <                P                        
+       Q	 N   N   <                P                        
      
-       -1       Ԁ              1 N   N   <                0                       
+        R	       Ԁ              iR	 N   N   <                0                       
      
-       \2       Ԁ              3 N   N                                
+       &S	       Ԁ              S	 N   N                                
 
-       3 N   N   <                                       
+       T	 N   N   <                                       
      
-       5       Ԁ              "7       <                0                E      @  
+       VV	       Ԁ              W	       <                0                E      @  
 
  
- l                                                                                                             27       Ԁ              7       <                P                E      @  
+ l                                                                                                             W	       Ԁ              /X	       <                P                E      @  
 
  
- l                                                                                                             8       Ԁ              7 F   F               0Ȼ&         $0H`lx
- J&Ermesh       a F   F               03&         $0H`lx
- &rmesh        A   A                t'         $0H`lx &rmesh               <                @                 E     @  
+ l                                                                                                             $Y	       Ԁ                      <                @                 E     @  
 
  	 l                                                                                                                     Ԁ              o        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                 E     @  
+ 	 l                                                                                                             c        Ԁ                      <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ              {        <                @                E     @  
 
- 	 l                                                                                                                     Ԁ                F   F               @\.         $0H`lx
- -&rmesh         F   F               @S.         $0H`lx
- ].u'rmesh       O A   A                
+ 	 l                                                                                                                     Ԁ                F   F               P\.         $0H`lx
+ -&rmesh         F   F               `S.         $0H`lx
+ ].u'rmesh       O A   A               
 /         $0H`lx .rmesh       @       <                p                 E     @  
 
- 	 l                                                                                                             4       Ԁ                     <                p                 E     @  
+ 	 l                                                                                                             4       Ԁ              g       <                p                 E     @  
 
- 	 l                                                                                                             '       Ԁ              8       <                                 E     @  
+ 	 l                                                                                                             w       Ԁ              8       <                                 E     @  
 
  
  l                                                                                                             H       Ԁ                     <                P                E     @  
@@ -115,25 +116,25 @@
  l                                                                                                                    Ԁ                     <                                 E     @  
 
  
- l                                                                                                                    Ԁ              !       <                P                E     @  
+ l                                                                                                                    Ԁ                      <                P                E     @  
 
  
- l                                                                                                             !       Ԁ              !       <                                E     @  
+ l                                                                                                             !       Ԁ              !       <                                E     @  
 
  
- l                                                                                                             "       Ԁ              7 F   F               P5         $0H`lx
- 5.rmesh       a F   F               Ps(6         $0H`lx
- 5/rmesh        A   A               *6         $0H`lx (6rmesh               <                `                 E     @  
+ l                                                                                                             "       Ԁ              7 F   F               `5         $0H`lx
+ 5.rmesh       a F   F               ps(6         $0H`lx
+ 5/rmesh        A   A                *6         $0H`lx (6rmesh                <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ              o        <                                E     @  
+ 	 l                                                                                                                      Ԁ                      <                                E     @  
 
- 	 l                                                                                                             c        Ԁ              F        <                                 E     @  
+ 	 l                                                                                                                     Ԁ                      <                                 E     @  
 
- 	 l                                                                                                             V        Ԁ                      <                `                E     @  
+ 	 l                                                                                                                     Ԁ              x        <                `                E     @  
 
- 	 l                                                                                                                     Ԁ                F   F               `(=         $0H`lx
- -=(6rmesh         F   F               `=         $0H`lx
- =6rmesh       O A   A                JX>         $0H`lx =rmesh       @       <                                 E     @  
+ 	 l                                                                                                                     Ԁ                F   F               p(=         $0H`lx
+ -=(6rmesh         F   F               =         $0H`lx
+ =6rmesh       O A   A               0JX>         $0H`lx =rmesh       @       <                                 E     @  
 
  	 l                                                                                                             4       Ԁ                     <                                 E     @  
 
@@ -143,15 +144,15 @@
  l                                                                                                             H       Ԁ                     <                p                E     @  
 
  
- l                                                                                                                    Ԁ                     <                0                E     @  
+ l                                                                                                                    Ԁ                     <                0                E     @  
 
  
- l                                                                                                             r       Ԁ              g        <                p                E     @  
+ l                                                                                                                    Ԁ                      <                p                E     @  
 
  
- l                                                                                                             w        Ԁ              !       <                                E     @  
+ l                                                                                                                     Ԁ              T!       <                                E     @  
 
  
- l                                                                                                             "       Ԁ              7 F   F               pH@E         $0H`lx
- D=rmesh       a F   F               pjE         $0H`lx
- @EX>rmesh        A   A               0jE         $0H`lx kErmesh    
\ No newline at end of file
+ l                                                                                                             I"       Ԁ              7 F   F               H@E         $0H`lx
+ D=rmesh       a F   F               jE         $0H`lx
+ @EX>rmesh        A   A               @jE         $0H`lx kErmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-2-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-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`lq   9u          %        Ԁ               &  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               '  <   <   Ѐ<                     $0H`lq  9u          '        Ԁ               (  A   A                 (          $0H`lx $ rmesh        &  >   >   Ѐ<                    $0H`lrmeshq   9u         6        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          )        Ԁ               K  >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ                 <   <   Ѐ<                     $0H`lq  9u                  Ԁ                 A   A                           $0H`lx  rmesh                Ԁ               X  <   <   Ѐ<                0    $0H`lq  9u          >  >   >   Ѐ<                @   $0H`lrmeshq  9u         @        Ԁ                A   A               0 -         $0H`lx  rmesh        H7 F   F               P H7         $0H`lx
+ò            i       u$  <   <                 $          $0H`lx rmesh        $  >   >   Ѐ<                    $0H`lrmeshq   9u         @%        Ԁ               %  <   <   Ѐ<                     $0H`lq   9u          %        Ԁ               &  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               '  <   <   Ѐ<                     $0H`lq  9u          '        Ԁ               (  A   A                 (          $0H`lx $ rmesh        &  >   >   Ѐ<                    $0H`lrmeshq   9u         6        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u          )        Ԁ               K  >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ               ~  <   <   Ѐ<                     $0H`lq  9u                  Ԁ                 A   A                           $0H`lx  rmesh                Ԁ               X  <   <   Ѐ<                0    $0H`lq  9u          >  >   >   Ѐ<                @   $0H`lrmeshq  9u         @        Ԁ                A   A               0 -         $0H`lx  rmesh        H7 F   F               P H7         $0H`lx
   rmesh        +b F   F               P a         $0H`lx
  7Ormesh       }$  A   A               @ Mf         $0H`lx 7rmesh       (  F   F               ` h         $0H`lx
  fbrmesh         F   F               `          $0H`lx
@@ -10,41 +10,41 @@
 
          E   E   Ѐ             %                                   ?   ?   Ѐ<                                                         Ԁ              =  ?   ?   Ѐ<                                              a        Ԁ                N   N   <                                        
      
-               Ԁ                      <                                  E      @  
+               Ԁ              s        <                                  E      @  
 
- 	 l                                                                                                                     Ԁ              <        <                                 E      @  
+ 	 l                                                                                                                     Ԁ              3        <                                 E      @  
 
- 	 l                                                                                                               N   N                                
+ 	 l                                                                                                               N   N                                
 
-       8  N   N   <                                        
+       &  N   N   <                                        
      
-               Ԁ                 N   N   <                                       
+               Ԁ                 N   N   <                                       
      
-       "        Ԁ              #        <                                E      @  
+       p"        Ԁ              #        <                                E      @  
 
- 	 l                                                                                                             #        Ԁ              $  A   A               p          $0H`lx zrmesh       $  N   N                                
+ 	 l                                                                                                             #        Ԁ              }$  A   A               p          $0H`lx zrmesh       $  N   N                                
 
-       %  N   N                                
+       %  N   N                                
 
        (  F   F                         $0H`lx
- rmesh         F   F                E         $0H`lx
+ rmesh         F   F                E         $0H`lx
  3rmesh       0 N   N                                 
 
        1 N   N                                
 
        1       Ԁ              {2 N   N                                
 
-       t4       <                                  E      @  
+       b4       <                                  E      @  
 
- 	 l                                                                                                             9 N   N   <                0                        
+ 	 l                                                                                                             v9 N   N   <                0                        
      
-       : N   N                                
+       : N   N                                
 
-       : N   N                                
+       : N   N                                
 
-       < N   N                                
+       ; N   N                                
 
-       <       Ԁ               N   N                                
+       <       Ԁ               N   N                                
 
         N   N                                
 
@@ -52,48 +52,48 @@
 
        ! E   E   Ѐ             %                                    ! ?   ?   Ѐ<                              ,                 w"       Ԁ              "# N   N   <                                         
      
-       2#       Ԁ              # N   N   <                                        
+       2#       Ԁ              # N   N   <                                        
      
-       O$       Ԁ              $ E   E   Ѐ             %                                 % E   E   Ѐ             %              ,                  &       Ԁ              .' ?   ?   Ѐ<                                             >'       Ԁ              ' ?   ?   Ѐ<                           ,                 5(       Ԁ              ( N   N   <                @                       
+       F$       Ԁ              $ E   E   Ѐ             %                                 % N   N   <                @                       
      
-       *       Ԁ              F,       <                                 E      @  
+       & E   E   Ѐ             %              ,                   A   A                I&         $0H`lx rmesh       H7 F   F               Ȼ&         $0H`lx
+ J&Ermesh       +b F   F               3&         $0H`lx
+ &rmesh       F	 ?   ?   Ѐ<                              ,                 cH	       Ԁ              I	       <                                 E      @  
 
  
- l                                                                                                             V,       Ԁ              ,       <                                 E      @  
+ l                                                                                                             I	       Ԁ              I	       <                                 E      @  
 
  
- l                                                                                                             -       Ԁ              . N   N                                 
+ l                                                                                                             BK	       Ԁ              K	 N   N                                 
 
-       F/ N   N                                
+       L	 E   E   Ѐ            0%                                 L	 E   E   Ѐ             %              ,                  N	 ?   ?   Ѐ<                                                 N	       Ԁ              `N	 ?   ?   Ѐ<                0                             	O	       Ԁ              O	 ?   ?   Ѐ<                @           ,                 P	 N   N          @                     
 
-       r0 N   N                                
+       EQ	 N   N          P                     
 
-       Y1       Ԁ              2 N   N   <                0                       
+       -R	       Ԁ              R	 N   N   <                0                       
      
-       /2       Ԁ              {3 N   N   <                                       
+       R	       Ԁ              *T	 N   N   <                                       
      
-       74       Ԁ              j5       <                                 E      @  
+       T	       Ԁ              V	       <                                 E      @  
 
  
- l                                                                                                             z5       Ԁ              6       <                0                E      @  
+ l                                                                                                             *V	       Ԁ              V	       <                0                E      @  
 
  
- l                                                                                                             ^7       Ԁ              8       <                P                E      @  
+ l                                                                                                             X	       Ԁ              X	       <                P                E      @  
 
  
- l                                                                                                              A   A                I&         $0H`lx rmesh       H7 F   F               0Ȼ&         $0H`lx
- J&Ermesh       +b F   F               03&         $0H`lx
- &rmesh                 <                @                 E     @  
+ l                                                                                                                       <                @                 E     @  
 
- 	 l                                                                                                             D        Ԁ              w        <                `                E     @  
+ 	 l                                                                                                             D        Ԁ              '        <                `                E     @  
 
- 	 l                                                                                                             #        Ԁ                      <                @                E     @  
+ 	 l                                                                                                                     Ԁ                      <                @                E     @  
 
- 	 l                                                                                                                     Ԁ              }$  A   A                -         $0H`lx &rmesh       (  F   F               @\.         $0H`lx
- -&rmesh         F   F               @S.         $0H`lx
+ 	 l                                                                                                                     Ԁ              }$  A   A                -         $0H`lx &rmesh       (  F   F               P\.         $0H`lx
+ -&rmesh         F   F               `S.         $0H`lx
  ].u'rmesh              <                p                 E     @  
 
- 	 l                                                                                                             S       Ԁ              t       Ԁ                     <                P                E     @  
+ 	 l                                                                                                                    Ԁ              t       Ԁ                     <                P                E     @  
 
  
  l                                                                                                                    Ԁ                     <                                 E     @  
@@ -102,39 +102,39 @@
  l                                                                                                             S       Ԁ                     <                                  E     @  
 
  
- l                                                                                                                    Ԁ                     <                P                E     @  
+ l                                                                                                                    Ԁ                     <                P                E     @  
 
  
- l                                                                                                             C!       Ԁ              n"       <                                E     @  
+ l                                                                                                             :!       Ԁ              S"       <                                E     @  
 
  
- l                                                                                                              A   A                5         $0H`lx ].rmesh       H7 F   F               P5         $0H`lx
- 5.rmesh       +b F   F               Ps(6         $0H`lx
+ l                                                                                                              A   A               5         $0H`lx ].rmesh       H7 F   F               `5         $0H`lx
+ 5.rmesh       +b F   F               ps(6         $0H`lx
  5/rmesh                 <                `                 E     @  
 
- 	 l                                                                                                             D        Ԁ              '        <                                E     @  
+ 	 l                                                                                                                      Ԁ                      <                                E     @  
 
- 	 l                                                                                                                     Ԁ                      <                `                E     @  
+ 	 l                                                                                                             3        Ԁ                      <                `                E     @  
 
- 	 l                                                                                                                     Ԁ              }$  A   A               -=         $0H`lx 5rmesh       (  F   F               `(=         $0H`lx
- -=(6rmesh         F   F               `=         $0H`lx
+ 	 l                                                                                                                     Ԁ              }$  A   A                -=         $0H`lx 5rmesh       (  F   F               p(=         $0H`lx
+ -=(6rmesh         F   F               =         $0H`lx
  =6rmesh              <                                 E     @  
 
- 	 l                                                                                                             S       Ԁ              t       Ԁ              W       <                p                E     @  
+ 	 l                                                                                                             S       Ԁ              t       Ԁ                     <                p                E     @  
 
  
- l                                                                                                             g       Ԁ                     <                0                E     @  
+ l                                                                                                                    Ԁ                     <                0                E     @  
 
  
- l                                                                                                                    Ԁ              6       <                0                 E     @  
+ l                                                                                                             S       Ԁ                     <                0                 E     @  
 
  
- l                                                                                                             F       Ԁ                     <                p                E     @  
+ l                                                                                                                    Ԁ                     <                p                E     @  
 
  
- l                                                                                                                     Ԁ              !       <                                E     @  
+ l                                                                                                                     Ԁ              "       <                                E     @  
 
  
- l                                                                                                              A   A                -D         $0H`lx =rmesh       H7 F   F               pH@E         $0H`lx
- D=rmesh       +b F   F               pjE         $0H`lx
+ l                                                                                                              A   A               0-D         $0H`lx =rmesh       H7 F   F               H@E         $0H`lx
+ D=rmesh       +b F   F               jE         $0H`lx
  @EX>rmesh    
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap
--- ns-3.24.1/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/dot11s/hwmp-target-flags-regression-test-3-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,26 +1,26 @@
-ò            i       $  <   <                 $          $0H`lx rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u         %        Ԁ               a%  <   <   Ѐ<                     $0H`lq   9u          &        Ԁ               :&  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               v'  <   <   Ѐ<                     $0H`lq  9u          '        Ԁ                 A   A                 (          $0H`lx $ rmesh        c        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u            >   >   Ѐ<                @   $0H`lrmeshq  9u         ̙        Ԁ               - A   A               0 -         $0H`lx  rmesh        7 F   F               P H7         $0H`lx
+ò            i       $  <   <                 $          $0H`lx rmesh        %  >   >   Ѐ<                    $0H`lrmeshq   9u         %        Ԁ               a%  <   <   Ѐ<                     $0H`lq   9u          &        Ԁ               :&  >   >   Ѐ<                    $0H`lrmeshq   9u         &        Ԁ               m'  <   <   Ѐ<                     $0H`lq  9u          }'        Ԁ                 A   A                 (          $0H`lx $ rmesh        c        Ԁ                 <   <   Ѐ<                0    $0H`lq  9u            >   >   Ѐ<                @   $0H`lrmeshq  9u                 Ԁ               - A   A               0 -         $0H`lx  rmesh        7 F   F               P H7         $0H`lx
   rmesh       $  A   A               @ Mf         $0H`lx 7rmesh         F   F               ` h         $0H`lx
  fbrmesh       - A   A               P m         $0H`lx rmesh       7 F   F               p y         $0H`lx
  rmesh         N   N                                 
 
        3  N   N          `                      
 
-       s  ?   ?   Ѐ<                                                 H        Ԁ                      <                                  E      @  
+       s  ?   ?   Ѐ<                                                 H        Ԁ              {        <                                  E      @  
 
- 	 l                                                                                                               N   N   <                                        
+ 	 l                                                                                                               N   N   <                                        
      
-       $        Ԁ              $  A   A               p          $0H`lx zrmesh       J%  N   N                                
+       #        Ԁ              $  A   A               p          $0H`lx zrmesh       (%  N   N                                
 
-       u%  N   N                                
+       S%  N   N                                
 
          F   F                         $0H`lx
- rmesh       1 N   N                                
+ rmesh       1 N   N                                
 
        1 N   N                                
 
-       Z; N   N                                
+       H; N   N                                
 
-       ; N   N                                
+       s; N   N                                
 
        >  N   N                                
 
@@ -28,48 +28,49 @@
 
        8! E   E   Ѐ             %                                    ;" ?   ?   Ѐ<                              ,                 K"       Ԁ              " N   N   <                                         
      
-       _#       Ԁ              $ N   N   <                                        
+       _#       Ԁ              
+$ N   N   <                                        
      
-       % E   E   Ѐ             %                                 k'       Ԁ              ' ?   ?   Ѐ<                           ,                 	(       Ԁ              ,       Ԁ              -       <                                 E      @  
+       	% E   E   Ѐ             %                                 - A   A                I&         $0H`lx rmesh       7 F   F               Ȼ&         $0H`lx
+ J&Ermesh       I	       Ԁ              K	       <                                 E      @  
 
  
- l                                                                                                             -       Ԁ              . N   N                                 
+ l                                                                                                             K	       Ԁ              lK	 N   N                                 
 
-       / N   N                                
+       tM	 E   E   Ѐ             %              ,                  M	 ?   ?   Ѐ<                                                 >N	       Ԁ              N	 ?   ?   Ѐ<                0                             P	 N   N          @                     
 
-       \2       Ԁ              3 N   N   <                                       
+       &S	       Ԁ              T	 N   N   <                                       
      
-       4       Ԁ              b4       <                                 E      @  
+       T	       Ԁ              U	       <                                 E      @  
 
  
- l                                                                                                             5       Ԁ              "7       <                0                E      @  
+ l                                                                                                             VV	       Ԁ              W	       <                0                E      @  
 
  
- l                                                                                                             - A   A                I&         $0H`lx rmesh       7 F   F               0Ȼ&         $0H`lx
- J&Ermesh               <                @                 E     @  
+ l                                                                                                                     <                @                 E     @  
 
- 	 l                                                                                                                     Ԁ              $  A   A                -         $0H`lx &rmesh         F   F               @\.         $0H`lx
+ 	 l                                                                                                                     Ԁ              $  A   A                -         $0H`lx &rmesh         F   F               P\.         $0H`lx
  -&rmesh              Ԁ                     <                                 E     @  
 
  
  l                                                                                                             &       Ԁ              }       <                                  E     @  
 
  
- l                                                                                                                    Ԁ              !       <                P                E     @  
+ l                                                                                                                    Ԁ                      <                P                E     @  
 
  
- l                                                                                                             - A   A                5         $0H`lx ].rmesh       7 F   F               P5         $0H`lx
- 5.rmesh               <                `                 E     @  
+ l                                                                                                             - A   A               5         $0H`lx ].rmesh       7 F   F               `5         $0H`lx
+ 5.rmesh                <                `                 E     @  
 
- 	 l                                                                                                                     Ԁ              $  A   A               -=         $0H`lx 5rmesh         F   F               `(=         $0H`lx
- -=(6rmesh              Ԁ                     <                0                E     @  
+ 	 l                                                                                                                     Ԁ              $  A   A                -=         $0H`lx 5rmesh         F   F               p(=         $0H`lx
+ -=(6rmesh              Ԁ                     <                0                E     @  
 
  
- l                                                                                                                    Ԁ              -       <                0                 E     @  
+ l                                                                                                             &       Ԁ              }       <                0                 E     @  
 
  
- l                                                                                                             r       Ԁ              g        <                p                E     @  
+ l                                                                                                                    Ԁ                      <                p                E     @  
 
  
- l                                                                                                             - A   A                -D         $0H`lx =rmesh       7 F   F               pH@E         $0H`lx
+ l                                                                                                             - A   A               0-D         $0H`lx =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/flame/flame-regression-test-0-1.pcap ns-3.25/src/mesh/test/flame/flame-regression-test-0-1.pcap
--- ns-3.24.1/src/mesh/test/flame/flame-regression-test-0-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/flame/flame-regression-test-0-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -2,78 +2,78 @@
 
        $  Z   Z   <                            @@                     
      
-       l%        Ԁ              B&  Z   Z   <                            @@                    
+       l%        Ԁ              9&  Z   Z   <                            @@                    
      
-       &  Z   Z                      @@               
+       &  Z   Z                      @@               
 
-       )        Ԁ              *  n   n   <                            @@             E  0    @  
+       )        Ԁ              *  n   n   <                            @@             E  0    @  
 
- 	                              *        Ԁ               +  >   >                     @@                 U,  >   >                     @@                M  Z   Z                      @@                
+ 	                              *        Ԁ              *  >   >                     @@                 C,  >   >                     @@                M  Z   Z                      @@                
 
-       O  Z   Z                      @@               
+       O  Z   Z                      @@               
 
-       P        Ԁ              Q  Z   Z   <                           @@                    
+       O        Ԁ              Q  Z   Z   <                           @@                    
      
-       R        Ԁ              XR  n   n   <                           @@              E  0    @  
+       Q        Ԁ              =R  n   n   <                           @@              E  0    @  
 
- 	                              AS        Ԁ              <T  n   n   <                           @@             E  0    @  
+ 	                              &S        Ԁ              T  n   n   <                           @@             E  0    @  
 
- 	                                     Ԁ              ` n   n   <                            @@             E  0   @  
+ 	                                     Ԁ              ` n   n   <                            @@             E  0    @  
 
- 	                              p       Ԁ              ǈ n   n   <                            @@              E  0   @  
+ 	                              p       Ԁ              ǈ n   n   <                            @@              E  0    @  
 
- 	                                     Ԁ               n   n   <                            @@             E  0   @  
+ 	                                     Ԁ               n   n   <                            @@             E  0    @  
 
- 	                              )       Ԁ                n   n   <                0           @@             E  0   @  
+ 	                              )       Ԁ                n   n   <                0           @@             E  0    @  
 
- 	                                     Ԁ              g n   n   <                0           @@              E  0   @  
+ 	                                     Ԁ              g n   n   <                0           @@              E  0    @  
 
- 	                              P       Ԁ              ' n   n   <                0           @@             E  0   @  
+ 	                              P       Ԁ              ' n   n   <                0           @@             E  0    @  
 
- 	                              ɔ       Ԁ               n   n   <                @           @@             E  0   @  
+ 	                              ɔ       Ԁ               n   n   <                @           @@             E  0    @  
 
- 	                                     Ԁ               n   n   <                @           @@              E  0   @  
+ 	                                     Ԁ               n   n   <                @           @@              E  0    @  
 
- 	                                     Ԁ              ! n   n   <                @           @@             E  0   @  
+ 	                                     Ԁ               n   n   <                @           @@             E  0    @  
 
- 	                              i       Ԁ              @ n   n   <                P           @@             E  0   @  
+ 	                              i       Ԁ              @ n   n   <                P           @@             E  0    @  
 
- 	                              P       Ԁ               n   n   <                P           @@              E  0   @  
+ 	                              P       Ԁ               n   n   <                P           @@              E  0    @  
 
- 	                              Y n   n   <                P           @@              E  0   @  
+ 	                              Y n   n   <                P           @@              E  0    @  
 
- 	                              B       Ԁ                n   n   <                P           @@             E  0   @  
+ 	                              B       Ԁ                n   n   <                P           @@             E  0    @  
 
- 	                               n   n               0           @@             E  0   @  
+ 	                               n   n               0           @@             E  0    @  
 
  	                              Ϣ >   >          0           @@   	              f n   n   <                `           @@   
-           E  0   @  
+           E  0    @  
 
- 	                              O       Ԁ              I >   >          @           @@  	               n   n   <                `           @@  
-           E  0   @  
+ 	                              O       Ԁ              7 >   >          @           @@  	               n   n   <                `           @@  
+           E  0    @  
 
- 	                               n   n   <                `           @@  
-           E  0   @  
+ 	                              | n   n   <                `           @@  
+           E  0    @  
 
- 	                              (	       Ԁ              )	 n   n   <                `           @@  	           E  0   @  
+ 	                              (	       Ԁ              )	 n   n   <                `           @@  	           E  0    @  
 
- 	                              )	       Ԁ              )	 n   n   <                p           @@              E  0   @  
+ 	                              )	       Ԁ              )	 n   n   <                p           @@              E  0    @  
 
- 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0   @  
+ 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0    @  
 
  	                              I
        Ԁ               
  n   n   <                p           @@  
-           E  0   @  
+           E  0    @  
 
  	                              0
        Ԁ              
- n   n   <                           @@              E  0   @  
+ n   n   <                           @@              E  0    @  
 
  	                              p
-       Ԁ              P
- n   n   <                           @@             E  0   @  
+       Ԁ              G
+ n   n   <                           @@             E  0    @  
 
- 	                           	   9 n   n   <                           @@             E  0   @  
+ 	                           	   9 n   n   <                           @@             E  0    @  
 
  	                           	   9       Ԁ           
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/flame/flame-regression-test-1-1.pcap ns-3.25/src/mesh/test/flame/flame-regression-test-1-1.pcap
--- ns-3.24.1/src/mesh/test/flame/flame-regression-test-1-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/flame/flame-regression-test-1-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -4,101 +4,101 @@
 
        /%  Z   Z   <                            @@                     
      
-       ?%        Ԁ              %  Z   Z   <                            @@                    
+       ?%        Ԁ              %  Z   Z   <                            @@                    
      
-       ~&        Ԁ              )  n   n   <                            @@              E  0    @  
+       u&        Ԁ              |)  n   n   <                            @@              E  0    @  
 
- 	                              )        Ԁ              )  n   n   <                            @@             E  0    @  
+ 	                              )        Ԁ              )  n   n   <                            @@             E  0    @  
 
- 	                              *        Ԁ              l+  >   >                     @@                 +  >   >                     @@                ,  >   >                     @@                QN  Z   Z                      @@                
+ 	                              *        Ԁ              c+  >   >                     @@                 +  >   >                     @@                ,  >   >                     @@                HN  Z   Z                      @@                
 
-       |N  Z   Z                      @@               
+       sN  Z   Z                      @@               
 
-       O  Z   Z   <                           @@                     
+       O  Z   Z   <                           @@                     
      
-       O        Ԁ              P  Z   Z                      @@               
+       O        Ԁ              P  Z   Z                      @@               
 
-       `Q  Z   Z   <                           @@                    
+       EQ  Z   Z   <                           @@                    
      
-       -R        Ԁ              S  n   n   <                           @@              E  0    @  
+       R        Ԁ              R  n   n   <                           @@              E  0    @  
 
- 	                              S        Ԁ              S  n   n   <                           @@             E  0    @  
+ 	                              R        Ԁ              kS  n   n   <                           @@             E  0    @  
 
- 	                              xT        Ԁ              L n   n   <                            @@              E  0   @  
+ 	                              TT        Ԁ              L n   n   <                            @@              E  0    @  
 
- 	                              \       Ԁ               n   n   <                            @@             E  0   @  
+ 	                              \       Ԁ               n   n   <                            @@             E  0    @  
 
- 	                                     Ԁ              s n   n   <                            @@              E  0   @  
+ 	                                     Ԁ              s n   n   <                            @@              E  0    @  
 
- 	                                     Ԁ               n   n   <                            @@             E  0   @  
+ 	                                     Ԁ               n   n   <                            @@             E  0    @  
 
- 	                                     Ԁ               n   n   <                0           @@              E  0   @  
+ 	                              ފ       Ԁ               n   n   <                0           @@              E  0    @  
 
- 	                                     Ԁ              S n   n   <                0           @@             E  0   @  
+ 	                                     Ԁ              S n   n   <                0           @@             E  0    @  
 
- 	                              <       Ԁ               n   n   <                0           @@              E  0   @  
+ 	                              <       Ԁ               n   n   <                0           @@              E  0    @  
 
- 	                              #       Ԁ              z n   n   <                0           @@             E  0   @  
+ 	                              #       Ԁ              z n   n   <                0           @@             E  0    @  
 
- 	                              c       Ԁ               n   n   <                @           @@              E  0   @  
+ 	                              c       Ԁ               n   n   <                @           @@              E  0    @  
 
- 	                                     Ԁ               n   n   <                @           @@             E  0   @  
+ 	                                     Ԁ               n   n   <                @           @@             E  0    @  
 
- 	                              ܕ       Ԁ               n   n   <                @           @@              E  0   @  
+ 	                              ܕ       Ԁ               n   n   <                @           @@              E  0    @  
 
- 	                              Ö       Ԁ              t n   n   <                @           @@             E  0   @  
+ 	                              Ö       Ԁ              k n   n   <                @           @@             E  0    @  
 
- 	                              ]       Ԁ              , n   n   <                P           @@              E  0   @  
+ 	                              T       Ԁ              , n   n   <                P           @@              E  0    @  
 
- 	                              <       Ԁ               n   n   <                P           @@             E  0   @  
+ 	                              <       Ԁ               n   n   <                P           @@             E  0    @  
 
- 	                              |       Ԁ               n   n   <                P           @@              E  0   @  
+ 	                              |       Ԁ               n   n   <                P           @@              E  0    @  
 
- 	                                     Ԁ              l n   n   <                P           @@             E  0   @  
+ 	                                     Ԁ              l n   n   <                P           @@             E  0    @  
 
- 	                              U        Ԁ              ̡ n   n               0           @@              E  0   @  
+ 	                              U        Ԁ              ̡ n   n               0           @@              E  0    @  
 
- 	                               n   n               0           @@             E  0   @  
+ 	                               n   n               0           @@             E  0    @  
 
  	                              ; >   >          0           @@   	               n   n   <                `           @@   
-           E  0   @  
+           E  0    @  
 
- 	                              "       Ԁ              ܤ >   >          @           @@  	               >   >          @           @@  	              e n   n   <                `           @@  
-           E  0   @  
+ 	                              "       Ԁ              ʤ >   >          @           @@  	              Υ >   >          @           @@  	              J n   n   <                `           @@  
+           E  0    @  
 
- 	                               n   n   <                `           @@  
-           E  0   @  
+ 	                              ϧ n   n   <                `           @@  
+           E  0    @  
 
- 	                              Ө       Ԁ              l(	 n   n   <                `           @@   	           E  0   @  
+ 	                                     Ԁ              l(	 n   n   <                `           @@   	           E  0    @  
 
- 	                              |(	       Ԁ              (	 n   n   <                `           @@  	           E  0   @  
+ 	                              |(	       Ԁ              (	 n   n   <                `           @@  	           E  0    @  
 
- 	                              )	       Ԁ              *	 n   n   <                p           @@              E  0   @  
+ 	                              )	       Ԁ              *	 n   n   <                p           @@              E  0    @  
 
- 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0   @  
+ 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0    @  
 
- 	                              +	       Ԁ              
+ 	                              +	       Ԁ              
  n   n   <                p           @@   
-           E  0   @  
+           E  0    @  
 
  	                              
        Ԁ              s
  n   n   <                p           @@  
-           E  0   @  
+           E  0    @  
 
  	                              \
        Ԁ              3
- n   n   <                           @@              E  0   @  
+ n   n   <                           @@              E  0    @  
 
  	                              C
-       Ԁ              
- n   n   <                           @@             E  0   @  
+       Ԁ              
+ n   n   <                           @@             E  0    @  
 
- 	                              
-       Ԁ           	   6 n   n   <                           @@              E  0   @  
+ 	                              
+       Ԁ           	   6 n   n   <                           @@              E  0    @  
 
- 	                           	   6       Ԁ           	   P7 n   n   <                           @@             E  0   @  
+ 	                           	   6       Ԁ           	   P7 n   n   <                           @@             E  0    @  
 
- 	                           	   8 n   n   <                           @@             E  0   @  
+ 	                           	   8 n   n   <                           @@             E  0    @  
 
  	                           	   9       Ԁ           
\ No newline at end of file
diff -Naur ns-3.24.1/src/mesh/test/flame/flame-regression-test-2-1.pcap ns-3.25/src/mesh/test/flame/flame-regression-test-2-1.pcap
--- ns-3.24.1/src/mesh/test/flame/flame-regression-test-2-1.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mesh/test/flame/flame-regression-test-2-1.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -2,81 +2,81 @@
 
        t$  Z   Z                      @@               
 
-       l%        Ԁ              B&  Z   Z   <                            @@                    
+       l%        Ԁ              9&  Z   Z   <                            @@                    
      
-       R&        Ԁ              &  n   n   <                            @@              E  0    @  
+       I&        Ԁ              &  n   n   <                            @@              E  0    @  
 
- 	                              (  n   n   <                            @@              E  0    @  
+ 	                              (  n   n   <                            @@              E  0    @  
 
- 	                              )        Ԁ              *  n   n   <                            @@             E  0    @  
+ 	                              )        Ԁ              *  n   n   <                            @@             E  0    @  
 
- 	                              U,  >   >                     @@                ,  >   >                     @@                O  Z   Z                      @@               
+ 	                              C,  >   >                     @@                n,  >   >                     @@                O  Z   Z                      @@               
 
-       8O  Z   Z   <                           @@                     
+       /O  Z   Z   <                           @@                     
      
-       P        Ԁ              ]P  Z   Z                      @@               
+       O        Ԁ              TP  Z   Z                      @@               
 
-       Q  Z   Z   <                           @@                    
+       Q  Z   Z   <                           @@                    
      
-       AS        Ԁ              <T  n   n   <                           @@             E  0    @  
+       &S        Ԁ              T  n   n   <                           @@             E  0    @  
 
- 	                              LT        Ԁ               n   n   <                            @@              E  0   @  
+ 	                              (T        Ԁ               n   n   <                            @@              E  0    @  
 
- 	                                     Ԁ              ` n   n   <                            @@             E  0   @  
+ 	                                     Ԁ              ` n   n   <                            @@             E  0    @  
 
- 	                                     Ԁ               n   n   <                            @@             E  0   @  
+ 	                                     Ԁ               n   n   <                            @@             E  0    @  
 
- 	                                     Ԁ              @ n   n   <                0           @@              E  0   @  
+ 	                                     Ԁ              @ n   n   <                0           @@              E  0    @  
 
- 	                              )       Ԁ                n   n   <                0           @@             E  0   @  
+ 	                              )       Ԁ                n   n   <                0           @@             E  0    @  
 
- 	                              P       Ԁ              ' n   n   <                0           @@             E  0   @  
+ 	                              P       Ԁ              ' n   n   <                0           @@             E  0    @  
 
- 	                              7       Ԁ               n   n   <                @           @@              E  0   @  
+ 	                              7       Ԁ               n   n   <                @           @@              E  0    @  
 
- 	                              ɔ       Ԁ               n   n   <                @           @@             E  0   @  
+ 	                              ɔ       Ԁ               n   n   <                @           @@             E  0    @  
 
- 	                                     Ԁ              ! n   n   <                @           @@             E  0   @  
+ 	                                     Ԁ               n   n   <                @           @@             E  0    @  
 
- 	                              1       Ԁ               n   n   <                P           @@              E  0   @  
+ 	                              (       Ԁ               n   n   <                P           @@              E  0    @  
 
- 	                              i       Ԁ              @ n   n   <                P           @@             E  0   @  
+ 	                              i       Ԁ              @ n   n   <                P           @@             E  0    @  
 
- 	                              B       Ԁ                n   n   <                P           @@             E  0   @  
+ 	                              B       Ԁ                n   n   <                P           @@             E  0    @  
 
- 	                              )        Ԁ                n   n               0           @@              E  0   @  
+ 	                              )        Ԁ                n   n               0           @@              E  0    @  
 
- 	                               n   n               0           @@             E  0   @  
+ 	                               n   n               0           @@             E  0    @  
 
- 	                              O       Ԁ              I >   >          @           @@  	              t >   >          @           @@  	               n   n   <                `           @@  
-           E  0   @  
+ 	                              O       Ԁ              7 >   >          @           @@  	              b >   >          @           @@  	              | n   n   <                `           @@  
+           E  0    @  
 
- 	                                     Ԁ              '	 n   n   <                `           @@   	           E  0   @  
+ 	                                     Ԁ              '	 n   n   <                `           @@   	           E  0    @  
 
- 	                              (	       Ԁ              )	 n   n   <                `           @@  	           E  0   @  
+ 	                              (	       Ԁ              )	 n   n   <                `           @@  	           E  0    @  
 
- 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0   @  
+ 	                              *	       Ԁ              +	 n   n   <                p           @@             E  0    @  
 
- 	                              +	       Ԁ              `
+ 	                              +	       Ԁ              `
  n   n   <                p           @@   
-           E  0   @  
+           E  0    @  
 
  	                              I
        Ԁ               
  n   n   <                p           @@  
-           E  0   @  
+           E  0    @  
 
  	                              p
-       Ԁ              P
- n   n   <                           @@             E  0   @  
+       Ԁ              G
+ n   n   <                           @@             E  0    @  
 
- 	                              `
-       Ԁ           	    5 n   n   <                           @@              E  0   @  
+ 	                              W
+       Ԁ           	    5 n   n   <                           @@              E  0    @  
 
- 	                           	   =6 n   n   <                           @@              E  0   @  
+ 	                           	   =6 n   n   <                           @@              E  0    @  
 
- 	                           	   &7       Ԁ           	   7 n   n   <                           @@             E  0   @  
+ 	                           	   &7       Ԁ           	   7 n   n   <                           @@             E  0    @  
 
- 	                           	   9 n   n   <                           @@             E  0   @  
+ 	                           	   9 n   n   <                           @@             E  0    @  
 
  	                           
\ No newline at end of file
diff -Naur ns-3.24.1/src/mobility/bindings/callbacks_list.py ns-3.25/src/mobility/bindings/callbacks_list.py
--- ns-3.24.1/src/mobility/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mobility/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/mobility/bindings/modulegen__gcc_ILP32.py ns-3.25/src/mobility/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/mobility/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mobility/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -126,8 +126,12 @@
     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::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::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]
@@ -212,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]
@@ -224,6 +232,8 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## 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> >'])
     ## random-direction-2d-mobility-model.h (module 'mobility'): ns3::RandomDirection2dMobilityModel [class]
     module.add_class('RandomDirection2dMobilityModel', parent=root_module['ns3::MobilityModel'])
     ## random-walk-2d-mobility-model.h (module 'mobility'): ns3::RandomWalk2dMobilityModel [class]
@@ -391,7 +401,9 @@
     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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    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'])
@@ -430,12 +442,15 @@
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     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_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_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RandomDirection2dMobilityModel_methods(root_module, root_module['ns3::RandomDirection2dMobilityModel'])
     register_Ns3RandomWalk2dMobilityModel_methods(root_module, root_module['ns3::RandomWalk2dMobilityModel'])
     register_Ns3RandomWaypointMobilityModel_methods(root_module, root_module['ns3::RandomWaypointMobilityModel'])
@@ -828,6 +843,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', 
@@ -843,6 +863,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', 
@@ -1019,7 +1044,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', 
@@ -2246,6 +2271,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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2258,6 +2295,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([])
@@ -3533,7 +3582,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')], 
@@ -3660,6 +3709,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')])
@@ -3695,6 +3830,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', 
@@ -3884,6 +4024,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_Ns3RandomDirection2dMobilityModel_methods(root_module, cls):
     ## random-direction-2d-mobility-model.h (module 'mobility'): ns3::RandomDirection2dMobilityModel::RandomDirection2dMobilityModel(ns3::RandomDirection2dMobilityModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RandomDirection2dMobilityModel const &', 'arg0')])
diff -Naur ns-3.24.1/src/mobility/bindings/modulegen__gcc_LP64.py ns-3.25/src/mobility/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/mobility/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mobility/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -126,8 +126,12 @@
     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::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::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]
@@ -212,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]
@@ -224,6 +232,8 @@
     module.add_class('OutputStreamWrapper', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
     ## 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> >'])
     ## random-direction-2d-mobility-model.h (module 'mobility'): ns3::RandomDirection2dMobilityModel [class]
     module.add_class('RandomDirection2dMobilityModel', parent=root_module['ns3::MobilityModel'])
     ## random-walk-2d-mobility-model.h (module 'mobility'): ns3::RandomWalk2dMobilityModel [class]
@@ -391,7 +401,9 @@
     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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >'])
+    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'])
@@ -430,12 +442,15 @@
     register_Ns3LogNormalRandomVariable_methods(root_module, root_module['ns3::LogNormalRandomVariable'])
     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_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_Ns3OutputStreamWrapper_methods(root_module, root_module['ns3::OutputStreamWrapper'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RandomDirection2dMobilityModel_methods(root_module, root_module['ns3::RandomDirection2dMobilityModel'])
     register_Ns3RandomWalk2dMobilityModel_methods(root_module, root_module['ns3::RandomWalk2dMobilityModel'])
     register_Ns3RandomWaypointMobilityModel_methods(root_module, root_module['ns3::RandomWaypointMobilityModel'])
@@ -828,6 +843,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', 
@@ -843,6 +863,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', 
@@ -1019,7 +1044,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', 
@@ -2246,6 +2271,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__Ns3OutputStreamWrapper_Ns3Empty_Ns3DefaultDeleter__lt__ns3OutputStreamWrapper__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::OutputStreamWrapper, ns3::empty, ns3::DefaultDeleter<ns3::OutputStreamWrapper> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -2258,6 +2295,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([])
@@ -3533,7 +3582,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')], 
@@ -3660,6 +3709,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')])
@@ -3695,6 +3830,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', 
@@ -3884,6 +4024,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_Ns3RandomDirection2dMobilityModel_methods(root_module, cls):
     ## random-direction-2d-mobility-model.h (module 'mobility'): ns3::RandomDirection2dMobilityModel::RandomDirection2dMobilityModel(ns3::RandomDirection2dMobilityModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::RandomDirection2dMobilityModel const &', 'arg0')])
diff -Naur ns-3.24.1/src/mpi/bindings/modulegen__gcc_ILP32.py ns-3.25/src/mpi/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/mpi/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -896,6 +896,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', 
@@ -911,6 +916,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', 
@@ -1087,7 +1097,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', 
diff -Naur ns-3.24.1/src/mpi/bindings/modulegen__gcc_LP64.py ns-3.25/src/mpi/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/mpi/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -896,6 +896,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', 
@@ -911,6 +916,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', 
@@ -1087,7 +1097,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', 
diff -Naur ns-3.24.1/src/mpi/examples/nms-p2p-nix-distributed.cc ns-3.25/src/mpi/examples/nms-p2p-nix-distributed.cc
--- ns-3.24.1/src/mpi/examples/nms-p2p-nix-distributed.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/examples/nms-p2p-nix-distributed.cc	2016-03-23 21:36:53.000000000 -0700
@@ -46,8 +46,6 @@
 #include "ns3/packet-sink-helper.h"
 #include "ns3/point-to-point-helper.h"
 #include "ns3/mpi-interface.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
 
 using namespace ns3;
@@ -148,16 +146,10 @@
   p2p_100mb1ms.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
   p2p_100mb1ms.SetChannelAttribute ("Delay", StringValue ("1ms"));
 
-  Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper list;
-  list.Add (staticRouting, 0);
-  list.Add (nixRouting, 10);
-
   if (nix)
     {
-      stack.SetRoutingHelper (list); // has effect on the next Install ()
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting); // has effect on the next Install ()
     }
 
   // Create Campus Networks
diff -Naur ns-3.24.1/src/mpi/examples/simple-distributed.cc ns-3.25/src/mpi/examples/simple-distributed.cc
--- ns-3.24.1/src/mpi/examples/simple-distributed.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/examples/simple-distributed.cc	2016-03-23 21:36:53.000000000 -0700
@@ -45,8 +45,6 @@
 #include "ns3/network-module.h"
 #include "ns3/mpi-interface.h"
 #include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/point-to-point-helper.h"
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
@@ -161,16 +159,10 @@
     }
 
   InternetStackHelper stack;
-  Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper list;
-  list.Add (staticRouting, 0);
-  list.Add (nixRouting, 10);
-
   if (nix)
     {
-      stack.SetRoutingHelper (list); // has effect on the next Install ()
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting); // has effect on the next Install ()
     }
 
   stack.InstallAll ();
diff -Naur ns-3.24.1/src/mpi/examples/simple-distributed-empty-node.cc ns-3.25/src/mpi/examples/simple-distributed-empty-node.cc
--- ns-3.24.1/src/mpi/examples/simple-distributed-empty-node.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/examples/simple-distributed-empty-node.cc	2016-03-23 21:36:53.000000000 -0700
@@ -60,8 +60,6 @@
 #include "ns3/network-module.h"
 #include "ns3/mpi-interface.h"
 #include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/point-to-point-helper.h"
 #include "ns3/internet-stack-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
@@ -185,16 +183,10 @@
     }
 
   InternetStackHelper stack;
-  Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper list;
-  list.Add (staticRouting, 0);
-  list.Add (nixRouting, 10);
-
   if (nix)
     {
-      stack.SetRoutingHelper (list); // has effect on the next Install ()
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting); // has effect on the next Install ()
     }
 
   stack.InstallAll ();
diff -Naur ns-3.24.1/src/mpi/examples/third-distributed.cc ns-3.25/src/mpi/examples/third-distributed.cc
--- ns-3.24.1/src/mpi/examples/third-distributed.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/mpi/examples/third-distributed.cc	2016-03-23 21:36:53.000000000 -0700
@@ -150,11 +150,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/src/netanim/doc/animation.rst ns-3.25/src/netanim/doc/animation.rst
--- ns-3.24.1/src/netanim/doc/animation.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/netanim/doc/animation.rst	2016-03-23 21:36:53.000000000 -0700
@@ -88,7 +88,7 @@
 ================
 Prerequisites
 ~~~~~~~~~~~~~
-Qt4 (4.7 and over) is required to build NetAnim. This can be obtained using the following ways:
+Qt4 (4.8 and over) is required to build NetAnim. This can be obtained using the following ways:
 
 For Debian/Ubuntu Linux distributions:
 
@@ -235,7 +235,7 @@
   anim.UpdateNodeCounter (89, 7, 3.4);
 
 With the above statement, AnimationInterface sets the counter with Id == 89, associated with Node 7 with the value 3.4.
-The counter with Id 89 is obtained using AnimationInterface::AddNodeCounter. An example usage for this is in src/netanim/examples/resources_demo.cc.
+The counter with Id 89 is obtained using AnimationInterface::AddNodeCounter. An example usage for this is in src/netanim/examples/resource-counters.cc.
 
 
 Step 2: Loading the XML in NetAnim
diff -Naur ns-3.24.1/src/netanim/examples/colors-link-description.cc ns-3.25/src/netanim/examples/colors-link-description.cc
--- ns-3.24.1/src/netanim/examples/colors-link-description.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/netanim/examples/colors-link-description.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,161 @@
+/* -*- 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
+ *
+ * Author: John Abraham <john.abraham.in@gmail.com>
+ */
+
+#include <iostream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/netanim-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-layout-module.h"
+
+using namespace ns3;
+
+AnimationInterface * pAnim = 0;
+
+struct rgb {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+};
+
+struct rgb colors [] = {
+                        { 255, 0, 0 }, // Red
+                        { 0, 255, 0 }, // Blue
+                        { 0, 0, 255 }  // Green
+                        };
+
+void modify ()
+{
+  std::ostringstream oss;
+  oss << "Update:" << Simulator::Now ().GetSeconds ();
+  pAnim->UpdateLinkDescription (0, 1, oss.str ());
+  pAnim->UpdateLinkDescription (0, 2, oss.str ());
+  pAnim->UpdateLinkDescription (0, 3, oss.str ());
+  pAnim->UpdateLinkDescription (0, 4, oss.str ());
+  pAnim->UpdateLinkDescription (0, 5, oss.str ());
+  pAnim->UpdateLinkDescription (0, 6, oss.str ());
+  pAnim->UpdateLinkDescription (1, 7, oss.str ());
+  pAnim->UpdateLinkDescription (1, 8, oss.str ());
+  pAnim->UpdateLinkDescription (1, 9, oss.str ());
+  pAnim->UpdateLinkDescription (1, 10, oss.str ());
+  pAnim->UpdateLinkDescription (1, 11, oss.str ());
+  
+  // Every update change the node description for node 2
+  std::ostringstream node0Oss;
+  node0Oss << "-----Node:" << Simulator::Now ().GetSeconds ();
+  pAnim->UpdateNodeDescription (2, node0Oss.str ());
+
+  // Every update change the color for node 4
+  static uint32_t index = 0;
+  index++;
+  if (index == 3) 
+    index = 0;
+  struct rgb color = colors[index];
+  for (uint32_t nodeId = 4; nodeId < 12; ++nodeId)
+    pAnim->UpdateNodeColor (nodeId, color.r, color.g, color.b); 
+
+
+  if (Simulator::Now ().GetSeconds () < 10) // This is important or the simulation
+    // will run endlessly
+    Simulator::Schedule (Seconds (1), modify);
+
+}
+
+int main (int argc, char *argv[])
+{
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("500kb/s"));
+
+  uint32_t    nLeftLeaf = 5;
+  uint32_t    nRightLeaf = 5;
+  uint32_t    nLeaf = 0; // If non-zero, number of both left and right
+  std::string animFile = "dynamic_linknode.xml" ;  // Name of file for animation output
+
+  CommandLine cmd;
+  cmd.AddValue ("nLeftLeaf", "Number of left side leaf nodes", nLeftLeaf);
+  cmd.AddValue ("nRightLeaf","Number of right side leaf nodes", nRightLeaf);
+  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
+  cmd.AddValue ("animFile",  "File Name for Animation Output", animFile);
+
+  cmd.Parse (argc,argv);
+  if (nLeaf > 0)
+    {
+      nLeftLeaf = nLeaf;
+      nRightLeaf = nLeaf;
+    }
+
+  // Create the point-to-point link helpers
+  PointToPointHelper pointToPointRouter;
+  pointToPointRouter.SetDeviceAttribute  ("DataRate", StringValue ("10Mbps"));
+  pointToPointRouter.SetChannelAttribute ("Delay", StringValue ("1ms"));
+  PointToPointHelper pointToPointLeaf;
+  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
+  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
+
+  PointToPointDumbbellHelper d (nLeftLeaf, pointToPointLeaf,
+                                nRightLeaf, pointToPointLeaf,
+                                pointToPointRouter);
+
+  // Install Stack
+  InternetStackHelper stack;
+  d.InstallStack (stack);
+
+  // Assign IP Addresses
+  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
+
+  d.BoundingBox (1, 1, 100, 100);
+  // Install on/off app on all right side nodes
+  OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
+  clientHelper.SetAttribute 
+    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  clientHelper.SetAttribute 
+    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  ApplicationContainer clientApps;
+
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      // Create an on/off app sending packets to the same leaf right side
+      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), 1000));
+      clientHelper.SetAttribute ("Remote", remoteAddress);
+      clientApps.Add (clientHelper.Install (d.GetRight (i)));
+    }
+
+  clientApps.Start (Seconds (0.0));
+  clientApps.Stop (Seconds (10.0));
+
+  // Set the bounding box for animation
+
+
+  // Create the animation object and configure for specified output
+  pAnim = new AnimationInterface (animFile);
+  Simulator::Schedule (Seconds (1), modify);
+  
+  // Set up the acutal simulation
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Simulator::Run ();
+  std::cout << "Animation Trace file created:" << animFile.c_str ()<< std::endl;
+  Simulator::Destroy ();
+  delete pAnim;
+  return 0;
+}
diff -Naur ns-3.24.1/src/netanim/examples/dynamic_linknode.cc ns-3.25/src/netanim/examples/dynamic_linknode.cc
--- ns-3.24.1/src/netanim/examples/dynamic_linknode.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/examples/dynamic_linknode.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,161 +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
- *
- * Author: John Abraham <john.abraham.in@gmail.com>
- */
-
-#include <iostream>
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/netanim-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/point-to-point-layout-module.h"
-
-using namespace ns3;
-
-AnimationInterface * pAnim = 0;
-
-struct rgb {
-  uint8_t r;
-  uint8_t g;
-  uint8_t b;
-};
-
-struct rgb colors [] = {
-                        { 255, 0, 0 }, // Red
-                        { 0, 255, 0 }, // Blue
-                        { 0, 0, 255 }  // Green
-                        };
-
-void modify ()
-{
-  std::ostringstream oss;
-  oss << "Update:" << Simulator::Now ().GetSeconds ();
-  pAnim->UpdateLinkDescription (0, 1, oss.str ());
-  pAnim->UpdateLinkDescription (0, 2, oss.str ());
-  pAnim->UpdateLinkDescription (0, 3, oss.str ());
-  pAnim->UpdateLinkDescription (0, 4, oss.str ());
-  pAnim->UpdateLinkDescription (0, 5, oss.str ());
-  pAnim->UpdateLinkDescription (0, 6, oss.str ());
-  pAnim->UpdateLinkDescription (1, 7, oss.str ());
-  pAnim->UpdateLinkDescription (1, 8, oss.str ());
-  pAnim->UpdateLinkDescription (1, 9, oss.str ());
-  pAnim->UpdateLinkDescription (1, 10, oss.str ());
-  pAnim->UpdateLinkDescription (1, 11, oss.str ());
-  
-  // Every update change the node description for node 2
-  std::ostringstream node0Oss;
-  node0Oss << "-----Node:" << Simulator::Now ().GetSeconds ();
-  pAnim->UpdateNodeDescription (2, node0Oss.str ());
-
-  // Every update change the color for node 4
-  static uint32_t index = 0;
-  index++;
-  if (index == 3) 
-    index = 0;
-  struct rgb color = colors[index];
-  for (uint32_t nodeId = 4; nodeId < 12; ++nodeId)
-    pAnim->UpdateNodeColor (nodeId, color.r, color.g, color.b); 
-
-
-  if (Simulator::Now ().GetSeconds () < 10) // This is important or the simulation
-    // will run endlessly
-    Simulator::Schedule (Seconds (1), modify);
-
-}
-
-int main (int argc, char *argv[])
-{
-  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
-  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("500kb/s"));
-
-  uint32_t    nLeftLeaf = 5;
-  uint32_t    nRightLeaf = 5;
-  uint32_t    nLeaf = 0; // If non-zero, number of both left and right
-  std::string animFile = "dynamic_linknode.xml" ;  // Name of file for animation output
-
-  CommandLine cmd;
-  cmd.AddValue ("nLeftLeaf", "Number of left side leaf nodes", nLeftLeaf);
-  cmd.AddValue ("nRightLeaf","Number of right side leaf nodes", nRightLeaf);
-  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
-  cmd.AddValue ("animFile",  "File Name for Animation Output", animFile);
-
-  cmd.Parse (argc,argv);
-  if (nLeaf > 0)
-    {
-      nLeftLeaf = nLeaf;
-      nRightLeaf = nLeaf;
-    }
-
-  // Create the point-to-point link helpers
-  PointToPointHelper pointToPointRouter;
-  pointToPointRouter.SetDeviceAttribute  ("DataRate", StringValue ("10Mbps"));
-  pointToPointRouter.SetChannelAttribute ("Delay", StringValue ("1ms"));
-  PointToPointHelper pointToPointLeaf;
-  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
-  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
-
-  PointToPointDumbbellHelper d (nLeftLeaf, pointToPointLeaf,
-                                nRightLeaf, pointToPointLeaf,
-                                pointToPointRouter);
-
-  // Install Stack
-  InternetStackHelper stack;
-  d.InstallStack (stack);
-
-  // Assign IP Addresses
-  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
-
-  d.BoundingBox (1, 1, 100, 100);
-  // Install on/off app on all right side nodes
-  OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
-  clientHelper.SetAttribute 
-    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  clientHelper.SetAttribute 
-    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  ApplicationContainer clientApps;
-
-  for (uint32_t i = 0; i < d.RightCount (); ++i)
-    {
-      // Create an on/off app sending packets to the same leaf right side
-      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), 1000));
-      clientHelper.SetAttribute ("Remote", remoteAddress);
-      clientApps.Add (clientHelper.Install (d.GetRight (i)));
-    }
-
-  clientApps.Start (Seconds (0.0));
-  clientApps.Stop (Seconds (10.0));
-
-  // Set the bounding box for animation
-
-
-  // Create the animation object and configure for specified output
-  pAnim = new AnimationInterface (animFile);
-  Simulator::Schedule (Seconds (1), modify);
-  
-  // Set up the acutal simulation
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  Simulator::Run ();
-  std::cout << "Animation Trace file created:" << animFile.c_str ()<< std::endl;
-  Simulator::Destroy ();
-  delete pAnim;
-  return 0;
-}
diff -Naur ns-3.24.1/src/netanim/examples/resources-counters.cc ns-3.25/src/netanim/examples/resources-counters.cc
--- ns-3.24.1/src/netanim/examples/resources-counters.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/netanim/examples/resources-counters.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,199 @@
+/* -*- 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
+ *
+ * Author: John Abraham <john.abraham.in@gmail.com>
+ */
+
+#include <iostream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/netanim-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/point-to-point-layout-module.h"
+
+using namespace ns3;
+
+AnimationInterface * pAnim = 0;
+
+struct rgb {
+  uint8_t r;
+  uint8_t g;
+  uint8_t b;
+};
+
+struct rgb colors [] = {
+                        { 255, 0, 0 }, // Red
+                        { 0, 255, 0 }, // Blue
+                        { 0, 0, 255 }  // Green
+                        };
+
+uint32_t resourceId1;
+uint32_t resourceId2;
+uint32_t nodeCounterIdUint32;
+uint32_t nodeCounterIdDouble1;
+uint32_t nodeCounterIdDouble2;
+
+void modify ()
+{
+  std::ostringstream oss;
+  oss << "Update:" << Simulator::Now ().GetSeconds ();
+  pAnim->UpdateLinkDescription (0, 1, oss.str ());
+  pAnim->UpdateLinkDescription (0, 2, oss.str ());
+  pAnim->UpdateLinkDescription (0, 3, oss.str ());
+  pAnim->UpdateLinkDescription (0, 4, oss.str ());
+  pAnim->UpdateLinkDescription (0, 5, oss.str ());
+  pAnim->UpdateLinkDescription (0, 6, oss.str ());
+  pAnim->UpdateLinkDescription (1, 7, oss.str ());
+  pAnim->UpdateLinkDescription (1, 8, oss.str ());
+  pAnim->UpdateLinkDescription (1, 9, oss.str ());
+  pAnim->UpdateLinkDescription (1, 10, oss.str ());
+  pAnim->UpdateLinkDescription (1, 11, oss.str ());
+  
+  // Every update change the node description for node 2
+  std::ostringstream node0Oss;
+  node0Oss << "-----Node:" << Simulator::Now ().GetSeconds ();
+  pAnim->UpdateNodeDescription (2, node0Oss.str ());
+  static double size = 2;
+  static uint32_t currentResourceId = resourceId1;
+  pAnim->UpdateNodeSize (2, size, size);
+  pAnim->UpdateNodeImage (3, currentResourceId);
+  size *= 1.1;
+  if (size > 20)
+    size = 1;
+  pAnim->UpdateNodeSize (3, 10, 10);
+  if (currentResourceId == resourceId1)
+    currentResourceId = resourceId2;
+  else
+    currentResourceId = resourceId1;    
+
+  // Every update change the color for node 4
+  static uint32_t index = 0;
+  index++;
+  if (index == 3) 
+    index = 0;
+  struct rgb color = colors[index];
+  for (uint32_t nodeId = 4; nodeId < 12; ++nodeId)
+    pAnim->UpdateNodeColor (nodeId, color.r, color.g, color.b); 
+
+  // Update Node Counter for node 0 and node 5, use some random number between 0 to 1000 for value
+  Ptr <UniformRandomVariable> rv = CreateObject<UniformRandomVariable> ();
+  pAnim->UpdateNodeCounter (nodeCounterIdUint32, 0, rv->GetValue (0, 1000));
+  pAnim->UpdateNodeCounter (nodeCounterIdDouble1, 0, rv->GetValue (100.0, 200.0));
+  pAnim->UpdateNodeCounter (nodeCounterIdDouble2, 0, rv->GetValue (300.0, 400.0));
+  pAnim->UpdateNodeCounter (nodeCounterIdUint32, 5, rv->GetValue (0, 1000));
+  pAnim->UpdateNodeCounter (nodeCounterIdDouble1, 5, rv->GetValue (100.0, 200.0));
+  pAnim->UpdateNodeCounter (nodeCounterIdDouble2, 5, rv->GetValue (300.0, 400.0));
+
+  if (Simulator::Now ().GetSeconds () < 10) // This is important or the simulation
+    // will run endlessly
+    Simulator::Schedule (Seconds (0.1), modify);
+
+}
+
+int main (int argc, char *argv[])
+{
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("500kb/s"));
+
+  uint32_t    nLeftLeaf = 5;
+  uint32_t    nRightLeaf = 5;
+  uint32_t    nLeaf = 0; // If non-zero, number of both left and right
+  std::string animFile = "resources_demo.xml" ;  // Name of file for animation output
+
+  CommandLine cmd;
+  cmd.AddValue ("nLeftLeaf", "Number of left side leaf nodes", nLeftLeaf);
+  cmd.AddValue ("nRightLeaf","Number of right side leaf nodes", nRightLeaf);
+  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
+  cmd.AddValue ("animFile",  "File Name for Animation Output", animFile);
+
+  cmd.Parse (argc,argv);
+  if (nLeaf > 0)
+    {
+      nLeftLeaf = nLeaf;
+      nRightLeaf = nLeaf;
+    }
+
+  // Create the point-to-point link helpers
+  PointToPointHelper pointToPointRouter;
+  pointToPointRouter.SetDeviceAttribute  ("DataRate", StringValue ("10Mbps"));
+  pointToPointRouter.SetChannelAttribute ("Delay", StringValue ("1ms"));
+  PointToPointHelper pointToPointLeaf;
+  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
+  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
+
+  PointToPointDumbbellHelper d (nLeftLeaf, pointToPointLeaf,
+                                nRightLeaf, pointToPointLeaf,
+                                pointToPointRouter);
+
+  // Install Stack
+  InternetStackHelper stack;
+  d.InstallStack (stack);
+
+  // Assign IP Addresses
+  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
+
+  d.BoundingBox (1, 1, 100, 100);
+  // Install on/off app on all right side nodes
+  OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
+  clientHelper.SetAttribute 
+    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  clientHelper.SetAttribute 
+    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  ApplicationContainer clientApps;
+
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      // Create an on/off app sending packets to the same leaf right side
+      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), 1000));
+      clientHelper.SetAttribute ("Remote", remoteAddress);
+      clientApps.Add (clientHelper.Install (d.GetRight (i)));
+    }
+
+  clientApps.Start (Seconds (0.0));
+  clientApps.Stop (Seconds (5.0));
+
+  // Set the bounding box for animation
+
+
+  // Create the animation object and configure for specified output
+  pAnim = new AnimationInterface (animFile); 
+  // Provide the absolute path to the resource
+  resourceId1 = pAnim->AddResource ("/Users/john/ns3/netanim-3.105/ns-3-logo1.png");
+  resourceId2 = pAnim->AddResource ("/Users/john/ns3/netanim-3.105/ns-3-logo2.png");
+  pAnim->SetBackgroundImage ("/Users/john/ns3/netanim-3.105/ns-3-background.png", 0, 0, 0.2, 0.2, 0.1);
+
+
+  // Add a node counter
+  nodeCounterIdUint32 = pAnim->AddNodeCounter ("Uint32 Counter", AnimationInterface::UINT32_COUNTER);
+  nodeCounterIdDouble1 = pAnim->AddNodeCounter ("Double Counter 1", AnimationInterface::DOUBLE_COUNTER);
+  nodeCounterIdDouble2 = pAnim->AddNodeCounter ("Double Counter 2", AnimationInterface::DOUBLE_COUNTER);
+
+  Simulator::Schedule (Seconds (0.1), modify);
+  
+  // Set up the acutal simulation
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Simulator::Run ();
+  std::cout << "Animation Trace file created:" << animFile.c_str ()<< std::endl;
+  Simulator::Destroy ();
+  delete pAnim;
+  return 0;
+}
+
diff -Naur ns-3.24.1/src/netanim/examples/resources_demo.cc ns-3.25/src/netanim/examples/resources_demo.cc
--- ns-3.24.1/src/netanim/examples/resources_demo.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/examples/resources_demo.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,199 +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
- *
- * Author: John Abraham <john.abraham.in@gmail.com>
- */
-
-#include <iostream>
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/netanim-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/point-to-point-layout-module.h"
-
-using namespace ns3;
-
-AnimationInterface * pAnim = 0;
-
-struct rgb {
-  uint8_t r;
-  uint8_t g;
-  uint8_t b;
-};
-
-struct rgb colors [] = {
-                        { 255, 0, 0 }, // Red
-                        { 0, 255, 0 }, // Blue
-                        { 0, 0, 255 }  // Green
-                        };
-
-uint32_t resourceId1;
-uint32_t resourceId2;
-uint32_t nodeCounterIdUint32;
-uint32_t nodeCounterIdDouble1;
-uint32_t nodeCounterIdDouble2;
-
-void modify ()
-{
-  std::ostringstream oss;
-  oss << "Update:" << Simulator::Now ().GetSeconds ();
-  pAnim->UpdateLinkDescription (0, 1, oss.str ());
-  pAnim->UpdateLinkDescription (0, 2, oss.str ());
-  pAnim->UpdateLinkDescription (0, 3, oss.str ());
-  pAnim->UpdateLinkDescription (0, 4, oss.str ());
-  pAnim->UpdateLinkDescription (0, 5, oss.str ());
-  pAnim->UpdateLinkDescription (0, 6, oss.str ());
-  pAnim->UpdateLinkDescription (1, 7, oss.str ());
-  pAnim->UpdateLinkDescription (1, 8, oss.str ());
-  pAnim->UpdateLinkDescription (1, 9, oss.str ());
-  pAnim->UpdateLinkDescription (1, 10, oss.str ());
-  pAnim->UpdateLinkDescription (1, 11, oss.str ());
-  
-  // Every update change the node description for node 2
-  std::ostringstream node0Oss;
-  node0Oss << "-----Node:" << Simulator::Now ().GetSeconds ();
-  pAnim->UpdateNodeDescription (2, node0Oss.str ());
-  static double size = 2;
-  static uint32_t currentResourceId = resourceId1;
-  pAnim->UpdateNodeSize (2, size, size);
-  pAnim->UpdateNodeImage (3, currentResourceId);
-  size *= 1.1;
-  if (size > 20)
-    size = 1;
-  pAnim->UpdateNodeSize (3, 10, 10);
-  if (currentResourceId == resourceId1)
-    currentResourceId = resourceId2;
-  else
-    currentResourceId = resourceId1;    
-
-  // Every update change the color for node 4
-  static uint32_t index = 0;
-  index++;
-  if (index == 3) 
-    index = 0;
-  struct rgb color = colors[index];
-  for (uint32_t nodeId = 4; nodeId < 12; ++nodeId)
-    pAnim->UpdateNodeColor (nodeId, color.r, color.g, color.b); 
-
-  // Update Node Counter for node 0 and node 5, use some random number between 0 to 1000 for value
-  Ptr <UniformRandomVariable> rv = CreateObject<UniformRandomVariable> ();
-  pAnim->UpdateNodeCounter (nodeCounterIdUint32, 0, rv->GetValue (0, 1000));
-  pAnim->UpdateNodeCounter (nodeCounterIdDouble1, 0, rv->GetValue (100.0, 200.0));
-  pAnim->UpdateNodeCounter (nodeCounterIdDouble2, 0, rv->GetValue (300.0, 400.0));
-  pAnim->UpdateNodeCounter (nodeCounterIdUint32, 5, rv->GetValue (0, 1000));
-  pAnim->UpdateNodeCounter (nodeCounterIdDouble1, 5, rv->GetValue (100.0, 200.0));
-  pAnim->UpdateNodeCounter (nodeCounterIdDouble2, 5, rv->GetValue (300.0, 400.0));
-
-  if (Simulator::Now ().GetSeconds () < 10) // This is important or the simulation
-    // will run endlessly
-    Simulator::Schedule (Seconds (0.1), modify);
-
-}
-
-int main (int argc, char *argv[])
-{
-  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (512));
-  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("500kb/s"));
-
-  uint32_t    nLeftLeaf = 5;
-  uint32_t    nRightLeaf = 5;
-  uint32_t    nLeaf = 0; // If non-zero, number of both left and right
-  std::string animFile = "resources_demo.xml" ;  // Name of file for animation output
-
-  CommandLine cmd;
-  cmd.AddValue ("nLeftLeaf", "Number of left side leaf nodes", nLeftLeaf);
-  cmd.AddValue ("nRightLeaf","Number of right side leaf nodes", nRightLeaf);
-  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
-  cmd.AddValue ("animFile",  "File Name for Animation Output", animFile);
-
-  cmd.Parse (argc,argv);
-  if (nLeaf > 0)
-    {
-      nLeftLeaf = nLeaf;
-      nRightLeaf = nLeaf;
-    }
-
-  // Create the point-to-point link helpers
-  PointToPointHelper pointToPointRouter;
-  pointToPointRouter.SetDeviceAttribute  ("DataRate", StringValue ("10Mbps"));
-  pointToPointRouter.SetChannelAttribute ("Delay", StringValue ("1ms"));
-  PointToPointHelper pointToPointLeaf;
-  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
-  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
-
-  PointToPointDumbbellHelper d (nLeftLeaf, pointToPointLeaf,
-                                nRightLeaf, pointToPointLeaf,
-                                pointToPointRouter);
-
-  // Install Stack
-  InternetStackHelper stack;
-  d.InstallStack (stack);
-
-  // Assign IP Addresses
-  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
-
-  d.BoundingBox (1, 1, 100, 100);
-  // Install on/off app on all right side nodes
-  OnOffHelper clientHelper ("ns3::UdpSocketFactory", Address ());
-  clientHelper.SetAttribute 
-    ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  clientHelper.SetAttribute 
-    ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  ApplicationContainer clientApps;
-
-  for (uint32_t i = 0; i < d.RightCount (); ++i)
-    {
-      // Create an on/off app sending packets to the same leaf right side
-      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), 1000));
-      clientHelper.SetAttribute ("Remote", remoteAddress);
-      clientApps.Add (clientHelper.Install (d.GetRight (i)));
-    }
-
-  clientApps.Start (Seconds (0.0));
-  clientApps.Stop (Seconds (5.0));
-
-  // Set the bounding box for animation
-
-
-  // Create the animation object and configure for specified output
-  pAnim = new AnimationInterface (animFile); 
-  // Provide the absolute path to the resource
-  resourceId1 = pAnim->AddResource ("/Users/john/ns3/netanim-3.105/ns-3-logo1.png");
-  resourceId2 = pAnim->AddResource ("/Users/john/ns3/netanim-3.105/ns-3-logo2.png");
-  pAnim->SetBackgroundImage ("/Users/john/ns3/netanim-3.105/ns-3-background.png", 0, 0, 0.2, 0.2, 0.1);
-
-
-  // Add a node counter
-  nodeCounterIdUint32 = pAnim->AddNodeCounter ("Uint32 Counter", AnimationInterface::UINT32_COUNTER);
-  nodeCounterIdDouble1 = pAnim->AddNodeCounter ("Double Counter 1", AnimationInterface::DOUBLE_COUNTER);
-  nodeCounterIdDouble2 = pAnim->AddNodeCounter ("Double Counter 2", AnimationInterface::DOUBLE_COUNTER);
-
-  Simulator::Schedule (Seconds (0.1), modify);
-  
-  // Set up the acutal simulation
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  Simulator::Run ();
-  std::cout << "Animation Trace file created:" << animFile.c_str ()<< std::endl;
-  Simulator::Destroy ();
-  delete pAnim;
-  return 0;
-}
-
diff -Naur ns-3.24.1/src/netanim/examples/wireless-animation.cc ns-3.25/src/netanim/examples/wireless-animation.cc
--- ns-3.24.1/src/netanim/examples/wireless-animation.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/examples/wireless-animation.cc	2016-03-23 21:36:53.000000000 -0700
@@ -56,11 +56,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/src/netanim/examples/wscript ns-3.25/src/netanim/examples/wscript
--- ns-3.24.1/src/netanim/examples/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -21,10 +21,10 @@
                                  ['netanim', 'internet', 'mobility', 'applications', 'uan'])
     obj.source = 'uan-animation.cc'
 
-    obj = bld.create_ns3_program('dynamic_linknode',
+    obj = bld.create_ns3_program('colors-link-description',
                                  ['netanim', 'applications', 'point-to-point-layout'])
-    obj.source = 'dynamic_linknode.cc'
+    obj.source = 'colors-link-description.cc'
 
-    obj = bld.create_ns3_program('resources_demo',
+    obj = bld.create_ns3_program('resources-counters',
                                  ['netanim', 'applications', 'point-to-point-layout'])
-    obj.source = 'resources_demo.cc'
+    obj.source = 'resources-counters.cc'
diff -Naur ns-3.24.1/src/netanim/model/animation-interface.cc ns-3.25/src/netanim/model/animation-interface.cc
--- ns-3.24.1/src/netanim/model/animation-interface.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/model/animation-interface.cc	2016-03-23 21:36:53.000000000 -0700
@@ -398,8 +398,7 @@
 void 
 AnimationInterface::MobilityCourseChangeTrace (Ptr <const MobilityModel> mobility)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  CHECK_STARTED_INTIMEWINDOW;
   Ptr <Node> n = mobility->GetObject <Node> ();
   NS_ASSERT (n);
   Vector v ;
@@ -419,22 +418,23 @@
 AnimationInterface::NodeHasMoved (Ptr <Node> n, Vector newLocation)
 {
   Vector oldLocation = GetPosition (n);
+  bool moved = true;
   if ((ceil (oldLocation.x) == ceil (newLocation.x)) &&
     (ceil (oldLocation.y) == ceil (newLocation.y)))
     {
-      return false;
+      moved = false;
     }
   else
     {
-      return true;
+      moved = true;
     }
+  return moved;
 }
 
 void 
 AnimationInterface::MobilityAutoCheck ()
 {
-  if (!m_started || !IsInTimeWindow ())
-    return;
+  CHECK_STARTED_INTIMEWINDOW;
   std::vector <Ptr <Node> > MovedNodes = GetMovedNodes ();
   for (uint32_t i = 0; i < MovedNodes.size (); i++)
     {
@@ -488,7 +488,9 @@
 AnimationInterface::WriteN (const std::string& st, FILE * f)
 {
   if (!f)
-    return 0;
+    {
+      return 0;
+    }
   if (m_writeCallback)
     {
       m_writeCallback (st.c_str ());
@@ -500,7 +502,9 @@
 AnimationInterface::WriteN (const char* data, uint32_t count, FILE * f)
 { 
   if (!f)
-    return 0;
+    {
+      return 0;
+    }
   // Write count bytes to h from data
   uint32_t    nLeft   = count;
   const char* p       = data;
@@ -621,9 +625,7 @@
 void 
 AnimationInterface::RemainingEnergyTrace (std::string context, double previousEnergy, double currentEnergy)
 {
-  if (!m_started || !IsInTimeWindow ())
-    return;
-
+  CHECK_STARTED_INTIMEWINDOW;
   const Ptr <const Node> node = GetNodeFromContext (context);
   const uint32_t nodeId = node->GetId ();
 
@@ -741,8 +743,8 @@
                                      Time txTime, 
                                      Time rxTime)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   NS_ASSERT (tx);
   NS_ASSERT (rx);
   Time now = Simulator::Now ();
@@ -761,82 +763,85 @@
              m_enablePacketMetadata? GetPacketMetadata (p):"");
 }
 
-void 
-AnimationInterface::UanPhyGenTxTrace (std::string context, Ptr<const Packet> p)
+void
+AnimationInterface::GenericWirelessTxTrace (std::string context, Ptr<const Packet> p, ProtocolType protocolType)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
+
   ++gAnimUid;
-  NS_LOG_INFO ("Uan TxBeginTrace for packet:" << gAnimUid);
+  NS_LOG_INFO (ProtocolTypeToString (protocolType).c_str () << " GenericWirelessTxTrace for packet:" << gAnimUid);
   AddByteTag (gAnimUid, p);
-  UpdatePosition (n);
   AnimPacketInfo pktInfo (ndev, Simulator::Now ());
-  AddPendingPacket (AnimationInterface::UAN, gAnimUid, pktInfo);
-  OutputWirelessPacketTxInfo (p, m_pendingUanPackets[gAnimUid], gAnimUid);
+  AddPendingPacket (protocolType, gAnimUid, pktInfo);
+
+  Ptr<WifiNetDevice> netDevice = DynamicCast<WifiNetDevice> (ndev);
+  if (netDevice)
+    { 
+      Mac48Address nodeAddr = netDevice->GetMac ()->GetAddress ();
+      std::ostringstream oss; 
+      oss << nodeAddr;
+      Ptr <Node> n = netDevice->GetNode ();
+      NS_ASSERT (n);
+      m_macToNodeIdMap[oss.str ()] = n->GetId ();
+      NS_LOG_INFO ("Added Mac" << oss.str () << " node:" <<m_macToNodeIdMap[oss.str ()]);
+    }
+  AnimUidPacketInfoMap * pendingPackets =  ProtocolTypeToPendingPackets (protocolType); 
+  OutputWirelessPacketTxInfo (p, pendingPackets->at (gAnimUid), gAnimUid);
 }
 
-void 
-AnimationInterface::UanPhyGenRxTrace (std::string context, Ptr<const Packet> p)
+void
+AnimationInterface::GenericWirelessRxTrace (std::string context, Ptr<const Packet> p, ProtocolType protocolType)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
   uint64_t animUid = GetAnimUidFromPacket (p);
-  NS_LOG_INFO ("UanPhyGenRxTrace for packet:" << animUid);
-  if (!IsPacketPending (animUid, AnimationInterface::UAN))
+  NS_LOG_INFO (ProtocolTypeToString (protocolType).c_str () << " for packet:" << animUid);
+  if (!IsPacketPending (animUid, protocolType))
     {
-      NS_LOG_WARN ("UanPhyGenRxBeginTrace: unknown Uid");
+      NS_LOG_WARN (ProtocolTypeToString (protocolType).c_str () << " GenericWirelessRxTrace: unknown Uid");
       return;
     }
-  UpdatePosition (n);
-  m_pendingUanPackets[animUid].ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
-  OutputWirelessPacketRxInfo (p, m_pendingUanPackets[animUid], animUid);
+  AnimUidPacketInfoMap * pendingPackets =  ProtocolTypeToPendingPackets (protocolType); 
+  pendingPackets->at (animUid).ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
+  OutputWirelessPacketRxInfo (p, pendingPackets->at (animUid), animUid);
 }
 
+void 
+AnimationInterface::UanPhyGenTxTrace (std::string context, Ptr<const Packet> p)
+{
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessTxTrace (context, p, AnimationInterface::UAN);
+}
 
 void 
-AnimationInterface::WifiPhyTxBeginTrace (std::string context,
-                                          Ptr<const Packet> p)
+AnimationInterface::UanPhyGenRxTrace (std::string context, Ptr<const Packet> p)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
-  Ptr <NetDevice> ndev = GetNetDeviceFromContext (context); 
-  NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
-  ++gAnimUid;
-  NS_LOG_INFO ("Wifi TxBeginTrace for packet:" << gAnimUid);
-  AddByteTag (gAnimUid, p);
-  UpdatePosition (n);
-  AnimPacketInfo pktInfo (ndev, Simulator::Now ());
-  AddPendingPacket (AnimationInterface::WIFI, gAnimUid, pktInfo);
-  Ptr<WifiNetDevice> netDevice = DynamicCast<WifiNetDevice> (ndev);
-  Mac48Address nodeAddr = netDevice->GetMac ()->GetAddress ();
-  std::ostringstream oss; 
-  oss << nodeAddr;
-  m_macToNodeIdMap[oss.str ()] = n->GetId ();
-  NS_LOG_INFO ("Added Mac" << oss.str () << " node:" <<m_macToNodeIdMap[oss.str ()]);
-  OutputWirelessPacketTxInfo (p, m_pendingWifiPackets[gAnimUid], gAnimUid);
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessRxTrace (context, p, AnimationInterface::UAN);
 }
 
 void 
-AnimationInterface::WifiPhyRxBeginTrace (std::string context,
-                                              Ptr<const Packet> p)
+AnimationInterface::WifiPhyTxBeginTrace (std::string context, Ptr<const Packet> p)
 {
-  //NS_LOG_UNCOND ("Context:" << context.c_str ());
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessTxTrace (context, p, AnimationInterface::WIFI);
+}
+
+void 
+AnimationInterface::WifiPhyRxBeginTrace (std::string context, Ptr<const Packet> p)
+{
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
   uint64_t animUid = GetAnimUidFromPacket (p);
   NS_LOG_INFO ("Wifi RxBeginTrace for packet:" << animUid);
   if (!IsPacketPending (animUid, AnimationInterface::WIFI))
@@ -863,7 +868,6 @@
       NS_LOG_WARN ("WifiPhyRxBegin: unknown Uid, but we are adding a wifi packet");
     }
   /// \todo NS_ASSERT (WifiPacketIsPending (animUid) == true);
-  UpdatePosition (n);
   m_pendingWifiPackets[animUid].ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
   OutputWirelessPacketRxInfo (p, m_pendingWifiPackets[animUid], animUid);
 }
@@ -871,86 +875,37 @@
 void 
 AnimationInterface::WimaxTxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
-  Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
-  NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
-  ++gAnimUid;
-  NS_LOG_INFO ("WimaxTxTrace for packet:" << gAnimUid);
-  UpdatePosition (n);
-  AnimPacketInfo pktInfo (ndev, Simulator::Now ());
-  AddByteTag (gAnimUid, p);
-  AddPendingPacket (AnimationInterface::WIMAX, gAnimUid, pktInfo);
-  OutputWirelessPacketTxInfo (p, pktInfo, gAnimUid);
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessTxTrace (context, p, AnimationInterface::WIMAX);
 }
 
 
 void 
 AnimationInterface::WimaxRxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
-  Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
-  NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
-  uint64_t animUid = GetAnimUidFromPacket (p);
-  NS_LOG_INFO ("WimaxRxTrace for packet:" << animUid);
-  NS_ASSERT (IsPacketPending (animUid, AnimationInterface::WIMAX) == true);
-  AnimPacketInfo& pktInfo = m_pendingWimaxPackets[animUid];
-  UpdatePosition (n);
-  pktInfo.ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
-  OutputWirelessPacketRxInfo (p, pktInfo, animUid);
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessRxTrace (context, p, AnimationInterface::WIMAX);
 }
 
 void 
 AnimationInterface::LteTxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
-  Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
-  NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
-  ++gAnimUid;
-  NS_LOG_INFO ("LteTxTrace for packet:" << gAnimUid);
-  UpdatePosition (n);
-  AnimPacketInfo pktInfo (ndev, Simulator::Now ());
-  AddByteTag (gAnimUid, p);
-  AddPendingPacket (AnimationInterface::LTE, gAnimUid, pktInfo);
-  OutputWirelessPacketTxInfo (p, pktInfo, gAnimUid);
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessTxTrace (context, p, AnimationInterface::LTE);
 }
 
-
 void 
 AnimationInterface::LteRxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
-  Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
-  NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
-  uint64_t animUid = GetAnimUidFromPacket (p);
-  NS_LOG_INFO ("LteRxTrace for packet:" << gAnimUid);
-  if (!IsPacketPending (animUid, AnimationInterface::LTE))
-    {
-      NS_LOG_WARN ("LteRxTrace: unknown Uid");
-      return;
-    }
-  AnimPacketInfo& pktInfo = m_pendingLtePackets[animUid];
-  UpdatePosition (n);
-  pktInfo.ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
-  OutputWirelessPacketRxInfo (p, pktInfo, animUid);
+  NS_LOG_FUNCTION (this);
+  return GenericWirelessRxTrace (context, p, AnimationInterface::LTE);
 }
 
 void 
 AnimationInterface::LteSpectrumPhyTxStart (std::string context, Ptr<const PacketBurst> pb)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   if (!pb) 
     {
       NS_LOG_WARN ("pb == 0. Not yet supported");
@@ -959,8 +914,7 @@
   context = "/" + context;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
 
   std::list <Ptr <Packet> > pbList = pb->GetPackets ();
   for (std::list <Ptr <Packet> >::iterator i  = pbList.begin ();
@@ -970,7 +924,6 @@
       Ptr <Packet> p = *i;
       ++gAnimUid;
       NS_LOG_INFO ("LteSpectrumPhyTxTrace for packet:" << gAnimUid);
-      UpdatePosition (n);
       AnimPacketInfo pktInfo (ndev, Simulator::Now ());
       AddByteTag (gAnimUid, p);
       AddPendingPacket (AnimationInterface::LTE, gAnimUid, pktInfo);
@@ -981,8 +934,8 @@
 void 
 AnimationInterface::LteSpectrumPhyRxStart (std::string context, Ptr<const PacketBurst> pb)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   if (!pb) 
     {
       NS_LOG_WARN ("pb == 0. Not yet supported");
@@ -991,8 +944,7 @@
   context = "/" + context;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
 
   std::list <Ptr <Packet> > pbList = pb->GetPackets ();
   for (std::list <Ptr <Packet> >::iterator i  = pbList.begin ();
@@ -1008,7 +960,6 @@
           return;
         }
       AnimPacketInfo& pktInfo = m_pendingLtePackets[animUid];
-      UpdatePosition (n);
       pktInfo.ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
       OutputWirelessPacketRxInfo (p, pktInfo, animUid);
     }
@@ -1017,37 +968,35 @@
 void 
 AnimationInterface::CsmaPhyTxBeginTrace (std::string context, Ptr<const Packet> p)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
   ++gAnimUid;
   NS_LOG_INFO ("CsmaPhyTxBeginTrace for packet:" << gAnimUid);
   AddByteTag (gAnimUid, p);
-  UpdatePosition (n);
+  UpdatePosition (ndev);
   AnimPacketInfo pktInfo (ndev, Simulator::Now ());
   AddPendingPacket (AnimationInterface::CSMA, gAnimUid, pktInfo);
 
+
 }
 
 void 
 AnimationInterface::CsmaPhyTxEndTrace (std::string context, Ptr<const Packet> p)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
   uint64_t animUid = GetAnimUidFromPacket (p);
   NS_LOG_INFO ("CsmaPhyTxEndTrace for packet:" << animUid);
   if (!IsPacketPending (animUid, AnimationInterface::CSMA))
     {
       NS_LOG_WARN ("CsmaPhyTxEndTrace: unknown Uid"); 
       NS_FATAL_ERROR ("CsmaPhyTxEndTrace: unknown Uid"); 
-      UpdatePosition (n);
       AnimPacketInfo pktInfo (ndev, Simulator::Now ());
       AddPendingPacket (AnimationInterface::CSMA, animUid, pktInfo);
       NS_LOG_WARN ("Unknown Uid, but adding Csma Packet anyway");
@@ -1060,12 +1009,11 @@
 void 
 AnimationInterface::CsmaPhyRxEndTrace (std::string context, Ptr<const Packet> p)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
+  NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
+  UpdatePosition (ndev);
   uint64_t animUid = GetAnimUidFromPacket (p);
   if (!IsPacketPending (animUid, AnimationInterface::CSMA))
     {
@@ -1074,7 +1022,6 @@
     }
   /// \todo NS_ASSERT (CsmaPacketIsPending (AnimUid) == true);
   AnimPacketInfo& pktInfo = m_pendingCsmaPackets[animUid];
-  UpdatePosition (n);
   pktInfo.ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
   NS_LOG_INFO ("CsmaPhyRxEndTrace for packet:" << animUid);
   NS_LOG_INFO ("CsmaPhyRxEndTrace for packet:" << animUid << " complete");
@@ -1085,13 +1032,10 @@
 AnimationInterface::CsmaMacRxTrace (std::string context,
                                          Ptr<const Packet> p)
 {
-  if (!m_started || !IsInTimeWindow () || !m_trackPackets)
-    return;
   NS_LOG_FUNCTION (this);
+  CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS;
   Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
   NS_ASSERT (ndev);
-  Ptr <Node> n = ndev->GetNode ();
-  NS_ASSERT (n);
   uint64_t animUid = GetAnimUidFromPacket (p);
   if (!IsPacketPending (animUid, AnimationInterface::CSMA))
     {
@@ -1110,11 +1054,14 @@
   CheckMaxPktsPerTraceFile ();
   uint32_t nodeId = 0;
   if (pktInfo.m_txnd)
-    nodeId = pktInfo.m_txnd->GetNode ()->GetId ();
+    {
+      nodeId = pktInfo.m_txnd->GetNode ()->GetId ();
+    }
   else
-    nodeId = pktInfo.m_txNodeId;
+    {
+      nodeId = pktInfo.m_txNodeId;
+    }
   WriteXmlPRef (animUid, nodeId, pktInfo.m_fbTx, m_enablePacketMetadata? GetPacketMetadata (p):"");
-
 }
 
 void 
@@ -1165,7 +1112,9 @@
   AnimUidPacketInfoMap * pendingPackets = ProtocolTypeToPendingPackets (protocolType);
   NS_ASSERT (pendingPackets);
   if (pendingPackets->empty ())
-    return;
+    {
+      return;
+    }
   std::vector <uint64_t> purgeList;
   for (AnimUidPacketInfoMap::iterator i = pendingPackets->begin ();
        i != pendingPackets->end ();
@@ -1223,6 +1172,41 @@
 
 }
 
+std::string
+AnimationInterface::ProtocolTypeToString (AnimationInterface::ProtocolType protocolType)
+{
+  std::string result = "Unknown";
+  switch (protocolType)
+    {
+      case AnimationInterface::WIFI:
+        {
+          result = "WIFI";
+          break;
+        }
+      case AnimationInterface::UAN:
+        {
+          result = "UAN";
+          break;
+        }
+      case AnimationInterface::CSMA:
+        {
+          result = "CSMA";
+          break;
+        }
+      case AnimationInterface::WIMAX:
+        {
+          result = "WIMAX";
+          break;
+        }
+      case AnimationInterface::LTE:
+        {
+          result = "LTE";
+          break;
+        }
+    }
+  return result;
+}
+
 // Counters
 
 std::string 
@@ -1499,6 +1483,14 @@
   return v;
 }
 
+Vector
+AnimationInterface::UpdatePosition (Ptr <NetDevice> ndev)
+{
+  Ptr <Node> n = ndev->GetNode ();
+  NS_ASSERT (n);
+  return UpdatePosition (n);
+}
+
 Vector 
 AnimationInterface::GetPosition (Ptr <Node> n)
 {
@@ -1721,7 +1713,83 @@
 }
 
 
-// Routing
+void
+AnimationInterface::TrackQueueCounters ()
+{
+  if (Simulator::Now () > m_queueCountersStopTime)
+    {
+      NS_LOG_INFO ("TrackQueueCounters Completed");
+      return;
+    }
+  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
+    {
+      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
+      UpdateNodeCounter (m_queueEnqueueCounterId, nodeId, m_nodeQueueEnqueue[nodeId]);
+      UpdateNodeCounter (m_queueDequeueCounterId, nodeId, m_nodeQueueDequeue[nodeId]);
+      UpdateNodeCounter (m_queueDropCounterId, nodeId, m_nodeQueueDrop[nodeId]);
+    }
+  Simulator::Schedule (m_queueCountersPollInterval, &AnimationInterface::TrackQueueCounters, this);
+}
+
+void
+AnimationInterface::TrackWifiMacCounters ()
+{
+  if (Simulator::Now () > m_wifiMacCountersStopTime)
+    {
+      NS_LOG_INFO ("TrackWifiMacCounters Completed");
+      return;
+    }
+  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
+    {
+      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
+      UpdateNodeCounter (m_wifiMacTxCounterId, nodeId, m_nodeWifiMacTx[nodeId]);
+      UpdateNodeCounter (m_wifiMacTxDropCounterId, nodeId, m_nodeWifiMacTxDrop[nodeId]);
+      UpdateNodeCounter (m_wifiMacRxCounterId, nodeId, m_nodeWifiMacRx[nodeId]);
+      UpdateNodeCounter (m_wifiMacRxDropCounterId, nodeId, m_nodeWifiMacRxDrop[nodeId]);
+    }
+  Simulator::Schedule (m_wifiMacCountersPollInterval, &AnimationInterface::TrackWifiMacCounters, this);
+}
+
+void
+AnimationInterface::TrackWifiPhyCounters ()
+{
+  if (Simulator::Now () > m_wifiPhyCountersStopTime)
+    {
+      NS_LOG_INFO ("TrackWifiPhyCounters Completed");
+      return;
+    }
+  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
+    {
+      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
+      UpdateNodeCounter (m_wifiPhyTxDropCounterId, nodeId, m_nodeWifiPhyTxDrop[nodeId]);
+      UpdateNodeCounter (m_wifiPhyRxDropCounterId, nodeId, m_nodeWifiPhyRxDrop[nodeId]);
+    }
+  Simulator::Schedule (m_wifiPhyCountersPollInterval, &AnimationInterface::TrackWifiPhyCounters, this);
+}
+
+void
+AnimationInterface::TrackIpv4L3ProtocolCounters ()
+{
+  if (Simulator::Now () > m_ipv4L3ProtocolCountersStopTime)
+    {
+      NS_LOG_INFO ("TrackIpv4L3ProtocolCounters Completed");
+      return;
+    }
+  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
+    {
+      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
+      UpdateNodeCounter (m_ipv4L3ProtocolTxCounterId, nodeId, m_nodeIpv4Tx[nodeId]);
+      UpdateNodeCounter (m_ipv4L3ProtocolRxCounterId, nodeId, m_nodeIpv4Rx[nodeId]);
+      UpdateNodeCounter (m_ipv4L3ProtocolDropCounterId, nodeId, m_nodeIpv4Drop[nodeId]);
+    }
+  Simulator::Schedule (m_ipv4L3ProtocolCountersPollInterval, &AnimationInterface::TrackIpv4L3ProtocolCounters, this);
+}
+
+
+
+
+
+/***** Routing-related *****/
 
 void 
 AnimationInterface::TrackIpv4RoutePaths ()
@@ -1797,78 +1865,6 @@
 
 }
 
-void
-AnimationInterface::TrackQueueCounters ()
-{
-  if (Simulator::Now () > m_queueCountersStopTime)
-    {
-      NS_LOG_INFO ("TrackQueueCounters Completed");
-      return;
-    }
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
-      UpdateNodeCounter (m_queueEnqueueCounterId, nodeId, m_nodeQueueEnqueue[nodeId]);
-      UpdateNodeCounter (m_queueDequeueCounterId, nodeId, m_nodeQueueDequeue[nodeId]);
-      UpdateNodeCounter (m_queueDropCounterId, nodeId, m_nodeQueueDrop[nodeId]);
-    }
-  Simulator::Schedule (m_queueCountersPollInterval, &AnimationInterface::TrackQueueCounters, this);
-}
-
-void
-AnimationInterface::TrackWifiMacCounters ()
-{
-  if (Simulator::Now () > m_wifiMacCountersStopTime)
-    {
-      NS_LOG_INFO ("TrackWifiMacCounters Completed");
-      return;
-    }
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
-      UpdateNodeCounter (m_wifiMacTxCounterId, nodeId, m_nodeWifiMacTx[nodeId]);
-      UpdateNodeCounter (m_wifiMacTxDropCounterId, nodeId, m_nodeWifiMacTxDrop[nodeId]);
-      UpdateNodeCounter (m_wifiMacRxCounterId, nodeId, m_nodeWifiMacRx[nodeId]);
-      UpdateNodeCounter (m_wifiMacRxDropCounterId, nodeId, m_nodeWifiMacRxDrop[nodeId]);
-    }
-  Simulator::Schedule (m_wifiMacCountersPollInterval, &AnimationInterface::TrackWifiMacCounters, this);
-}
-
-void
-AnimationInterface::TrackWifiPhyCounters ()
-{
-  if (Simulator::Now () > m_wifiPhyCountersStopTime)
-    {
-      NS_LOG_INFO ("TrackWifiPhyCounters Completed");
-      return;
-    }
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
-      UpdateNodeCounter (m_wifiPhyTxDropCounterId, nodeId, m_nodeWifiPhyTxDrop[nodeId]);
-      UpdateNodeCounter (m_wifiPhyRxDropCounterId, nodeId, m_nodeWifiPhyRxDrop[nodeId]);
-    }
-  Simulator::Schedule (m_wifiPhyCountersPollInterval, &AnimationInterface::TrackWifiPhyCounters, this);
-}
-
-void
-AnimationInterface::TrackIpv4L3ProtocolCounters ()
-{
-  if (Simulator::Now () > m_ipv4L3ProtocolCountersStopTime)
-    {
-      NS_LOG_INFO ("TrackIpv4L3ProtocolCounters Completed");
-      return;
-    }
-  for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
-    {
-      uint32_t nodeId = Ptr <Node> (*i)->GetId ();
-      UpdateNodeCounter (m_ipv4L3ProtocolTxCounterId, nodeId, m_nodeIpv4Tx[nodeId]);
-      UpdateNodeCounter (m_ipv4L3ProtocolRxCounterId, nodeId, m_nodeIpv4Rx[nodeId]);
-      UpdateNodeCounter (m_ipv4L3ProtocolDropCounterId, nodeId, m_nodeIpv4Drop[nodeId]);
-    }
-  Simulator::Schedule (m_ipv4L3ProtocolCountersPollInterval, &AnimationInterface::TrackIpv4L3ProtocolCounters, this);
-}
-
 void 
 AnimationInterface::TrackIpv4Route ()
 {
@@ -1986,69 +1982,8 @@
 }
 
 
-// XML 
-
-AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName, bool emptyElement):
-                                m_tagName (tagName),
-                                m_emptyElement (emptyElement)
-{
-  m_elementString = "<" + tagName + " ";
-}
-
-template <typename T>
-void
-AnimationInterface::AnimXmlElement::AddAttribute (std::string attribute, T value)
-{
-  std::ostringstream oss;
-  oss << std::setprecision (10);
-  oss << value;
-  m_elementString += attribute.c_str ();
-  m_elementString += "=\"" + oss.str () + "\" ";
-}
-
-void
-AnimationInterface::AnimXmlElement::Close ()
-{
-  m_elementString += ">\n";
-}
-
-void
-AnimationInterface::AnimXmlElement::CloseElement ()
-{
-  if (m_emptyElement)
-    {
-      m_elementString += "/>\n";
-    }
-  else
-   {
-     m_elementString += "</" + m_tagName + ">\n";
-   }
-}
-
-void
-AnimationInterface::AnimXmlElement::CloseTag ()
-{
-  m_elementString += ">";
-}
-
-void
-AnimationInterface::AnimXmlElement::AddLineBreak ()
-{
-  m_elementString += "\n";
-}
-
-void
-AnimationInterface::AnimXmlElement::Add (AnimXmlElement e)
-{
-  m_elementString += e.GetElementString ();
-}
-
-std::string
-AnimationInterface::AnimXmlElement::GetElementString ()
-{
-  return m_elementString;
-}
 
+/***** WriteXml *****/
 
 void 
 AnimationInterface::WriteXmlAnim (bool routing)
@@ -2102,7 +2037,7 @@
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("fromId", fromId);
   element.AddAttribute ("toId", toId);
-  element.AddAttribute ("ld", linkDescription);
+  element.AddAttribute ("ld", linkDescription, true);
   element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
@@ -2130,9 +2065,9 @@
       lprop = m_linkProperties[p2];
     }
   
-  element.AddAttribute ("fd", lprop.fromNodeDescription); 
-  element.AddAttribute ("td", lprop.toNodeDescription); 
-  element.AddAttribute ("ld", lprop.linkDescription); 
+  element.AddAttribute ("fd", lprop.fromNodeDescription, true); 
+  element.AddAttribute ("td", lprop.toNodeDescription, true); 
+  element.AddAttribute ("ld", lprop.linkDescription, true); 
   element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
@@ -2143,7 +2078,7 @@
   AnimXmlElement element ("rt");
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
-  element.AddAttribute ("info", routingInfo.c_str ());
+  element.AddAttribute ("info", routingInfo.c_str (), true);
   element.CloseElement ();
   WriteN (element.GetElementString (), m_routingF);
 }
@@ -2184,7 +2119,7 @@
   element.AddAttribute ("fbTx", fbTx);
   if (!metaInfo.empty ())
     {
-      element.AddAttribute ("meta-info", metaInfo.c_str ());
+      element.AddAttribute ("meta-info", metaInfo.c_str (), true);
     }
   element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
@@ -2212,7 +2147,7 @@
   element.AddAttribute ("lbTx", lbTx);
   if (!metaInfo.empty ())
     {
-      element.AddAttribute ("meta-info", metaInfo.c_str ());
+      element.AddAttribute ("meta-info", metaInfo.c_str (), true);
     }
   element.AddAttribute ("tId", tId);
   element.AddAttribute ("fbRx", fbRx);
@@ -2303,7 +2238,7 @@
   element.AddAttribute ("id", nodeId);
   if (m_nodeDescriptions.find (nodeId) != m_nodeDescriptions.end ())
     {
-      element.AddAttribute ("descr", m_nodeDescriptions[nodeId]); 
+      element.AddAttribute ("descr", m_nodeDescriptions[nodeId], true); 
     }
   element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
@@ -2347,6 +2282,109 @@
   WriteN (element.GetElementString (), m_f);
 }
 
+
+
+/***** AnimXmlElement  *****/
+
+AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName, bool emptyElement):
+                                                    m_tagName (tagName),
+                                                    m_emptyElement (emptyElement)
+{
+  m_elementString = "<" + tagName + " ";
+}
+
+template <typename T>
+void
+AnimationInterface::AnimXmlElement::AddAttribute (std::string attribute, T value, bool xmlEscape)
+{
+  std::ostringstream oss;
+  oss << std::setprecision (10);
+  oss << value;
+  m_elementString += attribute.c_str ();
+  if (xmlEscape)
+    {
+      m_elementString += "=\"";
+      std::string valueStr = oss.str ();
+      for (std::string::iterator it = valueStr.begin (); it != valueStr.end (); ++it)
+        {
+          switch (*it)
+            {
+              case '&':
+                m_elementString += "&amp;";
+                break;
+              case '\"':
+                m_elementString += "&quot;";
+                break;
+              case '\'':
+                m_elementString += "&apos;";
+                break;
+              case '<':
+                m_elementString += "&lt;";
+                break;
+              case '>':
+                m_elementString += "&gt;";
+                break;
+              default:
+                m_elementString += *it;
+                break;
+            }
+        }
+      m_elementString += "\" ";
+    }
+  else
+    {
+      m_elementString += "=\"" + oss.str () + "\" ";
+    }
+}
+
+void
+AnimationInterface::AnimXmlElement::Close ()
+{
+  m_elementString += ">\n";
+}
+
+void
+AnimationInterface::AnimXmlElement::CloseElement ()
+{
+  if (m_emptyElement)
+    {
+      m_elementString += "/>\n";
+    }
+  else
+   {
+     m_elementString += "</" + m_tagName + ">\n";
+   }
+}
+
+void
+AnimationInterface::AnimXmlElement::CloseTag ()
+{
+  m_elementString += ">";
+}
+
+void
+AnimationInterface::AnimXmlElement::AddLineBreak ()
+{
+  m_elementString += "\n";
+}
+
+void
+AnimationInterface::AnimXmlElement::Add (AnimXmlElement e)
+{
+  m_elementString += e.GetElementString ();
+}
+
+std::string
+AnimationInterface::AnimXmlElement::GetElementString ()
+{
+  return m_elementString;
+}
+
+
+
+
+/***** AnimByteTag *****/
+
 TypeId
 AnimByteTag::GetTypeId (void)
 {
diff -Naur ns-3.24.1/src/netanim/model/animation-interface.h ns-3.25/src/netanim/model/animation-interface.h
--- ns-3.24.1/src/netanim/model/animation-interface.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/model/animation-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -49,6 +49,8 @@
 #define MAX_PKTS_PER_TRACE_FILE 100000
 #define PURGE_INTERVAL 5
 #define NETANIM_VERSION "netanim-3.106"
+#define CHECK_STARTED_INTIMEWINDOW {if (!m_started || !IsInTimeWindow ()) return;}
+#define CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS {if (!m_started || !IsInTimeWindow () || !m_trackPackets) return;}
 
 
 struct NodeSize;
@@ -520,7 +522,7 @@
     public:
     AnimXmlElement (std::string tagName, bool emptyElement=true);
     template <typename T>
-    void AddAttribute (std::string attribute, T value);
+    void AddAttribute (std::string attribute, T value, bool xmlEscape=false);
     void Close ();
     void CloseElement ();
     void CloseTag ();
@@ -635,6 +637,7 @@
   bool IsPacketPending (uint64_t animUid, ProtocolType protocolType);
   void PurgePendingPackets (ProtocolType protocolType);
   AnimUidPacketInfoMap * ProtocolTypeToPendingPackets (ProtocolType protocolType);
+  std::string ProtocolTypeToString (ProtocolType protocolType);
   void AddPendingPacket (ProtocolType protocolType, uint64_t animUid, AnimPacketInfo pktInfo);
   uint64_t GetAnimUidFromPacket (Ptr <const Packet>);
   void AddToIpv4AddressNodeIdTable (std::string, uint32_t);
@@ -723,6 +726,8 @@
   void UanPhyGenRxTrace (std::string context,
                          Ptr<const Packet>);
   void RemainingEnergyTrace (std::string context, double previousEnergy, double currentEnergy);
+  void GenericWirelessTxTrace (std::string context, Ptr<const Packet>, ProtocolType protocolType);
+  void GenericWirelessRxTrace (std::string context, Ptr<const Packet>, ProtocolType protocolType);
 
   
   void ConnectCallbacks ();
@@ -735,6 +740,7 @@
   Vector GetPosition (Ptr <Node> n);
   Vector UpdatePosition (Ptr <Node> n);
   Vector UpdatePosition (Ptr <Node> n, Vector v);
+  Vector UpdatePosition (Ptr <NetDevice> ndev);
   bool NodeHasMoved (Ptr <Node> n, Vector newLocation);
   std::vector < Ptr <Node> > GetMovedNodes ();
   void MobilityCourseChangeTrace (Ptr <const MobilityModel> mob);
diff -Naur ns-3.24.1/src/netanim/wscript ns-3.25/src/netanim/wscript
--- ns-3.24.1/src/netanim/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/netanim/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -3,7 +3,7 @@
 import wutils
 
 # Required NetAnim version
-NETANIM_RELEASE_NAME = "netanim-3.106"
+NETANIM_RELEASE_NAME = "netanim-3.107"
 
 def build (bld) :
     module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'energy'])
diff -Naur ns-3.24.1/src/network/bindings/callbacks_list.py ns-3.25/src/network/bindings/callbacks_list.py
--- ns-3.24.1/src/network/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/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/network/bindings/modulegen__gcc_ILP32.py ns-3.25/src/network/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/network/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -147,7 +147,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'])
+    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'])
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True)
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned int, int> [class]
@@ -170,6 +170,8 @@
     module.add_class('TagBuffer')
     ## 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]
@@ -226,12 +228,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'])
     ## 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', 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'])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats [struct]
-    module.add_class('Stats', outer_class=root_module['ns3::RedQueue'])
     ## 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]
@@ -246,6 +242,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, 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, 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]
@@ -260,14 +258,22 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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, 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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', 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'])
     ## socket.h (module 'network'): ns3::Socket [class]
     module.add_class('Socket', 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'])
     ## 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'])
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'])
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -402,6 +408,10 @@
     module.add_class('NetDevice', 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'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', 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', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
@@ -446,6 +456,8 @@
     module.add_class('PbbTlv', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
     ## 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', 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', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -479,6 +491,7 @@
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', parent=root_module['ns3::PbbTlv'])
     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')
     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*')
@@ -673,6 +686,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'])
@@ -691,8 +705,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_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> >'])
@@ -700,6 +712,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> >'])
@@ -707,7 +720,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__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'])
@@ -773,6 +788,8 @@
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     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'])
@@ -795,6 +812,7 @@
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    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'])
@@ -819,8 +837,8 @@
 
 def register_Ns3Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## address.h (module 'network'): ns3::Address::Address() [constructor]
     cls.add_constructor([])
@@ -1784,8 +1802,8 @@
 
 def register_Ns3Ipv4Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv4-address.h (module 'network'): ns3::Ipv4Address::Ipv4Address(ns3::Ipv4Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Ipv4Address const &', 'arg0')])
@@ -1840,6 +1858,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', 
@@ -1855,6 +1878,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,8 +1983,8 @@
 
 def register_Ns3Ipv6Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## ipv6-address.h (module 'network'): ns3::Ipv6Address::Ipv6Address() [constructor]
     cls.add_constructor([])
@@ -2031,7 +2059,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', 
@@ -2212,8 +2240,8 @@
 
 def register_Ns3Mac16Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac16-address.h (module 'network'): ns3::Mac16Address::Mac16Address(ns3::Mac16Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac16Address const &', 'arg0')])
@@ -2249,8 +2277,8 @@
 
 def register_Ns3Mac48Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
@@ -2321,8 +2349,8 @@
 
 def register_Ns3Mac64Address_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
-    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## mac64-address.h (module 'network'): ns3::Mac64Address::Mac64Address(ns3::Mac64Address const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Mac64Address const &', 'arg0')])
@@ -3142,10 +3170,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', 
@@ -3596,10 +3628,44 @@
     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_output_stream_operator()
     cls.add_binary_comparison_operator('<')
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     ## type-id.h (module 'core'): ns3::TypeId::TypeId(char const * name) [constructor]
     cls.add_constructor([param('char const *', 'name')])
@@ -3817,7 +3883,6 @@
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
-    cls.add_output_stream_operator()
     cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
@@ -3828,6 +3893,7 @@
     cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
     cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
     cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
@@ -4297,6 +4363,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', 
@@ -4332,18 +4402,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', 
@@ -4384,33 +4469,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
@@ -4641,74 +4738,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_Ns3SequentialRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4821,6 +4850,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([])
@@ -4905,6 +4946,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([])
@@ -4917,6 +4970,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')])
@@ -4996,6 +5104,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', 
@@ -5021,6 +5134,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', 
@@ -5549,7 +5677,6 @@
     cls.add_binary_comparison_operator('<=')
     cls.add_binary_comparison_operator('!=')
     cls.add_inplace_numeric_operator('+=', param('ns3::Time const &', u'right'))
-    cls.add_output_stream_operator()
     cls.add_binary_numeric_operator('*', root_module['ns3::Time'], root_module['ns3::Time'], param('int64_t const &', u'right'))
     cls.add_binary_numeric_operator('+', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
     cls.add_binary_numeric_operator('-', root_module['ns3::Time'], root_module['ns3::Time'], param('ns3::Time const &', u'right'))
@@ -5557,6 +5684,7 @@
     cls.add_binary_comparison_operator('<')
     cls.add_binary_comparison_operator('>')
     cls.add_inplace_numeric_operator('-=', param('ns3::Time const &', u'right'))
+    cls.add_output_stream_operator()
     cls.add_binary_comparison_operator('==')
     cls.add_binary_comparison_operator('>=')
     ## nstime.h (module 'core'): ns3::Time::Time() [constructor]
@@ -6526,33 +6654,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
@@ -7477,7 +7596,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')], 
@@ -7604,6 +7723,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]
@@ -7683,6 +7888,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', 
@@ -8084,6 +8294,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', 
@@ -9294,6 +9509,27 @@
                    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_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')])
@@ -9435,7 +9671,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')], 
diff -Naur ns-3.24.1/src/network/bindings/modulegen__gcc_LP64.py ns-3.25/src/network/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/network/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -147,7 +147,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_LINUX_SSL', 'DLT_PRISM_HEADER', 'DLT_IEEE802_11_RADIO', 'DLT_IEEE802_15_4', 'DLT_NETLINK'], outer_class=root_module['ns3::PcapHelper'])
+    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'])
     ## trace-helper.h (module 'network'): ns3::PcapHelperForDevice [class]
     module.add_class('PcapHelperForDevice', allow_subclassing=True)
     ## sequence-number.h (module 'network'): ns3::SequenceNumber<unsigned int, int> [class]
@@ -170,6 +170,8 @@
     module.add_class('TagBuffer')
     ## 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]
@@ -226,12 +228,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'])
     ## 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', 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'])
-    ## red-queue.h (module 'network'): ns3::RedQueue::Stats [struct]
-    module.add_class('Stats', outer_class=root_module['ns3::RedQueue'])
     ## 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]
@@ -246,6 +242,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, 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, 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]
@@ -260,14 +258,22 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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, 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::QueueItem, ns3::empty, ns3::DefaultDeleter<ns3::QueueItem> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, 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', 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'])
     ## socket.h (module 'network'): ns3::Socket [class]
     module.add_class('Socket', 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'])
     ## 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'])
+    ## socket.h (module 'network'): ns3::Socket::Ipv6MulticastFilterMode [enumeration]
+    module.add_enum('Ipv6MulticastFilterMode', ['INCLUDE', 'EXCLUDE'], outer_class=root_module['ns3::Socket'])
     ## socket.h (module 'network'): ns3::SocketAddressTag [class]
     module.add_class('SocketAddressTag', parent=root_module['ns3::Tag'])
     ## socket-factory.h (module 'network'): ns3::SocketFactory [class]
@@ -402,6 +408,10 @@
     module.add_class('NetDevice', 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'])
+    ## net-device.h (module 'network'): ns3::NetDeviceQueue [class]
+    module.add_class('NetDeviceQueue', 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', parent=root_module['ns3::Object'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
@@ -446,6 +456,8 @@
     module.add_class('PbbTlv', parent=root_module['ns3::SimpleRefCount< ns3::PbbTlv, ns3::empty, ns3::DefaultDeleter<ns3::PbbTlv> >'])
     ## 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', 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', parent=root_module['ns3::ErrorModel'])
     ## error-model.h (module 'network'): ns3::RateErrorModel::ErrorUnit [enumeration]
@@ -479,6 +491,7 @@
     ## packetbb.h (module 'network'): ns3::PbbAddressTlv [class]
     module.add_class('PbbAddressTlv', parent=root_module['ns3::PbbTlv'])
     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')
     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*')
@@ -673,6 +686,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'])
@@ -691,8 +705,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_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> >'])
@@ -700,6 +712,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> >'])
@@ -707,7 +720,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__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'])
@@ -773,6 +788,8 @@
     register_Ns3Mac64AddressValue_methods(root_module, root_module['ns3::Mac64AddressValue'])
     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'])
@@ -795,6 +812,7 @@
     register_Ns3PbbPacket_methods(root_module, root_module['ns3::PbbPacket'])
     register_Ns3PbbTlv_methods(root_module, root_module['ns3::PbbTlv'])
     register_Ns3Probe_methods(root_module, root_module['ns3::Probe'])
+    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'])
@@ -1840,6 +1858,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', 
@@ -1855,6 +1878,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', 
@@ -2031,7 +2059,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', 
@@ -3142,10 +3170,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', 
@@ -3596,6 +3628,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('<')
@@ -4297,6 +4363,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', 
@@ -4332,18 +4402,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', 
@@ -4384,33 +4469,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
@@ -4641,74 +4738,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_Ns3SequentialRandomVariable_methods(root_module, cls):
     ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::SequentialRandomVariable::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -4821,6 +4850,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([])
@@ -4905,6 +4946,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([])
@@ -4917,6 +4970,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')])
@@ -4996,6 +5104,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', 
@@ -5021,6 +5134,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', 
@@ -6526,33 +6654,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
@@ -7477,7 +7596,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')], 
@@ -7604,6 +7723,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]
@@ -7683,6 +7888,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', 
@@ -8084,6 +8294,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', 
@@ -9294,6 +9509,27 @@
                    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_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')])
@@ -9435,7 +9671,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')], 
diff -Naur ns-3.24.1/src/network/doc/queue.rst ns-3.25/src/network/doc/queue.rst
--- ns-3.24.1/src/network/doc/queue.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/doc/queue.rst	2016-03-23 21:36:53.000000000 -0700
@@ -7,18 +7,20 @@
    ============= Subsection (#.#.#)
    ############# Paragraph (no number)
 
-This section documents a few queue objects, typically associated with
-NetDevice models, that are maintained as part of the ``network`` module:
+This section documents the queue object, which is typically used by NetDevices
+and QueueDiscs to store packets.
+
+Packets stored in a queue can be managed according to different policies.
+Currently, the following policies are available:
 
 * DropTail
-* Random Early Detection 
 
 Model Description
 *****************
 
 The source code for the new module lives in the directory ``src/network/utils``.
 
-ns-3 provides a couple of classic queue models and the ability to
+ns-3 provides the classic droptail queue model and the ability to
 trace certain queue operations such as enqueuing, dequeuing, and dropping.
 These may be added to certain NetDevice objects that take a Ptr<Queue>
 pointer.
@@ -28,15 +30,19 @@
 The queue models described here are more often used with simpler ns-3 
 device models such as PointToPoint and Csma.
 
+All the queuing disciplines, instead, make use of the queue model defined here.
+
 Design
 ======
 
 An abstract base class, class Queue, is typically used and subclassed
-for specific scheduling and drop policies.  Common operations
-include:
+for specific scheduling and drop policies. A class QueueItem is introduced
+to model the items stored in a queue. The base class QueueItem only contains
+a pointer to a packet. Subclasses may be defined to store additional information.
+Common operations provided by the base class Queue include:
 
-* ``bool Enqueue (Ptr<Packet> p)``:  Enqueue a packet
-* ``Ptr<Packet> Dequeue (void)``:  Dequeue a packet
+* ``bool Enqueue (Ptr<QueueItem> item)``:  Enqueue a packet
+* ``Ptr<QueueItem> Dequeue (void)``:  Dequeue a packet
 * ``uint32_t GetNPackets (void)``:  Get the queue depth, in packets
 * ``uint32_t GetNBytes (void)``:  Get the queue depth, in packets
 
@@ -48,33 +54,20 @@
 * ``Dequeue``
 * ``Drop``
 
+Also, three attributes are defined in the Queue base class:
+
+* ``Mode``: whether the capacity of the queue is measured in packets or bytes
+* ``MaxPackets``: the maximum number of packets accepted by the queue in packet mode
+* ``MaxBytes``: the maximum number of bytes accepted by the queue in byte mode
+
+The Enqueue method does not allow to store a packet if the queue capacity is exceeded.
+
 DropTail
 ########
 
 This is a basic first-in-first-out (FIFO) queue that performs a tail drop
 when the queue is full.
 
-Random Early Detection
-######################
-
-Random Early Detection (RED) is a queue variant that aims to provide
-early signals to transport protocol congestion control (e.g. TCP) that
-congestion is imminent, so that they back off their rate gracefully
-rather than with a bunch of tail-drop losses (possibly incurring
-TCP timeout).  The model in ns-3 is a port of Sally Floyd's ns-2
-RED model.
-
-Scope and Limitations
-=====================
-
-The RED model just supports default RED.  Adaptive RED is not supported.
-
-References
-==========
-
-The RED queue aims to be close to the results cited in:
-S.Floyd, K.Fall http://icir.org/floyd/papers/redsims.ps
-
 Usage
 *****
 
@@ -82,8 +75,7 @@
 =======
 
 A typical usage pattern is to create a device helper and to configure
-the queue type and attributes from the helper, such as this example
-from ``src/network/examples/red-tests.cc``:
+the queue type and attributes from the helper, such as this example:
 
 .. sourcecode:: cpp
 
@@ -99,34 +91,14 @@
   p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
   NetDeviceContainer devn1n2 = p2p.Install (n1n2);
 
-  p2p.SetQueue ("ns3::RedQueue", // only backbone link has RED queue
-                "LinkBandwidth", StringValue (redLinkDataRate),
-                "LinkDelay", StringValue (redLinkDelay));
-  p2p.SetDeviceAttribute ("DataRate", StringValue (redLinkDataRate));
-  p2p.SetChannelAttribute ("Delay", StringValue (redLinkDelay));
+  p2p.SetQueue ("ns3::DropTailQueue",
+                "LinkBandwidth", StringValue (linkDataRate),
+                "LinkDelay", StringValue (linkDelay));
+  p2p.SetDeviceAttribute ("DataRate", StringValue (linkDataRate));
+  p2p.SetChannelAttribute ("Delay", StringValue (linkDelay));
   NetDeviceContainer devn2n3 = p2p.Install (n2n3);
 
 
-Attributes
-==========
-
-The RED queue contains a number of attributes that control the RED
-policies:
-
-* Mode (bytes or packets)
-* MeanPktSize
-* IdlePktSize
-* Wait (time)
-* Gentle mode
-* MinTh, MaxTh
-* QueueLimit
-* Queue weight
-* LInterm
-* LinkBandwidth
-* LinkDelay
-
-Consult the ns-3 documentation for explanation of these attributes.
-
 Output
 ======
 
@@ -154,12 +126,5 @@
 ========
 
 The drop-tail queue is used in several examples, such as 
-``examples/udp/udp-echo.cc``.  The RED queue example is found at
-``src/network/examples/red-tests.cc``.
-
-Validation
-**********
-
-The RED model has been validated and the report is currently stored
-at: https://github.com/downloads/talau/ns-3-tcp-red/report-red-ns3.pdf 
+``examples/udp/udp-echo.cc``.
 
diff -Naur ns-3.24.1/src/network/examples/droptail_vs_red.cc ns-3.25/src/network/examples/droptail_vs_red.cc
--- ns-3.24.1/src/network/examples/droptail_vs_red.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/examples/droptail_vs_red.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,163 +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
- *
- * Author: John Abraham <john.abraham@gatech.edu> 
- *
- */
-
-
-#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/point-to-point-layout-module.h"
-
-#include <iostream>
-#include <iomanip>
-#include <map>
-
-using namespace ns3;
-
-
-int main (int argc, char *argv[])
-{
-  uint32_t    nLeaf = 5; 
-  uint32_t    maxPackets = 100;
-  uint32_t    modeBytes  = 0;
-  double      minTh = 50;
-  double      maxTh = 80;
-  uint32_t    pktSize = 512;
-  std::string appDataRate = "10Mbps";
-  std::string queueType = "DropTail";
-  uint16_t port = 5001;
-  std::string bottleNeckLinkBw = "1Mbps";
-  std::string bottleNeckLinkDelay = "50ms";
-
-  CommandLine cmd;
-  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
-  cmd.AddValue ("maxPackets","Max Packets allowed in the queue", maxPackets);
-  cmd.AddValue ("queueType", "Set Queue type to DropTail or RED", queueType);
-  cmd.AddValue ("appPktSize", "Set OnOff App Packet Size", pktSize);
-  cmd.AddValue ("appDataRate", "Set OnOff App DataRate", appDataRate);
-  cmd.AddValue ("modeBytes", "Set Queue mode to Packets <0> or bytes <1>", modeBytes);
-
-  cmd.AddValue ("redMinTh", "RED queue minimum threshold", minTh);
-  cmd.AddValue ("redMaxTh", "RED queue maximum threshold", maxTh);
-  cmd.Parse (argc,argv);
-
-  if ((queueType != "RED") && (queueType != "DropTail"))
-    {
-      NS_ABORT_MSG ("Invalid queue type: Use --queueType=RED or --queueType=DropTail");
-    }
-
-  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (pktSize));
-  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue (appDataRate));
-
-
-  if (!modeBytes)
-    {
-      Config::SetDefault ("ns3::DropTailQueue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
-      Config::SetDefault ("ns3::DropTailQueue::MaxPackets", UintegerValue (maxPackets));
-      Config::SetDefault ("ns3::RedQueue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
-      Config::SetDefault ("ns3::RedQueue::QueueLimit", UintegerValue (maxPackets));
-    }
-  else 
-    {
-      Config::SetDefault ("ns3::DropTailQueue::Mode", StringValue ("QUEUE_MODE_BYTES"));
-      Config::SetDefault ("ns3::DropTailQueue::MaxBytes", UintegerValue (maxPackets * pktSize));
-      Config::SetDefault ("ns3::RedQueue::Mode", StringValue ("QUEUE_MODE_BYTES"));
-      Config::SetDefault ("ns3::RedQueue::QueueLimit", UintegerValue (maxPackets * pktSize));
-      minTh *= pktSize; 
-      maxTh *= pktSize;
-    }
-
-  // Create the point-to-point link helpers
-  PointToPointHelper bottleNeckLink;
-  bottleNeckLink.SetDeviceAttribute  ("DataRate", StringValue (bottleNeckLinkBw));
-  bottleNeckLink.SetChannelAttribute ("Delay", StringValue (bottleNeckLinkDelay));
-  if (queueType == "RED")
-    {
-      bottleNeckLink.SetQueue ("ns3::RedQueue",
-                               "MinTh", DoubleValue (minTh),
-                               "MaxTh", DoubleValue (maxTh),
-                               "LinkBandwidth", StringValue (bottleNeckLinkBw),
-                               "LinkDelay", StringValue (bottleNeckLinkDelay));
-    }
-  PointToPointHelper pointToPointLeaf;
-  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
-  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
-
-  PointToPointDumbbellHelper d (nLeaf, pointToPointLeaf,
-                                nLeaf, pointToPointLeaf,
-                                bottleNeckLink);
-
-  // Install Stack
-  InternetStackHelper stack;
-  d.InstallStack (stack);
-
-  // Assign IP Addresses
-  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
-                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
-
-  // Install on/off app on all right side nodes
-  OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());
-  clientHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  clientHelper.SetAttribute ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
-  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
-  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
-  ApplicationContainer sinkApps; 
-  for (uint32_t i = 0; i < d.LeftCount (); ++i)
-    {
-      sinkApps.Add (packetSinkHelper.Install (d.GetLeft (i)));
-    }
-  sinkApps.Start (Seconds (0.0));
-  sinkApps.Stop (Seconds (30.0));
-
-  ApplicationContainer clientApps;
-  for (uint32_t i = 0; i < d.RightCount (); ++i)
-    {
-      // Create an on/off app sending packets to the left side
-      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), port));
-      clientHelper.SetAttribute ("Remote", remoteAddress);
-      clientApps.Add (clientHelper.Install (d.GetRight (i)));
-    }
-  clientApps.Start (Seconds (1.0)); // Start 1 second after sink
-  clientApps.Stop (Seconds (15.0)); // Stop before the sink
-
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  std::cout << "Running the simulation" << std::endl;
-  Simulator::Run ();
-
-  uint32_t totalRxBytesCounter = 0;
-  for (uint32_t i = 0; i < sinkApps.GetN (); i++)
-    {
-      Ptr <Application> app = sinkApps.Get (i);
-      Ptr <PacketSink> pktSink = DynamicCast <PacketSink> (app);
-      totalRxBytesCounter += pktSink->GetTotalRx ();
-    }
-  NS_LOG_UNCOND ("----------------------------\nQueue Type:" 
-                 << queueType 
-                 << "\nGoodput Bytes/sec:" 
-                 << totalRxBytesCounter/Simulator::Now ().GetSeconds ()); 
-  NS_LOG_UNCOND ("----------------------------");
-
-
-  std::cout << "Destroying the simulation" << std::endl;
-  Simulator::Destroy ();
-  return 0;
-}
diff -Naur ns-3.24.1/src/network/examples/red-tests.cc ns-3.25/src/network/examples/red-tests.cc
--- ns-3.24.1/src/network/examples/red-tests.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/examples/red-tests.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,470 +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
- *
- * Authors: Marcos Talau <talau@users.sourceforge.net>
- *          Duy Nguyen <duy@soe.ucsc.edu>
- *
- */
-
-/**
- * These validation tests are detailed in http://icir.org/floyd/papers/redsims.ps
- *
- * In this code the tests 1, 3, 4 and 5 refer to the tests corresponding to
- * Figure 1, 3, 4, and 5 respectively from the document mentioned above.
- */
-
-/** Network topology
- *
- *    10Mb/s, 2ms                            10Mb/s, 4ms
- * n0--------------|                    |---------------n4
- *                 |   1.5Mbps/s, 20ms  |
- *                 n2------------------n3
- *    10Mb/s, 3ms  |                    |    10Mb/s, 5ms
- * n1--------------|                    |---------------n5
- *
- *
- */
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/flow-monitor-helper.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/applications-module.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("RedTests");
-
-uint32_t checkTimes;
-double avgQueueSize;
-
-// The times
-double global_start_time;
-double global_stop_time;
-double sink_start_time;
-double sink_stop_time;
-double client_start_time;
-double client_stop_time;
-
-NodeContainer n0n2;
-NodeContainer n1n2;
-NodeContainer n2n3;
-NodeContainer n3n4;
-NodeContainer n3n5;
-
-Ipv4InterfaceContainer i0i2;
-Ipv4InterfaceContainer i1i2;
-Ipv4InterfaceContainer i2i3;
-Ipv4InterfaceContainer i3i4;
-Ipv4InterfaceContainer i3i5;
-
-std::stringstream filePlotQueue;
-std::stringstream filePlotQueueAvg;
-
-void
-CheckQueueSize (Ptr<Queue> queue)
-{
-  uint32_t qSize = StaticCast<RedQueue> (queue)->GetQueueSize ();
-
-  avgQueueSize += qSize;
-  checkTimes++;
-
-  // check queue size every 1/100 of a second
-  Simulator::Schedule (Seconds (0.01), &CheckQueueSize, queue);
-
-  std::ofstream fPlotQueue (filePlotQueue.str ().c_str (), std::ios::out|std::ios::app);
-  fPlotQueue << Simulator::Now ().GetSeconds () << " " << qSize << std::endl;
-  fPlotQueue.close ();
-
-  std::ofstream fPlotQueueAvg (filePlotQueueAvg.str ().c_str (), std::ios::out|std::ios::app);
-  fPlotQueueAvg << Simulator::Now ().GetSeconds () << " " << avgQueueSize / checkTimes << std::endl;
-  fPlotQueueAvg.close ();
-}
-
-void
-BuildAppsTest (uint32_t test)
-{
-  if ( (test == 1) || (test == 3) )
-    {
-      // SINK is in the right side
-      uint16_t port = 50000;
-      Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
-      PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
-      ApplicationContainer sinkApp = sinkHelper.Install (n3n4.Get (1));
-      sinkApp.Start (Seconds (sink_start_time));
-      sinkApp.Stop (Seconds (sink_stop_time));
-
-      // Connection one
-      // Clients are in left side
-      /*
-       * Create the OnOff applications to send TCP to the server
-       * onoffhelper is a client that send data to TCP destination
-       */
-      OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
-      clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper1.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
-      clientHelper1.SetAttribute 
-        ("PacketSize", UintegerValue (1000));
-
-      ApplicationContainer clientApps1;
-      AddressValue remoteAddress
-        (InetSocketAddress (i3i4.GetAddress (1), port));
-      clientHelper1.SetAttribute ("Remote", remoteAddress);
-      clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
-      clientApps1.Start (Seconds (client_start_time));
-      clientApps1.Stop (Seconds (client_stop_time));
-
-      // Connection two
-      OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
-      clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper2.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
-      clientHelper2.SetAttribute 
-        ("PacketSize", UintegerValue (1000));
-
-      ApplicationContainer clientApps2;
-      clientHelper2.SetAttribute ("Remote", remoteAddress);
-      clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
-      clientApps2.Start (Seconds (3.0));
-      clientApps2.Stop (Seconds (client_stop_time));
-    }
-  else // 4 or 5
-    {
-      // SINKs
-      // #1
-      uint16_t port1 = 50001;
-      Address sinkLocalAddress1 (InetSocketAddress (Ipv4Address::GetAny (), port1));
-      PacketSinkHelper sinkHelper1 ("ns3::TcpSocketFactory", sinkLocalAddress1);
-      ApplicationContainer sinkApp1 = sinkHelper1.Install (n3n4.Get (1));
-      sinkApp1.Start (Seconds (sink_start_time));
-      sinkApp1.Stop (Seconds (sink_stop_time));
-      // #2
-      uint16_t port2 = 50002;
-      Address sinkLocalAddress2 (InetSocketAddress (Ipv4Address::GetAny (), port2));
-      PacketSinkHelper sinkHelper2 ("ns3::TcpSocketFactory", sinkLocalAddress2);
-      ApplicationContainer sinkApp2 = sinkHelper2.Install (n3n5.Get (1));
-      sinkApp2.Start (Seconds (sink_start_time));
-      sinkApp2.Stop (Seconds (sink_stop_time));
-      // #3
-      uint16_t port3 = 50003;
-      Address sinkLocalAddress3 (InetSocketAddress (Ipv4Address::GetAny (), port3));
-      PacketSinkHelper sinkHelper3 ("ns3::TcpSocketFactory", sinkLocalAddress3);
-      ApplicationContainer sinkApp3 = sinkHelper3.Install (n0n2.Get (0));
-      sinkApp3.Start (Seconds (sink_start_time));
-      sinkApp3.Stop (Seconds (sink_stop_time));
-      // #4
-      uint16_t port4 = 50004;
-      Address sinkLocalAddress4 (InetSocketAddress (Ipv4Address::GetAny (), port4));
-      PacketSinkHelper sinkHelper4 ("ns3::TcpSocketFactory", sinkLocalAddress4);
-      ApplicationContainer sinkApp4 = sinkHelper4.Install (n1n2.Get (0));
-      sinkApp4.Start (Seconds (sink_start_time));
-      sinkApp4.Stop (Seconds (sink_stop_time));
-
-      // Connection #1
-      /*
-       * Create the OnOff applications to send TCP to the server
-       * onoffhelper is a client that send data to TCP destination
-       */
-      OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
-      clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper1.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
-      clientHelper1.SetAttribute 
-        ("PacketSize", UintegerValue (1000));
-
-      ApplicationContainer clientApps1;
-      AddressValue remoteAddress1
-        (InetSocketAddress (i3i4.GetAddress (1), port1));
-      clientHelper1.SetAttribute ("Remote", remoteAddress1);
-      clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
-      clientApps1.Start (Seconds (client_start_time));
-      clientApps1.Stop (Seconds (client_stop_time));
-
-      // Connection #2
-      OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
-      clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper2.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
-      clientHelper2.SetAttribute 
-        ("PacketSize", UintegerValue (1000));
-
-      ApplicationContainer clientApps2;
-      AddressValue remoteAddress2
-        (InetSocketAddress (i3i5.GetAddress (1), port2));
-      clientHelper2.SetAttribute ("Remote", remoteAddress2);
-      clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
-      clientApps2.Start (Seconds (2.0));
-      clientApps2.Stop (Seconds (client_stop_time));
-
-      // Connection #3
-      OnOffHelper clientHelper3 ("ns3::TcpSocketFactory", Address ());
-      clientHelper3.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper3.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper3.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
-      clientHelper3.SetAttribute 
-        ("PacketSize", UintegerValue (1000));
-
-      ApplicationContainer clientApps3;
-      AddressValue remoteAddress3
-        (InetSocketAddress (i0i2.GetAddress (0), port3));
-      clientHelper3.SetAttribute ("Remote", remoteAddress3);
-      clientApps3.Add (clientHelper3.Install (n3n4.Get (1)));
-      clientApps3.Start (Seconds (3.5));
-      clientApps3.Stop (Seconds (client_stop_time));
-
-      // Connection #4
-      OnOffHelper clientHelper4 ("ns3::TcpSocketFactory", Address ());
-      clientHelper4.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-      clientHelper4.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-      clientHelper4.SetAttribute 
-        ("DataRate", DataRateValue (DataRate ("40b/s")));
-      clientHelper4.SetAttribute 
-        ("PacketSize", UintegerValue (5 * 8)); // telnet
-
-      ApplicationContainer clientApps4;
-      AddressValue remoteAddress4
-        (InetSocketAddress (i1i2.GetAddress (0), port4));
-      clientHelper4.SetAttribute ("Remote", remoteAddress4);
-      clientApps4.Add (clientHelper4.Install (n3n5.Get (1)));
-      clientApps4.Start (Seconds (1.0));
-      clientApps4.Stop (Seconds (client_stop_time));
-    }
-}
-
-int
-main (int argc, char *argv[])
-{
-  // LogComponentEnable ("RedExamples", LOG_LEVEL_INFO);
-  // LogComponentEnable ("TcpNewReno", LOG_LEVEL_INFO);
-  // LogComponentEnable ("RedQueue", LOG_LEVEL_FUNCTION);
-  LogComponentEnable ("RedQueue", LOG_LEVEL_INFO);
-
-  uint32_t redTest;
-  std::string redLinkDataRate = "1.5Mbps";
-  std::string redLinkDelay = "20ms";
-
-  std::string pathOut;
-  bool writeForPlot = false;
-  bool writePcap = false;
-  bool flowMonitor = false;
-
-  bool printRedStats = true;
-
-  global_start_time = 0.0;
-  global_stop_time = 11; 
-  sink_start_time = global_start_time;
-  sink_stop_time = global_stop_time + 3.0;
-  client_start_time = sink_start_time + 0.2;
-  client_stop_time = global_stop_time - 2.0;
-
-  // Configuration and command line parameter parsing
-  redTest = 1;
-  // Will only save in the directory if enable opts below
-  pathOut = "."; // Current directory
-  CommandLine cmd;
-  cmd.AddValue ("testNumber", "Run test 1, 3, 4 or 5", redTest);
-  cmd.AddValue ("pathOut", "Path to save results from --writeForPlot/--writePcap/--writeFlowMonitor", pathOut);
-  cmd.AddValue ("writeForPlot", "<0/1> to write results for plot (gnuplot)", writeForPlot);
-  cmd.AddValue ("writePcap", "<0/1> to write results in pcapfile", writePcap);
-  cmd.AddValue ("writeFlowMonitor", "<0/1> to enable Flow Monitor and write their results", flowMonitor);
-
-  cmd.Parse (argc, argv);
-  if ( (redTest != 1) && (redTest != 3) && (redTest != 4) && (redTest != 5) )
-    {
-      NS_ABORT_MSG ("Invalid test number. Supported tests are 1, 3, 4 or 5");
-    }
-
-  NS_LOG_INFO ("Create nodes");
-  NodeContainer c;
-  c.Create (6);
-  Names::Add ( "N0", c.Get (0));
-  Names::Add ( "N1", c.Get (1));
-  Names::Add ( "N2", c.Get (2));
-  Names::Add ( "N3", c.Get (3));
-  Names::Add ( "N4", c.Get (4));
-  Names::Add ( "N5", c.Get (5));
-  n0n2 = NodeContainer (c.Get (0), c.Get (2));
-  n1n2 = NodeContainer (c.Get (1), c.Get (2));
-  n2n3 = NodeContainer (c.Get (2), c.Get (3));
-  n3n4 = NodeContainer (c.Get (3), c.Get (4));
-  n3n5 = NodeContainer (c.Get (3), c.Get (5));
-
-  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpReno"));
-  // 42 = headers size
-  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000 - 42));
-  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
-  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (false));
-
-  uint32_t meanPktSize = 500;
-
-  // RED params
-  NS_LOG_INFO ("Set RED params");
-  Config::SetDefault ("ns3::RedQueue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
-  Config::SetDefault ("ns3::RedQueue::MeanPktSize", UintegerValue (meanPktSize));
-  Config::SetDefault ("ns3::RedQueue::Wait", BooleanValue (true));
-  Config::SetDefault ("ns3::RedQueue::Gentle", BooleanValue (true));
-  Config::SetDefault ("ns3::RedQueue::QW", DoubleValue (0.002));
-  Config::SetDefault ("ns3::RedQueue::MinTh", DoubleValue (5));
-  Config::SetDefault ("ns3::RedQueue::MaxTh", DoubleValue (15));
-  Config::SetDefault ("ns3::RedQueue::QueueLimit", UintegerValue (25));
-
-  if (redTest == 3) // test like 1, but with bad params
-    {
-      Config::SetDefault ("ns3::RedQueue::MaxTh", DoubleValue (10));
-      Config::SetDefault ("ns3::RedQueue::QW", DoubleValue (0.003));
-    }
-  else if (redTest == 5) // test 5, same of test 4, but in byte mode
-    {
-      Config::SetDefault ("ns3::RedQueue::Mode", StringValue ("QUEUE_MODE_BYTES"));
-      Config::SetDefault ("ns3::RedQueue::Ns1Compat", BooleanValue (true));
-      Config::SetDefault ("ns3::RedQueue::MinTh", DoubleValue (5 * meanPktSize));
-      Config::SetDefault ("ns3::RedQueue::MaxTh", DoubleValue (15 * meanPktSize));
-      Config::SetDefault ("ns3::RedQueue::QueueLimit", UintegerValue (25 * meanPktSize));
-    }
-
-  NS_LOG_INFO ("Install internet stack on all nodes.");
-  InternetStackHelper internet;
-  internet.Install (c);
-
-  NS_LOG_INFO ("Create channels");
-  PointToPointHelper p2p;
-
-  p2p.SetQueue ("ns3::DropTailQueue");
-  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
-  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
-  NetDeviceContainer devn0n2 = p2p.Install (n0n2);
-
-  p2p.SetQueue ("ns3::DropTailQueue");
-  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
-  p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
-  NetDeviceContainer devn1n2 = p2p.Install (n1n2);
-
-  p2p.SetQueue ("ns3::RedQueue", // only backbone link has RED queue
-                "LinkBandwidth", StringValue (redLinkDataRate),
-                "LinkDelay", StringValue (redLinkDelay)); 
-  p2p.SetDeviceAttribute ("DataRate", StringValue (redLinkDataRate));
-  p2p.SetChannelAttribute ("Delay", StringValue (redLinkDelay));
-  NetDeviceContainer devn2n3 = p2p.Install (n2n3);
-
-  p2p.SetQueue ("ns3::DropTailQueue");
-  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
-  p2p.SetChannelAttribute ("Delay", StringValue ("4ms"));
-  NetDeviceContainer devn3n4 = p2p.Install (n3n4);
-
-  p2p.SetQueue ("ns3::DropTailQueue");
-  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
-  p2p.SetChannelAttribute ("Delay", StringValue ("5ms"));
-  NetDeviceContainer devn3n5 = p2p.Install (n3n5);
-
-  NS_LOG_INFO ("Assign IP Addresses");
-  Ipv4AddressHelper ipv4;
-
-  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
-  i0i2 = ipv4.Assign (devn0n2);
-
-  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
-  i1i2 = ipv4.Assign (devn1n2);
-
-  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
-  i2i3 = ipv4.Assign (devn2n3);
-
-  ipv4.SetBase ("10.1.4.0", "255.255.255.0");
-  i3i4 = ipv4.Assign (devn3n4);
-
-  ipv4.SetBase ("10.1.5.0", "255.255.255.0");
-  i3i5 = ipv4.Assign (devn3n5);
-
-  // Set up the routing
-  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
-
-  if (redTest == 5) 
-    {
-      // like in ns2 test, r2 -> r1, have a queue in packet mode
-      Ptr<PointToPointNetDevice> nd = StaticCast<PointToPointNetDevice> (devn2n3.Get (1));
-      Ptr<Queue> queue = nd->GetQueue ();
-
-      StaticCast<RedQueue> (queue)->SetMode (RedQueue::QUEUE_MODE_PACKETS);
-      StaticCast<RedQueue> (queue)->SetTh (5, 15);
-      StaticCast<RedQueue> (queue)->SetQueueLimit (25);
-    }
-
-  BuildAppsTest (redTest);
-
-  if (writePcap)
-    {
-      PointToPointHelper ptp;
-      std::stringstream stmp;
-      stmp << pathOut << "/red";
-      ptp.EnablePcapAll (stmp.str ().c_str ());
-    }
-
-  Ptr<FlowMonitor> flowmon;
-  if (flowMonitor)
-    {
-      FlowMonitorHelper flowmonHelper;
-      flowmon = flowmonHelper.InstallAll ();
-    }
-
-  if (writeForPlot)
-    {
-      filePlotQueue << pathOut << "/" << "red-queue.plotme";
-      filePlotQueueAvg << pathOut << "/" << "red-queue_avg.plotme";
-
-      remove (filePlotQueue.str ().c_str ());
-      remove (filePlotQueueAvg.str ().c_str ());
-      Ptr<PointToPointNetDevice> nd = StaticCast<PointToPointNetDevice> (devn2n3.Get (0));
-      Ptr<Queue> queue = nd->GetQueue ();
-      Simulator::ScheduleNow (&CheckQueueSize, queue);
-    }
-
-  Simulator::Stop (Seconds (sink_stop_time));
-  Simulator::Run ();
-
-  if (flowMonitor)
-    {
-      std::stringstream stmp;
-      stmp << pathOut << "/red.flowmon";
-
-      flowmon->SerializeToXmlFile (stmp.str ().c_str (), false, false);
-    }
-
-  if (printRedStats)
-    {
-      Ptr<PointToPointNetDevice> nd = StaticCast<PointToPointNetDevice> (devn2n3.Get (0));
-      RedQueue::Stats st = StaticCast<RedQueue> (nd->GetQueue ())->GetStats ();
-      std::cout << "*** RED stats from Node 2 queue ***" << std::endl;
-      std::cout << "\t " << st.unforcedDrop << " drops due prob mark" << std::endl;
-      std::cout << "\t " << st.forcedDrop << " drops due hard mark" << std::endl;
-      std::cout << "\t " << st.qLimDrop << " drops due queue full" << std::endl;
-
-      nd = StaticCast<PointToPointNetDevice> (devn2n3.Get (1));
-      st = StaticCast<RedQueue> (nd->GetQueue ())->GetStats ();
-      std::cout << "*** RED stats from Node 3 queue ***" << std::endl;
-      std::cout << "\t " << st.unforcedDrop << " drops due prob mark" << std::endl;
-      std::cout << "\t " << st.forcedDrop << " drops due hard mark" << std::endl;
-      std::cout << "\t " << st.qLimDrop << " drops due queue full" << std::endl;
-    }
-
-  Simulator::Destroy ();
-
-  return 0;
-}
diff -Naur ns-3.24.1/src/network/examples/wscript ns-3.25/src/network/examples/wscript
--- ns-3.24.1/src/network/examples/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -10,11 +10,5 @@
     obj = bld.create_ns3_program('main-packet-tag', ['network'])
     obj.source = 'main-packet-tag.cc'
 
-    obj = bld.create_ns3_program('red-tests', ['point-to-point', 'internet', 'applications', 'flow-monitor'])
-    obj.source = 'red-tests.cc'
-
-    obj = bld.create_ns3_program('droptail_vs_red', ['point-to-point', 'point-to-point-layout', 'internet', 'applications'])
-    obj.source = 'droptail_vs_red.cc'
-
     obj = bld.create_ns3_program('packet-socket-apps', ['core', 'network'])
     obj.source = 'packet-socket-apps.cc'
diff -Naur ns-3.24.1/src/network/helper/trace-helper.h ns-3.25/src/network/helper/trace-helper.h
--- ns-3.24.1/src/network/helper/trace-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/helper/trace-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -50,7 +50,7 @@
     DLT_PPP = 9,
     DLT_RAW = 101,
     DLT_IEEE802_11 = 105,
-    DLT_LINUX_SSL = 113,
+    DLT_LINUX_SLL = 113,
     DLT_PRISM_HEADER = 119,
     DLT_IEEE802_11_RADIO = 127,
     DLT_IEEE802_15_4 = 195,
diff -Naur ns-3.24.1/src/network/model/header.h ns-3.25/src/network/model/header.h
--- ns-3.24.1/src/network/model/header.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/header.h	2016-03-23 21:36:53.000000000 -0700
@@ -89,8 +89,8 @@
   /**
    * \param os output stream
    * This method is used by Packet::Print to print the 
-   * content of a trailer as ascii data to a c++ output stream.
-   * Although the trailer is free to format its output as it
+   * content of a header as ascii data to a c++ output stream.
+   * Although the header is free to format its output as it
    * wishes, it is recommended to follow a few rules to integrate
    * with the packet pretty printer: start with flags, small field 
    * values located between a pair of parens. Values should be separated 
diff -Naur ns-3.24.1/src/network/model/net-device.cc ns-3.25/src/network/model/net-device.cc
--- ns-3.24.1/src/network/model/net-device.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -20,13 +20,201 @@
 
 #include "ns3/object.h"
 #include "ns3/log.h"
+#include "ns3/abort.h"
 #include "ns3/uinteger.h"
 #include "net-device.h"
+#include "packet.h"
 
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("NetDevice");
 
+QueueItem::QueueItem (Ptr<Packet> p)
+{
+  m_packet = p;
+}
+
+QueueItem::~QueueItem()
+{
+  NS_LOG_FUNCTION (this);
+  m_packet = 0;
+}
+
+Ptr<Packet>
+QueueItem::GetPacket (void) const
+{
+  return m_packet;
+}
+
+uint32_t
+QueueItem::GetPacketSize (void) const
+{
+  NS_ASSERT (m_packet != 0);
+  return m_packet->GetSize ();
+}
+
+void
+QueueItem::Print (std::ostream& os) const
+{
+  os << GetPacket();
+}
+
+std::ostream & operator << (std::ostream &os, const QueueItem &item)
+{
+  item.Print (os);
+  return os;
+}
+
+NetDeviceQueue::NetDeviceQueue()
+  : m_stopped (false)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+NetDeviceQueue::~NetDeviceQueue ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+NetDeviceQueue::IsStopped (void) const
+{
+  return m_stopped;
+}
+
+void
+NetDeviceQueue::Start (void)
+{
+  m_stopped = false;
+}
+
+void
+NetDeviceQueue::Stop (void)
+{
+  m_stopped = true;
+}
+
+void
+NetDeviceQueue::Wake (void)
+{
+  Start ();
+
+  // Request the queue disc to dequeue a packet
+  if (!m_wakeCallback.IsNull ())
+  {
+      m_wakeCallback ();
+  }
+}
+
+void
+NetDeviceQueue::SetWakeCallback (WakeCallback cb)
+{
+  m_wakeCallback = cb;
+}
+
+bool
+NetDeviceQueue::HasWakeCallbackSet (void) const
+{
+  return (!m_wakeCallback.IsNull ());
+}
+
+
+NS_OBJECT_ENSURE_REGISTERED (NetDeviceQueueInterface);
+
+TypeId NetDeviceQueueInterface::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::NetDeviceQueueInterface")
+    .SetParent<Object> ()
+    .SetGroupName("Network")
+  ;
+  return tid;
+}
+
+NetDeviceQueueInterface::NetDeviceQueueInterface ()
+  : m_queueDiscInstalled (false)
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<NetDeviceQueue> devQueue = Create<NetDeviceQueue> ();
+  m_txQueuesVector.push_back (devQueue);
+}
+
+NetDeviceQueueInterface::~NetDeviceQueueInterface ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Ptr<NetDeviceQueue>
+NetDeviceQueueInterface::GetTxQueue (uint8_t i) const
+{
+  NS_ASSERT (i < m_txQueuesVector.size ());
+  return m_txQueuesVector[i];
+}
+
+uint8_t
+NetDeviceQueueInterface::GetTxQueuesN (void) const
+{
+  return m_txQueuesVector.size ();
+}
+
+void
+NetDeviceQueueInterface::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_txQueuesVector.clear ();
+  Object::DoDispose ();
+}
+
+void
+NetDeviceQueueInterface::SetTxQueuesN (uint8_t numTxQueues)
+{
+  NS_ASSERT (numTxQueues > 0);
+
+  // check whether a queue disc has been installed on the device by
+  // verifying whether a wake callback has been set on a transmission queue
+  NS_ABORT_MSG_IF (GetTxQueue (0)->HasWakeCallbackSet (), "Cannot change the number of"
+                   " transmission queues after setting up the wake callback.");
+
+  uint8_t prevNumTxQueues = m_txQueuesVector.size ();
+  m_txQueuesVector.resize (numTxQueues);
+
+  // Allocate new NetDeviceQueues if the number of queues increased
+  for (uint8_t i = prevNumTxQueues; i < numTxQueues; i++)
+    {
+      Ptr<NetDeviceQueue> devQueue = Create<NetDeviceQueue> ();
+      m_txQueuesVector[i] = devQueue;
+    }
+}
+
+void
+NetDeviceQueueInterface::SetSelectQueueCallback (SelectQueueCallback cb)
+{
+  m_selectQueueCallback = cb;
+}
+
+uint8_t
+NetDeviceQueueInterface::GetSelectedQueue (Ptr<QueueItem> item) const
+{
+  if (!m_selectQueueCallback.IsNull ())
+  {
+    return m_selectQueueCallback (item);
+  }
+  return 0;
+}
+
+bool
+NetDeviceQueueInterface::IsQueueDiscInstalled (void) const
+{
+  return m_queueDiscInstalled;
+}
+
+void
+NetDeviceQueueInterface::SetQueueDiscInstalled (bool installed)
+{
+  NS_LOG_FUNCTION (this << installed);
+  m_queueDiscInstalled = installed;
+}
+
+
 NS_OBJECT_ENSURE_REGISTERED (NetDevice);
 
 TypeId NetDevice::GetTypeId (void)
diff -Naur ns-3.24.1/src/network/model/net-device.h ns-3.25/src/network/model/net-device.h
--- ns-3.24.1/src/network/model/net-device.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/net-device.h	2016-03-23 21:36:53.000000000 -0700
@@ -17,11 +17,13 @@
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Modified by Emmanuelle Laprise to remove dependence on LLC headers
+ * Modified by Stefano Avallone to add NetDeviceQueue and NetDeviceQueueInterface
  */
 #ifndef NET_DEVICE_H
 #define NET_DEVICE_H
 
 #include <string>
+#include <vector>
 #include <stdint.h>
 #include "ns3/callback.h"
 #include "ns3/object.h"
@@ -40,6 +42,266 @@
  * \ingroup network
  * \defgroup netdevice Network Device
  */
+
+/**
+ * \ingroup netdevice
+ * \brief Base class to represent items of packet Queues
+ *
+ * An item stored in an ns-3 packet Queue contains a packet and possibly other
+ * information. An item of the base class only contains a packet. Subclasses
+ * can be derived from this base class to allow items to contain additional
+ * information.
+ */
+class QueueItem : public SimpleRefCount<QueueItem>
+{
+public:
+  /**
+   * \brief Create a queue item containing a packet.
+   * \param p the packet included in the created item.
+   */
+  QueueItem (Ptr<Packet> p);
+
+  virtual ~QueueItem ();
+
+  /**
+   * \return the packet included in this item.
+   */
+  Ptr<Packet> GetPacket (void) const;
+
+  /**
+   * \brief Use this method (instead of GetPacket ()->GetSize ()) to get the packet size
+   *
+   * Subclasses may keep header and payload separate to allow manipulating the header,
+   * so using this method ensures that the correct packet size is returned.
+   *
+   * \return the size of the packet included in this item.
+   */
+  virtual uint32_t GetPacketSize (void) const;
+
+  /**
+   * \brief Print the item contents.
+   * \param os output stream in which the data should be printed.
+   */
+  virtual void Print (std::ostream &os) const;
+
+  /**
+   * TracedCallback signature for Ptr<QueueItem>
+   *
+   * \param [in] item The queue item.
+   */
+  typedef void (* TracedCallback) (Ptr<const QueueItem> item);
+
+private:
+  /**
+   * \brief Default constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  QueueItem ();
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  QueueItem (const QueueItem &);
+  /**
+   * \brief Assignment operator
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  QueueItem &operator = (const QueueItem &);
+
+  Ptr<Packet> m_packet;
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param item the item
+ * \returns a reference to the stream
+ */
+std::ostream& operator<< (std::ostream& os, const QueueItem &item);
+
+/**
+ * \ingroup netdevice
+ *
+ * \brief Network device transmission queue
+ *
+ * This class stores information about a single transmission queue
+ * of a network device that is exposed to queue discs. Such information
+ * includes the state of the transmission queue (whether it has been
+ * stopped or not) and data used by techniques such as Byte Queue Limits.
+ *
+ * This class roughly models the struct netdev_queue of Linux.
+ * \todo Implement BQL
+ */
+class NetDeviceQueue : public SimpleRefCount<NetDeviceQueue>
+{
+public:
+  NetDeviceQueue ();
+  virtual ~NetDeviceQueue();
+
+  /**
+   * Called by the device to start this (hardware) transmission queue.
+   * This is the analogous to the netif_tx_start_queue function of the Linux kernel.
+   */
+  virtual void Start (void);
+
+  /**
+   * Called by the device to stop this (hardware) transmission queue.
+   * This is the analogous to the netif_tx_stop_queue function of the Linux kernel.
+   */
+  virtual void Stop (void);
+
+  /**
+   * Called by the device to wake the queue disc associated with this
+   * (hardware) transmission queue. This is done by invoking the wake callback.
+   * This is the analogous to the netif_tx_wake_queue function of the Linux kernel.
+   */
+  virtual void Wake (void);
+
+  /**
+   * \brief Get the status of the device transmission queue.
+   * \return true if the (hardware) transmission queue is stopped.
+   *
+   * Called by queue discs to enquire about the status of a given transmission queue.
+   * This is the analogous to the netif_tx_queue_stopped function of the Linux kernel.
+   */
+  bool IsStopped (void) const;
+
+  /// Callback invoked by netdevices to wake upper layers
+  typedef Callback< void > WakeCallback;
+
+  /**
+   * \brief Set the wake callback
+   * \param cb the callback to set
+   *
+   * Called by the traffic control layer to set the wake callback. The wake callback
+   * is invoked by the device whenever it is needed to "wake" the upper layers (i.e.,
+   * solicitate the queue disc associated with this transmission queue (in case of
+   * multi-queue aware queue discs) or to the network device (otherwise) to send
+   * packets down to the device).
+   */
+  virtual void SetWakeCallback (WakeCallback cb);
+
+  /**
+   * \brief Check whether a wake callback has been set on this device queue.
+   * \return true if the wake callback has been set.
+   */
+  virtual bool HasWakeCallbackSet (void) const;
+
+private:
+  bool m_stopped;   //!< Status of the transmission queue
+  WakeCallback m_wakeCallback;   //!< Wake callback
+};
+
+
+/**
+ * \ingroup netdevice
+ *
+ * \brief Network device transmission queue interface
+ *
+ * This interface is required by the traffic control layer to access the information
+ * about the status of the transmission queues of a device. Thus, every NetDevice
+ * (but loopback) needs to create this interface. NetDevices supporting flow control
+ * can start and stop their device transmission queues and wake the upper layers through
+ * this interface. By default, a NetDeviceQueueInterface object is created with a single
+ * device transmission queue. Therefore, multi-queue devices need to call SetTxQueuesN
+ * to create additional queues (before a root queue disc is installed, i.e., typically
+ * before an IPv4/IPv6 address is assigned to the device), implement a GetSelectedQueue
+ * method and pass a callback to such a method through the SetSelectedQueueCallback method.
+ */
+class NetDeviceQueueInterface : public Object
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Constructor
+   *
+   * Creates one NetDeviceQueue by default
+   */
+  NetDeviceQueueInterface ();
+  virtual ~NetDeviceQueueInterface ();
+
+  /**
+   * \brief Get the i-th transmission queue of the device.
+   * \return the i-th transmission queue of the device.
+   *
+   * The index of the first transmission queue is zero.
+   */
+  Ptr<NetDeviceQueue> GetTxQueue (uint8_t i) const;
+
+  /**
+   * \brief Get the number of device transmission queues.
+   * \return the number of device transmission queues.
+   */
+  uint8_t GetTxQueuesN (void) const;
+
+  /**
+   * \brief Set the number of device transmission queues.
+   * \param numTxQueues number of device transmission queues.
+   *
+   * Called by a device to set the number of device transmission queues.
+   * This method can be called by a NetDevice at initialization time only, because
+   * it is not possible to change the number of device transmission queues after
+   * the wake callbacks have been set on the device queues.
+   */
+  void SetTxQueuesN (uint8_t numTxQueues);
+
+  /// Callback invoked to determine the tx queue selected for a given packet
+  typedef Callback< uint8_t, Ptr<QueueItem> > SelectQueueCallback;
+
+  /**
+   * \brief Set the select queue callback
+   * \param cb the callback to set
+   *
+   * Called by a device to set the select queue callback, i.e., the method used
+   * to select a device transmission queue for a given packet
+   */
+  void SetSelectQueueCallback (SelectQueueCallback cb);
+
+  /**
+   * \brief Get the id of the transmission queue selected for the given packet
+   * \return the id of the transmission queue selected for the given packet
+   *
+   * Called by the traffic control when it needs to determine which device
+   * transmission queue a given packet must be enqueued into. This function
+   * calls the select queue callback, if set by the device. Return 0 otherwise.
+   */
+  uint8_t GetSelectedQueue (Ptr<QueueItem> item) const;
+
+  /**
+   * \brief Return true if a queue disc is installed on the device.
+   * \return true if a queue disc is installed on the device.
+   */
+  bool IsQueueDiscInstalled (void) const;
+
+  /**
+   * \brief Set the member variable indicating whether a queue disc is installed or not
+   * \param installed the value for the member variable indicating whether a queue disc is installed or not
+   */
+  void SetQueueDiscInstalled (bool installed);
+
+protected:
+  /**
+   * \brief Dispose of the object
+   */
+  virtual void DoDispose (void);
+
+private:
+  std::vector< Ptr<NetDeviceQueue> > m_txQueuesVector;   //!< Device transmission queues
+  SelectQueueCallback m_selectQueueCallback;   //!< Select queue callback
+  bool m_queueDiscInstalled;   //!< Boolean value indicating whether a queue disc is installed or not
+};
+
+
 /**
  * \ingroup netdevice
  *
diff -Naur ns-3.24.1/src/network/model/node.cc ns-3.25/src/network/model/node.cc
--- ns-3.24.1/src/network/model/node.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/node.cc	2016-03-23 21:36:53.000000000 -0700
@@ -110,6 +110,13 @@
   return m_id;
 }
 
+Time
+Node::GetLocalTime (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return Simulator::Now ();
+}
+
 uint32_t
 Node::GetSystemId (void) const
 {
diff -Naur ns-3.24.1/src/network/model/node.h ns-3.25/src/network/model/node.h
--- ns-3.24.1/src/network/model/node.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/node.h	2016-03-23 21:36:53.000000000 -0700
@@ -33,6 +33,7 @@
 class Application;
 class Packet;
 class Address;
+class Time;
 
 
 /**
@@ -78,6 +79,16 @@
   uint32_t GetId (void) const;
 
   /**
+   * In the future, ns3 nodes may have clock that returned a local time
+   * different from the virtual time Simulator::Now().
+   * This function is currently a placeholder to ease the development of this feature.
+   * For now, it is only an alias to Simulator::Now()
+   *
+   * \return The time as seen by this node
+   */
+  Time GetLocalTime (void) const;
+
+  /**
    * \returns the system id for parallel simulations associated
    *          to this node.
    */
diff -Naur ns-3.24.1/src/network/model/packet.cc ns-3.25/src/network/model/packet.cc
--- ns-3.24.1/src/network/model/packet.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/packet.cc	2016-03-23 21:36:53.000000000 -0700
@@ -236,7 +236,9 @@
   PacketMetadata metadata = m_metadata.CreateFragment (start, end);
   // again, call the constructor directly rather than
   // through Create because it is private.
-  return Ptr<Packet> (new Packet (buffer, byteTagList, m_packetTagList, metadata), false);
+  Ptr<Packet> ret = Ptr<Packet> (new Packet (buffer, byteTagList, m_packetTagList, metadata), false);
+  ret->SetNixVector (GetNixVector ());
+  return ret;
 }
 
 void
diff -Naur ns-3.24.1/src/network/model/packet-tag-list.cc ns-3.25/src/network/model/packet-tag-list.cc
--- ns-3.24.1/src/network/model/packet-tag-list.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/packet-tag-list.cc	2016-03-23 21:36:53.000000000 -0700
@@ -247,7 +247,7 @@
   // ensure this id was not yet added
   for (struct TagData *cur = m_next; cur != 0; cur = cur->next) 
     {
-      NS_ASSERT (cur->tid != tag.GetInstanceTypeId ());
+      NS_ASSERT_MSG (cur->tid != tag.GetInstanceTypeId (), "Error: cannot add the same kind of tag twice.");
     }
   struct TagData * head = new struct TagData ();
   head->count = 1;
diff -Naur ns-3.24.1/src/network/model/socket.cc ns-3.25/src/network/model/socket.cc
--- ns-3.24.1/src/network/model/socket.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/socket.cc	2016-03-23 21:36:53.000000000 -0700
@@ -510,6 +510,38 @@
   return m_ipv6RecvHopLimit;
 }
 
+void
+Socket::Ipv6JoinGroup (Ipv6Address address, Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses)
+{
+  NS_LOG_FUNCTION (this<<address<<&filterMode<<&sourceAddresses);
+  NS_ASSERT_MSG (false,"Ipv6JoinGroup not implemented on this socket");
+}
+
+void
+Socket::Ipv6JoinGroup (Ipv6Address address)
+{
+  NS_LOG_FUNCTION (this<<address);
+
+  // Join Group. Note that joining a group with no sources means joining without source restrictions.
+  std::vector<Ipv6Address> sourceAddresses;
+  Ipv6JoinGroup (address, EXCLUDE, sourceAddresses);
+}
+
+void
+Socket::Ipv6LeaveGroup (void)
+{
+  NS_LOG_FUNCTION (this);
+  if(m_ipv6MulticastGroupAddress.IsAny () )
+    {
+      NS_LOG_INFO (" The socket was not bound to any group.");
+      return;
+    }
+  // Leave Group. Note that joining a group with no sources means leaving it.
+  std::vector<Ipv6Address> sourceAddresses;
+  Ipv6JoinGroup (m_ipv6MulticastGroupAddress, INCLUDE, sourceAddresses);
+  m_ipv6MulticastGroupAddress = Ipv6Address::GetAny ();
+}
+
 /***************************************************************
  *           Socket Tags
  ***************************************************************/
diff -Naur ns-3.24.1/src/network/model/socket.h ns-3.25/src/network/model/socket.h
--- ns-3.24.1/src/network/model/socket.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/model/socket.h	2016-03-23 21:36:53.000000000 -0700
@@ -109,6 +109,23 @@
   };
 
   /**
+   * \enum Ipv6MulticastFilterMode
+   * \brief Enumeration of the possible filter of a socket.
+   *
+   * A socket can have filters on specific sources to include only
+   * packets incoming from them, or to exclude packets incoming
+   * from specific sources.
+   * Moreover, inclusion and exclusion also works as a leave,
+   * since "joining" a group without allowed sources is equivalent
+   * to leaving it.
+   */
+  enum Ipv6MulticastFilterMode
+  {
+    INCLUDE=1,
+    EXCLUDE
+  };
+
+  /**
    * This method wraps the creation of sockets that is performed
    * on a given node by a SocketFactory specified by TypeId.
    * 
@@ -561,6 +578,13 @@
   virtual int GetSockName (Address &address) const = 0; 
 
   /**
+   * \brief Get the peer address of a connected socket.
+   * \param address the address this socket is connected to.
+   * \returns 0 if success, -1 otherwise
+   */
+  virtual int GetPeerName (Address &address) const = 0;
+
+  /**
    * \brief Bind a socket to specific device.
    *
    * This method corresponds to using setsockopt() SO_BINDTODEVICE
@@ -817,6 +841,35 @@
    */
   bool IsIpv6RecvHopLimit (void) const;
  
+  /**
+   * \brief Joins a IPv6 multicast group.
+   *
+   * Based on the filter mode and source addresses this can be interpreted as a
+   * join, leave, or modification to source filtering on a multicast group.
+   *
+   * Mind that a socket can join only one multicast group. Any attempt to join another group will remove the old one.
+   *
+   *
+   * \param address Requested multicast address.
+   * \param filterMode Socket filtering mode (INCLUDE | EXCLUDE).
+   * \param sourceAddresses All the source addresses on which socket is interested or not interested.
+   */
+  virtual void Ipv6JoinGroup (Ipv6Address address, Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses);
+
+  /**
+   * \brief Joins a IPv6 multicast group without filters.
+   *
+   * A socket can join only one multicast group. Any attempt to join another group will remove the old one.
+   *
+   * \param address Group address on which socket wants to join.
+   */
+  virtual void Ipv6JoinGroup (Ipv6Address address);
+
+  /**
+   * \brief Leaves IPv6 multicast group this socket is joined to.
+   */
+  virtual void Ipv6LeaveGroup (void);
+
 protected:
   /**
    * \brief Notify through the callback (if set) that the connection has been
@@ -913,6 +966,7 @@
 
   Ptr<NetDevice> m_boundnetdevice; //!< the device this socket is bound to (might be null).
   bool m_recvPktInfo; //!< if the socket should add packet info tags to the packet forwarded to L4.
+  Ipv6Address m_ipv6MulticastGroupAddress; //!< IPv6 multicast group address.
 
 private:
   Callback<void, Ptr<Socket> >                   m_connectionSucceeded;  //!< connection succeeded callback
diff -Naur ns-3.24.1/src/network/test/drop-tail-queue-test-suite.cc ns-3.25/src/network/test/drop-tail-queue-test-suite.cc
--- ns-3.24.1/src/network/test/drop-tail-queue-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/test/drop-tail-queue-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -47,34 +47,34 @@
   p4 = Create<Packet> ();
 
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 0, "There should be no packets in there");
-  queue->Enqueue (p1);
+  queue->Enqueue (Create<QueueItem> (p1));
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 1, "There should be one packet in there");
-  queue->Enqueue (p2);
+  queue->Enqueue (Create<QueueItem> (p2));
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 2, "There should be two packets in there");
-  queue->Enqueue (p3);
+  queue->Enqueue (Create<QueueItem> (p3));
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 3, "There should be three packets in there");
-  queue->Enqueue (p4); // will be dropped
+  queue->Enqueue (Create<QueueItem> (p4)); // will be dropped
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 3, "There should be still three packets in there");
 
-  Ptr<Packet> p;
+  Ptr<QueueItem> item;
 
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the first packet");
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the first packet");
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 2, "There should be two packets in there");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p1->GetUid (), "was this the first packet ?");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->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");
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the second packet");
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 1, "There should be one packet in there");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p2->GetUid (), "Was this the second packet ?");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->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");
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the third packet");
   NS_TEST_EXPECT_MSG_EQ (queue->GetNPackets (), 0, "There should be no packets in there");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p3->GetUid (), "Was this the third packet ?");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->GetUid (), p3->GetUid (), "Was this the third packet ?");
 
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p == 0), true, "There are really no packets in there");
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item == 0), true, "There are really no packets in there");
 }
 
 static class DropTailQueueTestSuite : public TestSuite
diff -Naur ns-3.24.1/src/network/test/examples-to-run.py ns-3.25/src/network/test/examples-to-run.py
--- ns-3.24.1/src/network/test/examples-to-run.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/test/examples-to-run.py	2016-03-23 21:36:53.000000000 -0700
@@ -10,7 +10,6 @@
 cpp_examples = [
     ("main-packet-header", "True", "True"),
     ("main-packet-tag", "True", "True"),
-    ("red-tests", "True", "True"),
 ]
 
 # A list of Python examples to run in order to ensure that they remain
diff -Naur ns-3.24.1/src/network/test/red-queue-test-suite.cc ns-3.25/src/network/test/red-queue-test-suite.cc
--- ns-3.24.1/src/network/test/red-queue-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/test/red-queue-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,281 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright © 2011 Marcos Talau
- *
- * 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: Marcos Talau (talau@users.sourceforge.net)
- *
- */
-
-#include "ns3/test.h"
-#include "ns3/red-queue.h"
-#include "ns3/uinteger.h"
-#include "ns3/string.h"
-#include "ns3/double.h"
-#include "ns3/log.h"
-#include "ns3/simulator.h"
-
-using namespace ns3;
-
-class RedQueueTestCase : public TestCase
-{
-public:
-  RedQueueTestCase ();
-  virtual void DoRun (void);
-private:
-  void Enqueue (Ptr<RedQueue> queue, uint32_t size, uint32_t nPkt);
-  void RunRedTest (StringValue mode);
-};
-
-RedQueueTestCase::RedQueueTestCase ()
-  : TestCase ("Sanity check on the red queue implementation")
-{
-}
-
-void
-RedQueueTestCase::RunRedTest (StringValue mode)
-{
-  uint32_t pktSize = 0;
-  // 1 for packets; pktSize for bytes
-  uint32_t modeSize = 1;
-  double minTh = 2;
-  double maxTh = 5;
-  uint32_t qSize = 8;
-  Ptr<RedQueue> queue = CreateObject<RedQueue> ();
-
-  // test 1: simple enqueue/dequeue with no drops
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.002)), true,
-                         "Verify that we can actually set the attribute QW");
-
-  if (queue->GetMode () == RedQueue::QUEUE_MODE_BYTES)
-    {
-      pktSize = 1000;
-      modeSize = pktSize;
-      queue->SetTh (minTh * pktSize, maxTh * pktSize);
-      queue->SetQueueLimit (qSize * pktSize);
-    }
-
-  Ptr<Packet> p1, p2, p3, p4, p5, p6, p7, p8;
-  p1 = Create<Packet> (pktSize);
-  p2 = Create<Packet> (pktSize);
-  p3 = Create<Packet> (pktSize);
-  p4 = Create<Packet> (pktSize);
-  p5 = Create<Packet> (pktSize);
-  p6 = Create<Packet> (pktSize);
-  p7 = Create<Packet> (pktSize);
-  p8 = Create<Packet> (pktSize);
-
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 0 * modeSize, "There should be no packets in there");
-  queue->Enqueue (p1);
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 1 * modeSize, "There should be one packet in there");
-  queue->Enqueue (p2);
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 2 * modeSize, "There should be two packets in there");
-  queue->Enqueue (p3);
-  queue->Enqueue (p4);
-  queue->Enqueue (p5);
-  queue->Enqueue (p6);
-  queue->Enqueue (p7);
-  queue->Enqueue (p8);
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 8 * modeSize, "There should be eight packets in there");
-
-  Ptr<Packet> p;
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p != 0), true, "I want to remove the first packet");
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 7 * modeSize, "There should be seven packets in there");
-  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");
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 6 * modeSize, "There should be six packet in there");
-  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");
-  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 5 * modeSize, "There should be five packets in there");
-  NS_TEST_EXPECT_MSG_EQ (p->GetUid (), p3->GetUid (), "Was this the third packet ?");
-
-  p = queue->Dequeue ();
-  p = queue->Dequeue ();
-  p = queue->Dequeue ();
-  p = queue->Dequeue ();
-  p = queue->Dequeue ();
-
-  p = queue->Dequeue ();
-  NS_TEST_EXPECT_MSG_EQ ((p == 0), true, "There are really no packets in there");
-
-
-  // test 2: more data, but with no drops
-  queue = CreateObject<RedQueue> ();
-  minTh = 70 * modeSize;
-  maxTh = 150 * modeSize;
-  qSize = 300 * modeSize;
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  Enqueue (queue, pktSize, 300);
-  RedQueue::Stats st = StaticCast<RedQueue> (queue)->GetStats ();
-  NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should zero dropped packets due probability mark");
-  NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should zero dropped packets due hardmark mark");
-  NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should zero dropped packets due queue full");
-
-  // save number of drops from tests
-  struct d {
-    uint32_t test3;
-    uint32_t test4;
-    uint32_t test5;
-    uint32_t test6;
-    uint32_t test7;
-  } drop;
-
-
-  // test 3: more data, now drops due QW change
-  queue = CreateObject<RedQueue> ();
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
-                         "Verify that we can actually set the attribute QW");
-  Enqueue (queue, pktSize, 300);
-  st = StaticCast<RedQueue> (queue)->GetStats ();
-  drop.test3 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
-  NS_TEST_EXPECT_MSG_NE (drop.test3, 0, "There should be some dropped packets");
-
-
-  // test 4: reduced maxTh, this causes more drops
-  maxTh = 100 * modeSize;
-  queue = CreateObject<RedQueue> ();
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
-                         "Verify that we can actually set the attribute QW");
-  Enqueue (queue, pktSize, 300);
-  st = StaticCast<RedQueue> (queue)->GetStats ();
-  drop.test4 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
-  NS_TEST_EXPECT_MSG_GT (drop.test4, drop.test3, "Test 4 should have more drops than test 3");
-
-
-  // test 5: change drop probability to a high value (LInterm)
-  maxTh = 150 * modeSize;
-  queue = CreateObject<RedQueue> ();
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
-                         "Verify that we can actually set the attribute QW");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LInterm", DoubleValue (5)), true,
-                         "Verify that we can actually set the attribute LInterm");
-  Enqueue (queue, pktSize, 300);
-  st = StaticCast<RedQueue> (queue)->GetStats ();
-  drop.test5 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
-  NS_TEST_EXPECT_MSG_GT (drop.test5, drop.test3, "Test 5 should have more drops than test 3");
-
-
-  // test 6: disable Gentle param
-  queue = CreateObject<RedQueue> ();
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
-                         "Verify that we can actually set the attribute QW");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Gentle", BooleanValue (false)), true,
-                         "Verify that we can actually set the attribute Gentle");
-  Enqueue (queue, pktSize, 300);
-  st = StaticCast<RedQueue> (queue)->GetStats ();
-  drop.test6 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
-  NS_TEST_EXPECT_MSG_GT (drop.test6, drop.test3, "Test 6 should have more drops than test 3");
-
-
-  // test 7: disable Wait param
-  queue = CreateObject<RedQueue> ();
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
-                         "Verify that we can actually set the attribute Mode");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
-                         "Verify that we can actually set the attribute MinTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
-                         "Verify that we can actually set the attribute MaxTh");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
-                         "Verify that we can actually set the attribute QueueLimit");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
-                         "Verify that we can actually set the attribute QW");
-  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Wait", BooleanValue (false)), true,
-                         "Verify that we can actually set the attribute Wait");
-  Enqueue (queue, pktSize, 300);
-  st = StaticCast<RedQueue> (queue)->GetStats ();
-  drop.test7 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
-  NS_TEST_EXPECT_MSG_GT (drop.test7, drop.test3, "Test 7 should have more drops than test 3");
-}
-
-void 
-RedQueueTestCase::Enqueue (Ptr<RedQueue> queue, uint32_t size, uint32_t nPkt)
-{
-  for (uint32_t i = 0; i < nPkt; i++)
-    {
-      queue->Enqueue (Create<Packet> (size));
-    }
-}
-
-void
-RedQueueTestCase::DoRun (void)
-{
-  RunRedTest (StringValue ("QUEUE_MODE_PACKETS"));
-  RunRedTest (StringValue ("QUEUE_MODE_BYTES"));
-  Simulator::Destroy ();
-
-}
-
-static class RedQueueTestSuite : public TestSuite
-{
-public:
-  RedQueueTestSuite ()
-    : TestSuite ("red-queue", UNIT)
-  {
-    AddTestCase (new RedQueueTestCase (), TestCase::QUICK);
-  }
-} g_redQueueTestSuite;
diff -Naur ns-3.24.1/src/network/utils/drop-tail-queue.cc ns-3.25/src/network/utils/drop-tail-queue.cc
--- ns-3.24.1/src/network/utils/drop-tail-queue.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/drop-tail-queue.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,8 +17,6 @@
  */
 
 #include "ns3/log.h"
-#include "ns3/enum.h"
-#include "ns3/uinteger.h"
 #include "drop-tail-queue.h"
 
 namespace ns3 {
@@ -27,38 +25,19 @@
 
 NS_OBJECT_ENSURE_REGISTERED (DropTailQueue);
 
-TypeId DropTailQueue::GetTypeId (void) 
+TypeId DropTailQueue::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::DropTailQueue")
     .SetParent<Queue> ()
-    .SetGroupName("Network")
+    .SetGroupName ("Network")
     .AddConstructor<DropTailQueue> ()
-    .AddAttribute ("Mode", 
-                   "Whether to use bytes (see MaxBytes) or packets (see MaxPackets) as the maximum queue size metric.",
-                   EnumValue (QUEUE_MODE_PACKETS),
-                   MakeEnumAccessor (&DropTailQueue::SetMode,
-                                     &DropTailQueue::GetMode),
-                   MakeEnumChecker (QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
-                                    QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
-    .AddAttribute ("MaxPackets", 
-                   "The maximum number of packets accepted by this DropTailQueue.",
-                   UintegerValue (100),
-                   MakeUintegerAccessor (&DropTailQueue::m_maxPackets),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxBytes", 
-                   "The maximum number of bytes accepted by this DropTailQueue.",
-                   UintegerValue (100 * 65535),
-                   MakeUintegerAccessor (&DropTailQueue::m_maxBytes),
-                   MakeUintegerChecker<uint32_t> ())
   ;
-
   return tid;
 }
 
 DropTailQueue::DropTailQueue () :
   Queue (),
-  m_packets (),
-  m_bytesInQueue (0)
+  m_packets ()
 {
   NS_LOG_FUNCTION (this);
 }
@@ -68,88 +47,38 @@
   NS_LOG_FUNCTION (this);
 }
 
-void
-DropTailQueue::SetMode (DropTailQueue::QueueMode mode)
-{
-  NS_LOG_FUNCTION (this << mode);
-  m_mode = mode;
-}
-
-DropTailQueue::QueueMode
-DropTailQueue::GetMode (void) const
-{
-  NS_LOG_FUNCTION (this);
-  return m_mode;
-}
-
 bool 
-DropTailQueue::DoEnqueue (Ptr<Packet> p)
+DropTailQueue::DoEnqueue (Ptr<QueueItem> item)
 {
-  NS_LOG_FUNCTION (this << p);
+  NS_LOG_FUNCTION (this << item);
+  NS_ASSERT (m_packets.size () == GetNPackets ());
 
-  if (m_mode == QUEUE_MODE_PACKETS && (m_packets.size () >= m_maxPackets))
-    {
-      NS_LOG_LOGIC ("Queue full (at max packets) -- droppping pkt");
-      Drop (p);
-      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);
-      return false;
-    }
-
-  m_bytesInQueue += p->GetSize ();
-  m_packets.push (p);
-
-  NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
+  m_packets.push (item);
 
   return true;
 }
 
-Ptr<Packet>
+Ptr<QueueItem>
 DropTailQueue::DoDequeue (void)
 {
   NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_packets.size () == GetNPackets ());
 
-  if (m_packets.empty ())
-    {
-      NS_LOG_LOGIC ("Queue empty");
-      return 0;
-    }
-
-  Ptr<Packet> p = m_packets.front ();
+  Ptr<QueueItem> item = m_packets.front ();
   m_packets.pop ();
-  m_bytesInQueue -= p->GetSize ();
-
-  NS_LOG_LOGIC ("Popped " << p);
 
-  NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
+  NS_LOG_LOGIC ("Popped " << item);
 
-  return p;
+  return item;
 }
 
-Ptr<const Packet>
+Ptr<const QueueItem>
 DropTailQueue::DoPeek (void) const
 {
   NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_packets.size () == GetNPackets ());
 
-  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;
+  return m_packets.front ();
 }
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/drop-tail-queue.h ns-3.25/src/network/utils/drop-tail-queue.h
--- ns-3.24.1/src/network/utils/drop-tail-queue.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/drop-tail-queue.h	2016-03-23 21:36:53.000000000 -0700
@@ -20,19 +20,17 @@
 #define DROPTAIL_H
 
 #include <queue>
-#include "ns3/packet.h"
 #include "ns3/queue.h"
 
 namespace ns3 {
 
-class TraceContainer;
-
 /**
  * \ingroup queue
  *
  * \brief A FIFO packet queue that drops tail-end packets on overflow
  */
-class DropTailQueue : public Queue {
+class DropTailQueue : public Queue
+{
 public:
   /**
    * \brief Get the type ID.
@@ -48,31 +46,12 @@
 
   virtual ~DropTailQueue();
 
-  /**
-   * Set the operating mode of this device.
-   *
-   * \param mode The operating mode of this device.
-   *
-   */
-  void SetMode (DropTailQueue::QueueMode mode);
-
-  /**
-   * Get the encapsulation mode of this device.
-   *
-   * \returns The encapsulation mode of this device.
-   */
-  DropTailQueue::QueueMode GetMode (void) const;
-
 private:
-  virtual bool DoEnqueue (Ptr<Packet> p);
-  virtual Ptr<Packet> DoDequeue (void);
-  virtual Ptr<const Packet> DoPeek (void) const;
-
-  std::queue<Ptr<Packet> > m_packets; //!< the packets in the queue
-  uint32_t m_maxPackets;              //!< max packets in the queue
-  uint32_t m_maxBytes;                //!< max bytes in the queue
-  uint32_t m_bytesInQueue;            //!< actual bytes in the queue
-  QueueMode m_mode;                   //!< queue mode (packets or bytes limited)
+  virtual bool DoEnqueue (Ptr<QueueItem> item);
+  virtual Ptr<QueueItem> DoDequeue (void);
+  virtual Ptr<const QueueItem> DoPeek (void) const;
+
+  std::queue<Ptr<QueueItem> > m_packets; //!< the items in the queue
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/ipv4-address.cc ns-3.25/src/network/utils/ipv4-address.cc
--- ns-3.24.1/src/network/utils/ipv4-address.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/ipv4-address.cc	2016-03-23 21:36:53.000000000 -0700
@@ -41,23 +41,32 @@
 {
   NS_LOG_FUNCTION (&address);
   uint32_t host = 0;
+  uint8_t numberOfDots = 0;
+  char const *ptr = address;
+
+  NS_ASSERT_MSG (*ptr != ASCII_DOT, "Error, can not build an IPv4 address from an invalid string: " << address);
   while (true) 
     {
       uint8_t byte = 0;
-      while (*address != ASCII_DOT && *address != 0) 
+      while (*ptr != ASCII_DOT && *ptr != 0)
         {
           byte *= 10;
-          byte += *address - ASCII_ZERO;
-          address++;
+          byte += *ptr - ASCII_ZERO;
+          ptr++;
         }
       host <<= 8;
       host |= byte;
-      if (*address == 0) 
+      if (*ptr == 0)
         {
           break;
         }
-      address++;
+      ptr++;
+      NS_ASSERT_MSG (*ptr != ASCII_DOT, "Error, can not build an IPv4 address from an invalid string: " << address);
+      numberOfDots ++;
     }
+  NS_ASSERT_MSG (*(ptr-1) != ASCII_DOT, "Error, can not build an IPv4 address from an invalid string: " << address);
+  NS_ASSERT_MSG (numberOfDots == 3, "Error, can not build an IPv4 address from an invalid string: " << address);
+
   return host;
 }
 
@@ -256,6 +265,20 @@
 }
 
 bool
+Ipv4Address::IsAny (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (m_address == 0x00000000U);
+}
+
+bool
+Ipv4Address::IsLocalhost (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return (m_address == 0x7f000001U);
+}
+
+bool
 Ipv4Address::IsBroadcast (void) const
 {
   NS_LOG_FUNCTION (this);
diff -Naur ns-3.24.1/src/network/utils/ipv4-address.h ns-3.25/src/network/utils/ipv4-address.h
--- ns-3.24.1/src/network/utils/ipv4-address.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/ipv4-address.h	2016-03-23 21:36:53.000000000 -0700
@@ -106,6 +106,14 @@
    */
   void Print (std::ostream &os) const;
   /**
+    * \return true if address is 0.0.0.0; false otherwise
+    */
+  bool IsAny (void) const;
+  /**
+    * \return true if address is 127.0.0.1; false otherwise
+    */
+  bool IsLocalhost (void) const;
+  /**
     * \return true if address is 255.255.255.255; false otherwise
     */
   bool IsBroadcast (void) const;
diff -Naur ns-3.24.1/src/network/utils/ipv6-address.cc ns-3.25/src/network/utils/ipv6-address.cc
--- ns-3.24.1/src/network/utils/ipv6-address.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/ipv6-address.cc	2016-03-23 21:36:53.000000000 -0700
@@ -671,15 +671,20 @@
 bool Ipv6Address::IsAllNodesMulticast () const
 {
   NS_LOG_FUNCTION (this);
-  static Ipv6Address allnodes ("ff02::1");
-  return (*this == allnodes);
+  static Ipv6Address allNodesI ("ff01::1");
+  static Ipv6Address allNodesL ("ff02::1");
+  static Ipv6Address allNodesR ("ff03::1");
+  return (*this == allNodesI || *this == allNodesL || *this == allNodesR);
 }
 
 bool Ipv6Address::IsAllRoutersMulticast () const
 {
   NS_LOG_FUNCTION (this);
-  static Ipv6Address allrouters ("ff02::2");
-  return (*this == allrouters);
+  static Ipv6Address allroutersI ("ff01::2");
+  static Ipv6Address allroutersL ("ff02::2");
+  static Ipv6Address allroutersR ("ff03::2");
+  static Ipv6Address allroutersS ("ff05::2");
+  return (*this == allroutersI || *this == allroutersL || *this == allroutersR || *this == allroutersS);
 }
 
 bool Ipv6Address::IsAllHostsMulticast () const
diff -Naur ns-3.24.1/src/network/utils/ipv6-address.h ns-3.25/src/network/utils/ipv6-address.h
--- ns-3.24.1/src/network/utils/ipv6-address.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/ipv6-address.h	2016-03-23 21:36:53.000000000 -0700
@@ -29,6 +29,7 @@
 #include "ns3/attribute-helper.h"
 #include "ns3/address.h"
 #include "ns3/ipv4-address.h"
+#include "ns3/deprecated.h"
 
 namespace ns3 { 
 
@@ -223,9 +224,12 @@
 
   /**
    * \brief If the IPv6 address is "all hosts multicast" (ff02::3/8).
+   *
+   * This function is deprecated because the address has been removed from RFCs.
+   *
    * \return true if "all hosts multicast", false otherwise
    */
-  bool IsAllHostsMulticast () const;
+  bool IsAllHostsMulticast () const NS_DEPRECATED;
 
   /**
    * \brief If the IPv6 address is a link-local address (fe80::/64).
diff -Naur ns-3.24.1/src/network/utils/packet-socket.cc ns-3.25/src/network/utils/packet-socket.cc
--- ns-3.24.1/src/network/utils/packet-socket.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/packet-socket.cc	2016-03-23 21:36:53.000000000 -0700
@@ -469,12 +469,12 @@
 PacketSocket::GetSockName (Address &address) const
 {
   NS_LOG_FUNCTION (this << address);
-  PacketSocketAddress ad = PacketSocketAddress::ConvertFrom (address);
+  PacketSocketAddress ad;
 
   ad.SetProtocol (m_protocol);
   if (m_isSingleDevice)
     {
-      Ptr<NetDevice> device = m_node->GetDevice (ad.GetSingleDevice ());
+      Ptr<NetDevice> device = m_node->GetDevice (m_device);
       ad.SetPhysicalAddress (device->GetAddress ());
       ad.SetSingleDevice (m_device);
     }
@@ -487,6 +487,22 @@
 
   return 0;
 }
+
+int
+PacketSocket::GetPeerName (Address &address) const
+{
+  NS_LOG_FUNCTION (this << address);
+
+  if (m_state != STATE_CONNECTED)
+    {
+      m_errno = ERROR_NOTCONN;
+      return -1;
+    }
+
+  address = m_destAddr;
+
+  return 0;
+}
 
 bool
 PacketSocket::SetAllowBroadcast (bool allowBroadcast)
diff -Naur ns-3.24.1/src/network/utils/packet-socket.h ns-3.25/src/network/utils/packet-socket.h
--- ns-3.24.1/src/network/utils/packet-socket.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/packet-socket.h	2016-03-23 21:36:53.000000000 -0700
@@ -133,6 +133,7 @@
   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 bool SetAllowBroadcast (bool allowBroadcast);
   virtual bool GetAllowBroadcast () const;
 
@@ -177,7 +178,7 @@
   };
 
   Ptr<Node> m_node;         //!< the associated node
-  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
   enum State m_state;       //!< Socket state
diff -Naur ns-3.24.1/src/network/utils/pcap-file.cc ns-3.25/src/network/utils/pcap-file.cc
--- ns-3.24.1/src/network/utils/pcap-file.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/pcap-file.cc	2016-03-23 21:36:53.000000000 -0700
@@ -41,18 +41,19 @@
 const uint32_t MAGIC = 0xa1b2c3d4;            /**< Magic number identifying standard pcap file format */
 const uint32_t SWAPPED_MAGIC = 0xd4c3b2a1;    /**< Looks this way if byte swapping is required */
 
-const uint32_t NS_MAGIC = 0xa1b23cd4;         /**< Magic number identifying nanosec resolution pcap file format */
-const uint32_t NS_SWAPPED_MAGIC = 0xd43cb2a1; /**< Looks this way if byte swapping is required */
+const uint32_t NS_MAGIC = 0xa1b23c4d;         /**< Magic number identifying nanosec resolution pcap file format */
+const uint32_t NS_SWAPPED_MAGIC = 0x4d3cb2a1; /**< Looks this way if byte swapping is required */
 
 const uint16_t VERSION_MAJOR = 2;             /**< Major version of supported pcap file format */
 const uint16_t VERSION_MINOR = 4;             /**< Minor version of supported pcap file format */
 
 PcapFile::PcapFile ()
   : m_file (),
-    m_swapMode (false)
+    m_swapMode (false),
+    m_nanosecMode (false)
 {
   NS_LOG_FUNCTION (this);
-  FatalImpl::RegisterStream (&m_file);
+  FatalImpl::RegisterStream (&m_file); 
 }
 
 PcapFile::~PcapFile ()
@@ -146,6 +147,13 @@
   return m_swapMode;
 }
 
+bool
+PcapFile::IsNanoSecMode (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_nanosecMode;
+}
+
 uint8_t
 PcapFile::Swap (uint8_t val)
 {
@@ -285,6 +293,12 @@
     }
 
   //
+  // Timestamps can either be microsecond or nanosecond
+  //
+  m_nanosecMode = ((m_fileHeader.m_magicNumber == NS_MAGIC) ||
+                   (m_fileHeader.m_magicNumber == NS_SWAPPED_MAGIC)) ? true : false;
+
+  //
   // We only deal with one version of the pcap file format.
   //
   if (m_fileHeader.m_versionMajor != VERSION_MAJOR || m_fileHeader.m_versionMinor != VERSION_MINOR)
@@ -318,6 +332,7 @@
   //
   mode |= std::ios::binary;
 
+  m_filename=filename;
   m_file.open (filename.c_str (), mode);
   if (mode & std::ios::in)
     {
@@ -327,13 +342,26 @@
 }
 
 void
-PcapFile::Init (uint32_t dataLinkType, uint32_t snapLen, int32_t timeZoneCorrection, bool swapMode)
+PcapFile::Init (uint32_t dataLinkType, uint32_t snapLen, int32_t timeZoneCorrection, bool swapMode, bool nanosecMode)
 {
   NS_LOG_FUNCTION (this << dataLinkType << snapLen << timeZoneCorrection << swapMode);
+
+  //
+  // Initialize the magic number and nanosecond mode flag
+  //
+  m_nanosecMode = nanosecMode;
+  if (nanosecMode)
+    {
+      m_fileHeader.m_magicNumber = NS_MAGIC;
+    }
+  else
+    {
+      m_fileHeader.m_magicNumber = MAGIC;
+    }
+
   //
-  // Initialize the in-memory file header.
+  // Initialize remainder of the in-memory file header.
   //
-  m_fileHeader.m_magicNumber = MAGIC;
   m_fileHeader.m_versionMajor = VERSION_MAJOR;
   m_fileHeader.m_versionMinor = VERSION_MINOR;
   m_fileHeader.m_zone = timeZoneCorrection;
diff -Naur ns-3.24.1/src/network/utils/pcap-file.h ns-3.25/src/network/utils/pcap-file.h
--- ns-3.24.1/src/network/utils/pcap-file.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/pcap-file.h	2016-03-23 21:36:53.000000000 -0700
@@ -116,7 +116,8 @@
   void Init (uint32_t dataLinkType, 
              uint32_t snapLen = SNAPLEN_DEFAULT, 
              int32_t timeZoneCorrection = ZONE_DEFAULT,
-             bool swapMode = false);
+             bool swapMode = false,
+             bool nanosecMode = false);
 
   /**
    * \brief Write next packet to file
@@ -192,6 +193,14 @@
   bool GetSwapMode (void);
 
   /**
+   * \brief Get the nanosecond mode of the file.
+   *
+   * IsNanoSecMode returns true if the packet timestamps in the PCAP 
+   * file have nanosecond resolution.
+   */
+   bool IsNanoSecMode (void);
+ 
+  /**
    * \brief Returns the magic number of the pcap file as defined by the magic_number
    * field in the pcap global header.
    *
@@ -357,6 +366,7 @@
   std::fstream   m_file;        //!< file stream
   PcapFileHeader m_fileHeader;  //!< file header
   bool m_swapMode;              //!< swap mode
+  bool m_nanosecMode;           //!< nanosecond timestamp mode
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/pcap-file-wrapper.cc ns-3.25/src/network/utils/pcap-file-wrapper.cc
--- ns-3.24.1/src/network/utils/pcap-file-wrapper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/pcap-file-wrapper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,6 +17,7 @@
  */
 
 #include "ns3/log.h"
+#include "ns3/boolean.h"
 #include "ns3/uinteger.h"
 #include "ns3/buffer.h"
 #include "ns3/header.h"
@@ -40,6 +41,11 @@
                    UintegerValue (PcapFile::SNAPLEN_DEFAULT),
                    MakeUintegerAccessor (&PcapFileWrapper::m_snapLen),
                    MakeUintegerChecker<uint32_t> (0, PcapFile::SNAPLEN_DEFAULT))
+    .AddAttribute ("NanosecMode",
+                   "Whether packet timestamps in the PCAP file are nanoseconds or microseconds(default).",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&PcapFileWrapper::m_nanosecMode),
+                   MakeBooleanChecker())
   ;
   return tid;
 }
@@ -53,16 +59,16 @@
 PcapFileWrapper::~PcapFileWrapper ()
 {
   NS_LOG_FUNCTION (this);
-  Close ();
+  Close ();   
 }
 
-
 bool 
 PcapFileWrapper::Fail (void) const
 {
   NS_LOG_FUNCTION (this);
   return m_file.Fail ();
 }
+
 bool 
 PcapFileWrapper::Eof (void) const
 {
@@ -101,11 +107,11 @@
   NS_LOG_FUNCTION (this << dataLinkType << snapLen << tzCorrection);
   if (snapLen != std::numeric_limits<uint32_t>::max ())
     {
-      m_file.Init (dataLinkType, snapLen, tzCorrection);
+      m_file.Init (dataLinkType, snapLen, tzCorrection, false, m_nanosecMode);
     } 
   else
     {
-      m_file.Init (dataLinkType, m_snapLen, tzCorrection);
+      m_file.Init (dataLinkType, m_snapLen, tzCorrection, false, m_nanosecMode);
     } 
 }
 
@@ -113,33 +119,92 @@
 PcapFileWrapper::Write (Time t, Ptr<const Packet> p)
 {
   NS_LOG_FUNCTION (this << t << p);
-  uint64_t current = t.GetMicroSeconds ();
-  uint64_t s = current / 1000000;
-  uint64_t us = current % 1000000;
-
-  m_file.Write (s, us, p);
+  if (m_file.IsNanoSecMode())
+    {
+      uint64_t current = t.GetNanoSeconds ();
+      uint64_t s       = current / 1000000000;
+      uint64_t ns      = current % 1000000000;
+      m_file.Write (s, ns, p);
+    }
+  else
+    {
+      uint64_t current = t.GetMicroSeconds ();
+      uint64_t s       = current / 1000000;
+      uint64_t us      = current % 1000000;
+      m_file.Write (s, us, p);
+    }
 }
 
 void
 PcapFileWrapper::Write (Time t, const Header &header, Ptr<const Packet> p)
 {
   NS_LOG_FUNCTION (this << t << &header << p);
-  uint64_t current = t.GetMicroSeconds ();
-  uint64_t s = current / 1000000;
-  uint64_t us = current % 1000000;
-
-  m_file.Write (s, us, header, p);
+  if (m_file.IsNanoSecMode())
+    {
+      uint64_t current = t.GetNanoSeconds ();
+      uint64_t s       = current / 1000000000;
+      uint64_t ns      = current % 1000000000;
+      m_file.Write (s, ns, header, p);
+    }
+  else
+    {
+      uint64_t current = t.GetMicroSeconds ();
+      uint64_t s       = current / 1000000;
+      uint64_t us      = current % 1000000;
+      m_file.Write (s, us, header, p);
+    }
 }
 
 void
 PcapFileWrapper::Write (Time t, uint8_t const *buffer, uint32_t length)
 {
   NS_LOG_FUNCTION (this << t << &buffer << length);
-  uint64_t current = t.GetMicroSeconds ();
-  uint64_t s = current / 1000000;
-  uint64_t us = current % 1000000;
+  if (m_file.IsNanoSecMode())
+    {
+      uint64_t current = t.GetNanoSeconds ();
+      uint64_t s       = current / 1000000000;
+      uint64_t ns      = current % 1000000000;
+      m_file.Write (s, ns, buffer, length);
+    }
+  else
+    {
+      uint64_t current = t.GetMicroSeconds ();
+      uint64_t s       = current / 1000000;
+      uint64_t us      = current % 1000000;
+      m_file.Write (s, us, buffer, length);
+    }
+}
+
+Ptr<Packet> 
+PcapFileWrapper::Read (Time &t)
+{
+  uint32_t tsSec;
+  uint32_t tsUsec;
+  uint32_t inclLen;
+  uint32_t origLen;
+  uint32_t readLen;
+
+  uint32_t maxBytes=65536;
+  uint8_t  datbuf[maxBytes];
+
+  m_file.Read (datbuf,maxBytes,tsSec,tsUsec,inclLen,origLen,readLen);
+
+  if (m_file.Fail())
+    {
+      return 0;
+    }
+
+  if (m_file.IsNanoSecMode())
+    {
+      t = NanoSeconds(tsSec*1000000000ULL+tsUsec);
+    }
+  else
+    {
+      t = MicroSeconds(tsSec*1000000ULL+tsUsec);
+    }
+
+  return Create<Packet> (datbuf,origLen);
 
-  m_file.Write (s, us, buffer, length);
 }
 
 uint32_t
diff -Naur ns-3.24.1/src/network/utils/pcap-file-wrapper.h ns-3.25/src/network/utils/pcap-file-wrapper.h
--- ns-3.24.1/src/network/utils/pcap-file-wrapper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/pcap-file-wrapper.h	2016-03-23 21:36:53.000000000 -0700
@@ -143,6 +143,14 @@
   void Write (Time t, uint8_t const *buffer, uint32_t length);
 
   /**
+   * \brief Read the next packet from the file. Returns a pointer to ns3::Packet
+   * 
+   * \param t Reference to packet timestamp as ns3::Time.
+   * 
+   */
+  Ptr<Packet> Read (Time &t);
+
+/**
    * \brief Returns the magic number of the pcap file as defined by the magic_number
    * field in the pcap global header.
    *
@@ -215,6 +223,7 @@
 private:
   PcapFile m_file; //!< Pcap file
   uint32_t m_snapLen; //!< max length of saved packets
+  bool     m_nanosecMode; //!< Timestamps in nanosecond mode
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/queue.cc ns-3.25/src/network/utils/queue.cc
--- ns-3.24.1/src/network/utils/queue.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/queue.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,6 +17,9 @@
  */
 
 #include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/enum.h"
+#include "ns3/uinteger.h"
 #include "ns3/trace-source-accessor.h"
 #include "queue.h"
 
@@ -31,16 +34,43 @@
 {
   static TypeId tid = TypeId ("ns3::Queue")
     .SetParent<Object> ()
-    .SetGroupName("Network")  
+    .SetGroupName ("Network")
+    .AddAttribute ("Mode",
+                   "Whether to use bytes (see MaxBytes) or packets (see MaxPackets) as the maximum queue size metric.",
+                   EnumValue (QUEUE_MODE_PACKETS),
+                   MakeEnumAccessor (&Queue::SetMode,
+                                     &Queue::GetMode),
+                   MakeEnumChecker (QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
+                                    QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
+    .AddAttribute ("MaxPackets",
+                   "The maximum number of packets accepted by this queue.",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&Queue::SetMaxPackets,
+                                         &Queue::GetMaxPackets),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MaxBytes",
+                   "The maximum number of bytes accepted by this queue.",
+                   UintegerValue (100 * 65535),
+                   MakeUintegerAccessor (&Queue::SetMaxBytes,
+                                         &Queue::GetMaxBytes),
+                   MakeUintegerChecker<uint32_t> ())
     .AddTraceSource ("Enqueue", "Enqueue a packet in the queue.",
                      MakeTraceSourceAccessor (&Queue::m_traceEnqueue),
                      "ns3::Packet::TracedCallback")
     .AddTraceSource ("Dequeue", "Dequeue a packet from the queue.",
                      MakeTraceSourceAccessor (&Queue::m_traceDequeue),
                      "ns3::Packet::TracedCallback")
-    .AddTraceSource ("Drop", "Drop a packet stored in the queue.",
+    .AddTraceSource ("Drop", "Drop a packet (for whatever reason).",
                      MakeTraceSourceAccessor (&Queue::m_traceDrop),
                      "ns3::Packet::TracedCallback")
+    .AddTraceSource ("PacketsInQueue",
+                     "Number of packets currently stored in the queue",
+                     MakeTraceSourceAccessor (&Queue::m_nPackets),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("BytesInQueue",
+                     "Number of bytes currently stored in the queue",
+                     MakeTraceSourceAccessor (&Queue::m_nBytes),
+                     "ns3::TracedValueCallback::Uint32")
   ;
   return tid;
 }
@@ -51,7 +81,8 @@
   m_nPackets (0),
   m_nTotalReceivedPackets (0),
   m_nTotalDroppedBytes (0),
-  m_nTotalDroppedPackets (0)
+  m_nTotalDroppedPackets (0),
+  m_mode (QUEUE_MODE_PACKETS)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -63,20 +94,35 @@
 
 
 bool 
-Queue::Enqueue (Ptr<Packet> p)
+Queue::Enqueue (Ptr<QueueItem> item)
 {
-  NS_LOG_FUNCTION (this << p);
+  NS_LOG_FUNCTION (this << item);
+  Ptr<Packet> p = item->GetPacket ();
+
+  if (m_mode == QUEUE_MODE_PACKETS && (m_nPackets.Get () >= m_maxPackets))
+    {
+      NS_LOG_LOGIC ("Queue full (at max packets) -- dropping pkt");
+      Drop (p);
+      return false;
+    }
+
+  if (m_mode == QUEUE_MODE_BYTES && (m_nBytes.Get () + item->GetPacketSize () > m_maxBytes))
+    {
+      NS_LOG_LOGIC ("Queue full (packet would exceed max bytes) -- dropping pkt");
+      Drop (p);
+      return false;
+    }
 
   //
   // If DoEnqueue fails, Queue::Drop is called by the subclass
   //
-  bool retval = DoEnqueue (p);
+  bool retval = DoEnqueue (item);
   if (retval)
     {
       NS_LOG_LOGIC ("m_traceEnqueue (p)");
-      m_traceEnqueue (p);
+      m_traceEnqueue (item->GetPacket ());
 
-      uint32_t size = p->GetSize ();
+      uint32_t size = item->GetPacketSize ();
       m_nBytes += size;
       m_nTotalReceivedBytes += size;
 
@@ -86,25 +132,31 @@
   return retval;
 }
 
-Ptr<Packet>
+Ptr<QueueItem>
 Queue::Dequeue (void)
 {
   NS_LOG_FUNCTION (this);
 
-  Ptr<Packet> packet = DoDequeue ();
+  if (m_nPackets.Get () == 0)
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
+  Ptr<QueueItem> item = DoDequeue ();
 
-  if (packet != 0)
+  if (item != 0)
     {
-      NS_ASSERT (m_nBytes >= packet->GetSize ());
-      NS_ASSERT (m_nPackets > 0);
+      NS_ASSERT (m_nBytes.Get () >= item->GetPacketSize ());
+      NS_ASSERT (m_nPackets.Get () > 0);
 
-      m_nBytes -= packet->GetSize ();
+      m_nBytes -= item->GetPacketSize ();
       m_nPackets--;
 
       NS_LOG_LOGIC ("m_traceDequeue (packet)");
-      m_traceDequeue (packet);
+      m_traceDequeue (item->GetPacket ());
     }
-  return packet;
+  return item;
 }
 
 void
@@ -117,10 +169,17 @@
     }
 }
 
-Ptr<const Packet>
+Ptr<const QueueItem>
 Queue::Peek (void) const
 {
   NS_LOG_FUNCTION (this);
+
+  if (m_nPackets.Get () == 0)
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
   return DoPeek ();
 }
 
@@ -145,8 +204,8 @@
 Queue::IsEmpty (void) const
 {
   NS_LOG_FUNCTION (this);
-  NS_LOG_LOGIC ("returns " << (m_nPackets == 0));
-  return m_nPackets == 0;
+  NS_LOG_LOGIC ("returns " << (m_nPackets.Get () == 0));
+  return m_nPackets.Get () == 0;
 }
 
 uint32_t
@@ -192,6 +251,74 @@
 }
 
 void
+Queue::SetMode (Queue::QueueMode mode)
+{
+  NS_LOG_FUNCTION (this << mode);
+
+  if (mode == QUEUE_MODE_BYTES && m_mode == QUEUE_MODE_PACKETS)
+    {
+      NS_ABORT_MSG_IF (m_nPackets.Get () != 0,
+                       "Cannot change queue mode in a queue with packets.");
+    }
+  else if (mode == QUEUE_MODE_PACKETS && m_mode == QUEUE_MODE_BYTES)
+    {
+      NS_ABORT_MSG_IF (m_nBytes.Get () != 0,
+                       "Cannot change queue mode in a queue with packets.");
+    }
+
+  m_mode = mode;
+}
+
+Queue::QueueMode
+Queue::GetMode (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_mode;
+}
+
+void
+Queue::SetMaxPackets (uint32_t maxPackets)
+{
+  NS_LOG_FUNCTION (this << maxPackets);
+
+  if (m_mode == QUEUE_MODE_PACKETS)
+    {
+      NS_ABORT_MSG_IF (maxPackets < m_nPackets.Get (),
+                       "The new queue size cannot be less than the number of currently stored packets.");
+    }
+
+  m_maxPackets = maxPackets;
+}
+
+uint32_t
+Queue::GetMaxPackets (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_maxPackets;
+}
+
+void
+Queue::SetMaxBytes (uint32_t maxBytes)
+{
+  NS_LOG_FUNCTION (this << maxBytes);
+
+  if (m_mode == QUEUE_MODE_BYTES)
+    {
+      NS_ABORT_MSG_IF (maxBytes < m_nBytes.Get (),
+                       "The new queue size cannot be less than the amount of bytes of currently stored packets.");
+    }
+
+  m_maxBytes = maxBytes;
+}
+
+uint32_t
+Queue::GetMaxBytes (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_maxBytes;
+}
+
+void
 Queue::Drop (Ptr<Packet> p)
 {
   NS_LOG_FUNCTION (this << p);
diff -Naur ns-3.24.1/src/network/utils/queue.h ns-3.25/src/network/utils/queue.h
--- ns-3.24.1/src/network/utils/queue.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/queue.h	2016-03-23 21:36:53.000000000 -0700
@@ -16,19 +16,18 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-// The queue base class does not have any limit based on the number
-// of packets or number of bytes. It is, conceptually, infinite 
-// by default. Only subclasses define limitations.
+// The queue base class has a limit on its size, in terms of number of
+// packets or number of bytes depending on the operating mode.
 // The base class implements tracing and basic statistics calculations.
 
 #ifndef QUEUE_H
 #define QUEUE_H
 
-#include <string>
-#include <list>
 #include "ns3/packet.h"
 #include "ns3/object.h"
 #include "ns3/traced-callback.h"
+#include "ns3/net-device.h"
+#include "ns3/traced-value.h"
 
 namespace ns3 {
 
@@ -59,21 +58,21 @@
    */
   bool IsEmpty (void) const;
   /**
-   * Place a packet into the rear of the Queue
-   * \param p packet to enqueue
+   * Place a queue item into the rear of the Queue
+   * \param item item to enqueue
    * \return True if the operation was successful; false otherwise
    */
-  bool Enqueue (Ptr<Packet> p);
+  bool Enqueue (Ptr<QueueItem> item);
   /**
-   * Remove a packet from the front of the Queue
-   * \return 0 if the operation was not successful; the packet otherwise.
+   * Remove an item from the front of the Queue
+   * \return 0 if the operation was not successful; the item otherwise.
    */
-  Ptr<Packet> Dequeue (void);
+  Ptr<QueueItem> Dequeue (void);
   /**
    * Get a copy of the item at the front of the queue without removing it
-   * \return 0 if the operation was not successful; the packet otherwise.
+   * \return 0 if the operation was not successful; the item otherwise.
    */
-  Ptr<const Packet> Peek (void) const;
+  Ptr<const QueueItem> Peek (void) const;
 
   /**
    * Flush the queue.
@@ -129,6 +128,44 @@
     QUEUE_MODE_BYTES,       /**< Use number of bytes for maximum queue size */
   };
 
+  /**
+   * Set the operating mode of this device.
+   *
+   * \param mode The operating mode of this device.
+   */
+  void SetMode (Queue::QueueMode mode);
+
+  /**
+   * Get the encapsulation mode of this device.
+   *
+   * \returns The encapsulation mode of this device.
+   */
+  Queue::QueueMode GetMode (void) const;
+
+  /**
+   * \brief Set the maximum amount of packets that can be stored in this queue
+   *
+   * \param maxPackets amount of packets
+   */
+  void SetMaxPackets (uint32_t maxPackets);
+
+  /**
+   * \return the maximum amount of packets that can be stored in this queue
+   */
+  uint32_t GetMaxPackets (void) const;
+
+  /**
+   * \brief Set the maximum amount of bytes that can be stored in this queue
+   *
+   * \param maxBytes amount of bytes
+   */
+  void SetMaxBytes (uint32_t maxBytes);
+
+  /**
+   * \return the maximum amount of bytes that can be stored in this queue
+   */
+  uint32_t GetMaxBytes (void) const;
+
 #if 0
   // average calculation requires keeping around
   // a buffer with the date of arrival of past received packets
@@ -153,32 +190,34 @@
   double GetDroppedPacketsPerSecondVariance (void);
 #endif
 
-private:
-
+protected:
   /**
-   * Push a packet in the queue
-   * \param p the packet to enqueue
-   * \return true if success, false if the packet has been dropped.
+   * \brief Drop a packet
+   * \param p packet that was dropped
+   *
+   * This method is called by the base class when a packet is dropped because
+   * the queue is full and by the subclasses to notify parent (this class) that
+   * a packet has been dropped for other reasons.
    */
-  virtual bool DoEnqueue (Ptr<Packet> p) = 0;
+  void Drop (Ptr<Packet> p);
+
+private:
   /**
-   * Pull a packet from the queue
-   * \return the packet.
+   * Push an item in the queue
+   * \param item the item to enqueue
+   * \return true if success, false if the packet has been dropped.
    */
-  virtual Ptr<Packet> DoDequeue (void) = 0;
+  virtual bool DoEnqueue (Ptr<QueueItem> item) = 0;
   /**
-   * Peek the front packet in the queue
-   * \return the packet.
+   * Pull an item from the queue
+   * \return the item.
    */
-  virtual Ptr<const Packet> DoPeek (void) const = 0;
-
-protected:
+  virtual Ptr<QueueItem> DoDequeue (void) = 0;
   /**
-   *  \brief Drop a packet 
-   *  \param packet packet that was dropped
-   *  This method is called by subclasses to notify parent (this class) of packet drops.
+   * Peek the front item in the queue
+   * \return the item.
    */
-  void Drop (Ptr<Packet> packet);
+  virtual Ptr<const QueueItem> DoPeek (void) const = 0;
 
   /// Traced callback: fired when a packet is enqueued
   TracedCallback<Ptr<const Packet> > m_traceEnqueue;
@@ -187,12 +226,16 @@
   /// Traced callback: fired when a packet is dropped
   TracedCallback<Ptr<const Packet> > m_traceDrop;
 
-  uint32_t m_nBytes;                //!< Number of bytes in the queue
+  TracedValue<uint32_t> m_nBytes;   //!< Number of bytes in the queue
   uint32_t m_nTotalReceivedBytes;   //!< Total received bytes
-  uint32_t m_nPackets;              //!< Number of packets in the queue
+  TracedValue<uint32_t> m_nPackets; //!< Number of packets in the queue
   uint32_t m_nTotalReceivedPackets; //!< Total received packets
   uint32_t m_nTotalDroppedBytes;    //!< Total dropped bytes
   uint32_t m_nTotalDroppedPackets;  //!< Total dropped packets
+
+  uint32_t m_maxPackets;              //!< max packets in the queue
+  uint32_t m_maxBytes;                //!< max bytes in the queue
+  QueueMode m_mode;                   //!< queue mode (packets or bytes limited)
 };
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/red-queue.cc ns-3.25/src/network/utils/red-queue.cc
--- ns-3.24.1/src/network/utils/red-queue.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/red-queue.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,659 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright © 2011 Marcos Talau
- *
- * 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: Marcos Talau (talau@users.sourceforge.net)
- *
- * Thanks to: Duy Nguyen<duy@soe.ucsc.edu> by RED efforts in NS3
- *
- *
- * This file incorporates work covered by the following copyright and  
- * permission notice:  
- *
- * Copyright (c) 1990-1997 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * PORT NOTE: This code was ported from ns-2 (queue/red.cc).  Almost all 
- * comments have also been ported from NS-2
- */
-
-#include "ns3/log.h"
-#include "ns3/enum.h"
-#include "ns3/uinteger.h"
-#include "ns3/double.h"
-#include "ns3/simulator.h"
-#include "ns3/abort.h"
-#include "ns3/random-variable-stream.h"
-#include "red-queue.h"
-
-namespace ns3 {
-
-NS_LOG_COMPONENT_DEFINE ("RedQueue");
-
-NS_OBJECT_ENSURE_REGISTERED (RedQueue);
-
-TypeId RedQueue::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::RedQueue")
-    .SetParent<Queue> ()
-    .SetGroupName("Network")
-    .AddConstructor<RedQueue> ()
-    .AddAttribute ("Mode",
-                   "Determines unit for QueueLimit",
-                   EnumValue (QUEUE_MODE_PACKETS),
-                   MakeEnumAccessor (&RedQueue::SetMode),
-                   MakeEnumChecker (QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
-                                    QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
-    .AddAttribute ("MeanPktSize",
-                   "Average of packet size",
-                   UintegerValue (500),
-                   MakeUintegerAccessor (&RedQueue::m_meanPktSize),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("IdlePktSize",
-                   "Average packet size used during idle times. Used when m_cautions = 3",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&RedQueue::m_idlePktSize),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Wait",
-                   "True for waiting between dropped packets",
-                   BooleanValue (true),
-                   MakeBooleanAccessor (&RedQueue::m_isWait),
-                   MakeBooleanChecker ())
-    .AddAttribute ("Gentle",
-                   "True to increases dropping probability slowly when average queue exceeds maxthresh",
-                   BooleanValue (true),
-                   MakeBooleanAccessor (&RedQueue::m_isGentle),
-                   MakeBooleanChecker ())
-    .AddAttribute ("MinTh",
-                   "Minimum average length threshold in packets/bytes",
-                   DoubleValue (5),
-                   MakeDoubleAccessor (&RedQueue::m_minTh),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("MaxTh",
-                   "Maximum average length threshold in packets/bytes",
-                   DoubleValue (15),
-                   MakeDoubleAccessor (&RedQueue::m_maxTh),
-                   MakeDoubleChecker<double> ())
-    .AddAttribute ("QueueLimit",
-                   "Queue limit in bytes/packets",
-                   UintegerValue (25),
-                   MakeUintegerAccessor (&RedQueue::m_queueLimit),
-                   MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("QW",
-                   "Queue weight related to the exponential weighted moving average (EWMA)",
-                   DoubleValue (0.002),
-                   MakeDoubleAccessor (&RedQueue::m_qW),
-                   MakeDoubleChecker <double> ())
-    .AddAttribute ("LInterm",
-                   "The maximum probability of dropping a packet",
-                   DoubleValue (50),
-                   MakeDoubleAccessor (&RedQueue::m_lInterm),
-                   MakeDoubleChecker <double> ())
-    .AddAttribute ("Ns1Compat",
-                   "NS-1 compatibility",
-                   BooleanValue (false),
-                   MakeBooleanAccessor (&RedQueue::m_isNs1Compat),
-                   MakeBooleanChecker ())
-    .AddAttribute ("LinkBandwidth", 
-                   "The RED link bandwidth",
-                   DataRateValue (DataRate ("1.5Mbps")),
-                   MakeDataRateAccessor (&RedQueue::m_linkBandwidth),
-                   MakeDataRateChecker ())
-    .AddAttribute ("LinkDelay", 
-                   "The RED link delay",
-                   TimeValue (MilliSeconds (20)),
-                   MakeTimeAccessor (&RedQueue::m_linkDelay),
-                   MakeTimeChecker ())
-  ;
-
-  return tid;
-}
-
-RedQueue::RedQueue () :
-  Queue (),
-  m_packets (),
-  m_bytesInQueue (0),
-  m_hasRedStarted (false)
-{
-  NS_LOG_FUNCTION (this);
-  m_uv = CreateObject<UniformRandomVariable> ();
-}
-
-RedQueue::~RedQueue ()
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void
-RedQueue::SetMode (RedQueue::QueueMode mode)
-{
-  NS_LOG_FUNCTION (this << mode);
-  m_mode = mode;
-}
-
-RedQueue::QueueMode
-RedQueue::GetMode (void)
-{
-  NS_LOG_FUNCTION (this);
-  return m_mode;
-}
-
-void
-RedQueue::SetQueueLimit (uint32_t lim)
-{
-  NS_LOG_FUNCTION (this <<lim);
-  m_queueLimit = lim;
-}
-
-void
-RedQueue::SetTh (double minTh, double maxTh)
-{
-  NS_LOG_FUNCTION (this << minTh << maxTh);
-  NS_ASSERT (minTh <= maxTh);
-  m_minTh = minTh;
-  m_maxTh = maxTh;
-}
-
-RedQueue::Stats
-RedQueue::GetStats ()
-{
-  NS_LOG_FUNCTION (this);
-  return m_stats;
-}
-
-int64_t 
-RedQueue::AssignStreams (int64_t stream)
-{
-  NS_LOG_FUNCTION (this << stream);
-  m_uv->SetStream (stream);
-  return 1;
-}
-
-bool
-RedQueue::DoEnqueue (Ptr<Packet> p)
-{
-  NS_LOG_FUNCTION (this << p);
-
-  if (!m_hasRedStarted )
-    {
-      NS_LOG_INFO ("Initializing RED params.");
-      InitializeParams ();
-      m_hasRedStarted = true;
-    }
-
-  uint32_t nQueued = 0;
-
-  if (GetMode () == QUEUE_MODE_BYTES)
-    {
-      NS_LOG_DEBUG ("Enqueue in bytes mode");
-      nQueued = m_bytesInQueue;
-    }
-  else if (GetMode () == QUEUE_MODE_PACKETS)
-    {
-      NS_LOG_DEBUG ("Enqueue in packets mode");
-      nQueued = m_packets.size ();
-    }
-
-  // simulate number of packets arrival during idle period
-  uint32_t m = 0;
-
-  if (m_idle == 1)
-    {
-      NS_LOG_DEBUG ("RED Queue is idle.");
-      Time now = Simulator::Now ();
-
-      if (m_cautious == 3)
-        {
-          double ptc = m_ptc * m_meanPktSize / m_idlePktSize;
-          m = uint32_t (ptc * (now - m_idleTime).GetSeconds ());
-        }
-      else
-        {
-          m = uint32_t (m_ptc * (now - m_idleTime).GetSeconds ());
-        }
-
-      m_idle = 0;
-    }
-
-  m_qAvg = Estimator (nQueued, m + 1, m_qAvg, m_qW);
-
-  NS_LOG_DEBUG ("\t bytesInQueue  " << m_bytesInQueue << "\tQavg " << m_qAvg);
-  NS_LOG_DEBUG ("\t packetsInQueue  " << m_packets.size () << "\tQavg " << m_qAvg);
-
-  m_count++;
-  m_countBytes += p->GetSize ();
-
-  uint32_t dropType = DTYPE_NONE;
-  if (m_qAvg >= m_minTh && nQueued > 1)
-    {
-      if ((!m_isGentle && m_qAvg >= m_maxTh) ||
-          (m_isGentle && m_qAvg >= 2 * m_maxTh))
-        {
-          NS_LOG_DEBUG ("adding DROP FORCED MARK");
-          dropType = DTYPE_FORCED;
-        }
-      else if (m_old == 0)
-        {
-          /* 
-           * The average queue size has just crossed the
-           * threshold from below to above "minthresh", or
-           * from above "minthresh" with an empty queue to
-           * above "minthresh" with a nonempty queue.
-           */
-          m_count = 1;
-          m_countBytes = p->GetSize ();
-          m_old = 1;
-        }
-      else if (DropEarly (p, nQueued))
-        {
-          NS_LOG_LOGIC ("DropEarly returns 1");
-          dropType = DTYPE_UNFORCED;
-        }
-    }
-  else 
-    {
-      // No packets are being dropped
-      m_vProb = 0.0;
-      m_old = 0;
-    }
-
-  if (nQueued >= m_queueLimit)
-    {
-      NS_LOG_DEBUG ("\t Dropping due to Queue Full " << nQueued);
-      dropType = DTYPE_FORCED;
-      m_stats.qLimDrop++;
-    }
-
-  if (dropType == DTYPE_UNFORCED)
-    {
-      NS_LOG_DEBUG ("\t Dropping due to Prob Mark " << m_qAvg);
-      m_stats.unforcedDrop++;
-      Drop (p);
-      return false;
-    }
-  else if (dropType == DTYPE_FORCED)
-    {
-      NS_LOG_DEBUG ("\t Dropping due to Hard Mark " << m_qAvg);
-      m_stats.forcedDrop++;
-      Drop (p);
-      if (m_isNs1Compat)
-        {
-          m_count = 0;
-          m_countBytes = 0;
-        }
-      return false;
-    }
-
-  m_bytesInQueue += p->GetSize ();
-  m_packets.push_back (p);
-
-  NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-  NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
-
-  return true;
-}
-
-/*
- * Note: if the link bandwidth changes in the course of the
- * simulation, the bandwidth-dependent RED parameters do not change.
- * This should be fixed, but it would require some extra parameters,
- * and didn't seem worth the trouble...
- */
-void
-RedQueue::InitializeParams (void)
-{
-  NS_LOG_FUNCTION (this);
-
-  NS_ASSERT (m_minTh <= m_maxTh);
-  m_stats.forcedDrop = 0;
-  m_stats.unforcedDrop = 0;
-  m_stats.qLimDrop = 0;
-
-  m_cautious = 0;
-  m_ptc = m_linkBandwidth.GetBitRate () / (8.0 * m_meanPktSize);
-
-  m_qAvg = 0.0;
-  m_count = 0;
-  m_countBytes = 0;
-  m_old = 0;
-  m_idle = 1;
-
-  double th_diff = (m_maxTh - m_minTh);
-  if (th_diff == 0)
-    {
-      th_diff = 1.0; 
-    }
-  m_vA = 1.0 / th_diff;
-  m_curMaxP = 1.0 / m_lInterm;
-  m_vB = -m_minTh / th_diff;
-
-  if (m_isGentle)
-    {
-      m_vC = (1.0 - m_curMaxP) / m_maxTh;
-      m_vD = 2.0 * m_curMaxP - 1.0;
-    }
-  m_idleTime = NanoSeconds (0);
-
-/*
- * If m_qW=0, set it to a reasonable value of 1-exp(-1/C)
- * This corresponds to choosing m_qW to be of that value for
- * which the packet time constant -1/ln(1-m)qW) per default RTT 
- * of 100ms is an order of magnitude more than the link capacity, C.
- *
- * If m_qW=-1, then the queue weight is set to be a function of
- * the bandwidth and the link propagation delay.  In particular, 
- * the default RTT is assumed to be three times the link delay and 
- * transmission delay, if this gives a default RTT greater than 100 ms. 
- *
- * If m_qW=-2, set it to a reasonable value of 1-exp(-10/C).
- */
-  if (m_qW == 0.0)
-    {
-      m_qW = 1.0 - std::exp (-1.0 / m_ptc);
-    }
-  else if (m_qW == -1.0)
-    {
-      double rtt = 3.0 * (m_linkDelay.GetSeconds () + 1.0 / m_ptc);
-
-      if (rtt < 0.1)
-        {
-          rtt = 0.1;
-        }
-      m_qW = 1.0 - std::exp (-1.0 / (10 * rtt * m_ptc));
-    }
-  else if (m_qW == -2.0)
-    {
-      m_qW = 1.0 - std::exp (-10.0 / m_ptc);
-    }
-
-  /// \todo implement adaptive RED
-
-  NS_LOG_DEBUG ("\tm_delay " << m_linkDelay.GetSeconds () << "; m_isWait " 
-                             << m_isWait << "; m_qW " << m_qW << "; m_ptc " << m_ptc
-                             << "; m_minTh " << m_minTh << "; m_maxTh " << m_maxTh
-                             << "; m_isGentle " << m_isGentle << "; th_diff " << th_diff
-                             << "; lInterm " << m_lInterm << "; va " << m_vA <<  "; cur_max_p "
-                             << m_curMaxP << "; v_b " << m_vB <<  "; m_vC "
-                             << m_vC << "; m_vD " <<  m_vD);
-}
-
-// Compute the average queue size
-double
-RedQueue::Estimator (uint32_t nQueued, uint32_t m, double qAvg, double qW)
-{
-  NS_LOG_FUNCTION (this << nQueued << m << qAvg << qW);
-  double newAve;
-
-  newAve = qAvg;
-  while (--m >= 1)
-    {
-      newAve *= 1.0 - qW;
-    }
-  newAve *= 1.0 - qW;
-  newAve += qW * nQueued;
-
-  // implement adaptive RED
-
-  return newAve;
-}
-
-// Check if packet p needs to be dropped due to probability mark
-uint32_t
-RedQueue::DropEarly (Ptr<Packet> p, uint32_t qSize)
-{
-  NS_LOG_FUNCTION (this << p << qSize);
-  m_vProb1 = CalculatePNew (m_qAvg, m_maxTh, m_isGentle, m_vA, m_vB, m_vC, m_vD, m_curMaxP);
-  m_vProb = ModifyP (m_vProb1, m_count, m_countBytes, m_meanPktSize, m_isWait, p->GetSize ());
-
-  // Drop probability is computed, pick random number and act
-  if (m_cautious == 1)
-    {
-      /*
-       * Don't drop/mark if the instantaneous queue is much below the average.
-       * For experimental purposes only.
-       * pkts: the number of packets arriving in 50 ms
-       */
-      double pkts = m_ptc * 0.05;
-      double fraction = std::pow ((1 - m_qW), pkts);
-
-      if ((double) qSize < fraction * m_qAvg)
-        {
-          // Queue could have been empty for 0.05 seconds
-          return 0;
-        }
-    }
-
-  double u = m_uv->GetValue ();
-
-  if (m_cautious == 2)
-    {
-      /*
-       * Decrease the drop probability if the instantaneous
-       * queue is much below the average.
-       * For experimental purposes only.
-       * pkts: the number of packets arriving in 50 ms
-       */
-      double pkts = m_ptc * 0.05;
-      double fraction = std::pow ((1 - m_qW), pkts);
-      double ratio = qSize / (fraction * m_qAvg);
-
-      if (ratio < 1.0)
-        {
-          u *= 1.0 / ratio;
-        }
-    }
-
-  if (u <= m_vProb)
-    {
-      NS_LOG_LOGIC ("u <= m_vProb; u " << u << "; m_vProb " << m_vProb);
-
-      // DROP or MARK
-      m_count = 0;
-      m_countBytes = 0;
-      /// \todo Implement set bit to mark
-
-      return 1; // drop
-    }
-
-  return 0; // no drop/mark
-}
-
-// Returns a probability using these function parameters for the DropEarly funtion
-double
-RedQueue::CalculatePNew (double qAvg, double maxTh, bool isGentle, double vA,
-                         double vB, double vC, double vD, double maxP)
-{
-  NS_LOG_FUNCTION (this << qAvg << maxTh << isGentle << vA << vB << vC << vD << maxP);
-  double p;
-
-  if (isGentle && qAvg >= maxTh)
-    {
-      // p ranges from maxP to 1 as the average queue
-      // Size ranges from maxTh to twice maxTh
-      p = vC * qAvg + vD;
-    }
-  else if (!isGentle && qAvg >= maxTh)
-    {
-      /* 
-       * OLD: p continues to range linearly above max_p as
-       * the average queue size ranges above th_max.
-       * NEW: p is set to 1.0
-       */
-      p = 1.0;
-    }
-  else
-    {
-      /*
-       * p ranges from 0 to max_p as the average queue size ranges from
-       * th_min to th_max
-       */
-      p = vA * qAvg + vB;
-      p *= maxP;
-    }
-
-  if (p > 1.0)
-    {
-      p = 1.0;
-    }
-
-  return p;
-}
-
-// Returns a probability using these function parameters for the DropEarly funtion
-double 
-RedQueue::ModifyP (double p, uint32_t count, uint32_t countBytes,
-                   uint32_t meanPktSize, bool isWait, uint32_t size)
-{
-  NS_LOG_FUNCTION (this << p << count << countBytes << meanPktSize << isWait << size);
-  double count1 = (double) count;
-
-  if (GetMode () == QUEUE_MODE_BYTES)
-    {
-      count1 = (double) (countBytes / meanPktSize);
-    }
-
-  if (isWait)
-    {
-      if (count1 * p < 1.0)
-        {
-          p = 0.0;
-        }
-      else if (count1 * p < 2.0)
-        {
-          p /= (2.0 - count1 * p);
-        }
-      else
-        {
-          p = 1.0;
-        }
-    }
-  else
-    {
-      if (count1 * p < 1.0)
-        {
-          p /= (1.0 - count1 * p);
-        }
-      else
-        {
-          p = 1.0;
-        }
-    }
-
-  if ((GetMode () == QUEUE_MODE_BYTES) && (p < 1.0))
-    {
-      p = (p * size) / meanPktSize;
-    }
-
-  if (p > 1.0)
-    {
-      p = 1.0;
-    }
-
-  return p;
-}
-
-uint32_t
-RedQueue::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 RED mode.");
-    }
-}
-
-Ptr<Packet>
-RedQueue::DoDequeue (void)
-{
-  NS_LOG_FUNCTION (this);
-
-  if (m_packets.empty ())
-    {
-      NS_LOG_LOGIC ("Queue empty");
-      m_idle = 1;
-      m_idleTime = Simulator::Now ();
-
-      return 0;
-    }
-  else
-    {
-      m_idle = 0;
-      Ptr<Packet> p = m_packets.front ();
-      m_packets.pop_front ();
-      m_bytesInQueue -= p->GetSize ();
-
-      NS_LOG_LOGIC ("Popped " << p);
-
-      NS_LOG_LOGIC ("Number packets " << m_packets.size ());
-      NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue);
-
-      return p;
-    }
-}
-
-Ptr<const Packet>
-RedQueue::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;
-}
-
-} // namespace ns3
diff -Naur ns-3.24.1/src/network/utils/red-queue.h ns-3.25/src/network/utils/red-queue.h
--- ns-3.24.1/src/network/utils/red-queue.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/red-queue.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,285 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright © 2011 Marcos Talau
- *
- * 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: Marcos Talau (talau@users.sourceforge.net)
- *
- * Thanks to: Duy Nguyen<duy@soe.ucsc.edu> by RED efforts in NS3
- *
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- *
- * Copyright (c) 1990-1997 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor of the Laboratory may be used
- *    to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * PORT NOTE: This code was ported from ns-2 (queue/red.h).  Almost all
- * comments also been ported from NS-2.
- * This implementation aims to be close to the results cited in [0]
- * [0] S.Floyd, K.Fall http://icir.org/floyd/papers/redsims.ps
- */
-
-#ifndef RED_QUEUE_H
-#define RED_QUEUE_H
-
-#include <queue>
-#include "ns3/packet.h"
-#include "ns3/queue.h"
-#include "ns3/nstime.h"
-#include "ns3/boolean.h"
-#include "ns3/data-rate.h"
-#include "ns3/nstime.h"
-
-namespace ns3 {
-
-class TraceContainer;
-class UniformRandomVariable;
-
-/**
- * \ingroup queue
- *
- * \brief A RED packet queue
- */
-class RedQueue : public Queue
-{
-public:
-  /**
-   * \brief Get the type ID.
-   * \return the object TypeId
-   */
-  static TypeId GetTypeId (void);
-  /**
-   * \brief RedQueue Constructor
-   *
-   * Create a RED queue
-   */
-  RedQueue ();
-
-  /**
-   * \brief Destructor
-   *
-   * Destructor
-   */ 
-  virtual ~RedQueue ();
-
-  /**
-   * \brief Stats
-   */
-  typedef struct
-  {   
-    uint32_t unforcedDrop;  //!< Early probability drops
-    uint32_t forcedDrop;    //!< Forced drops, qavg > max threshold
-    uint32_t qLimDrop;      //!< Drops due to queue limits
-  } Stats;
-
-  /** 
-   * \brief Drop types
-   */
-  enum
-  {
-    DTYPE_NONE,        //!< Ok, no drop
-    DTYPE_FORCED,      //!< A "forced" drop
-    DTYPE_UNFORCED,    //!< An "unforced" (random) drop
-  };
-
-  /**
-   * \brief Set the operating mode of this queue.
-   *  Set operating mode
-   *
-   * \param mode The operating mode of this queue.
-   */
-  void SetMode (RedQueue::QueueMode mode);
-
-  /**
-   * \brief Get the encapsulation mode of this queue.
-   * Get the encapsulation mode of this queue
-   *
-   * \returns The encapsulation mode of this queue.
-   */
-  RedQueue::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 Set the limit of the queue.
-   *
-   * \param lim The limit in bytes or packets.
-   */
-  void SetQueueLimit (uint32_t lim);
-
-  /**
-   * \brief Set the thresh limits of RED.
-   *
-   * \param minTh Minimum thresh in bytes or packets.
-   * \param maxTh Maximum thresh in bytes or packets.
-   */
-  void SetTh (double minTh, double maxTh);
-
-  /**
-   * \brief Get the RED statistics after running.
-   *
-   * \returns The drop statistics.
-   */
-  Stats GetStats ();
-
- /**
-  * 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);
-
-private:
-  virtual bool DoEnqueue (Ptr<Packet> p);
-  virtual Ptr<Packet> DoDequeue (void);
-  virtual Ptr<const Packet> DoPeek (void) const;
-
-  /**
-   * \brief Initialize the queue parameters.
-   *
-   * Note: if the link bandwidth changes in the course of the
-   * simulation, the bandwidth-dependent RED parameters do not change.
-   * This should be fixed, but it would require some extra parameters,
-   * and didn't seem worth the trouble...
-   */
-  void InitializeParams (void);
-  /**
-   * \brief Compute the average queue size
-   * \param nQueued number of queued packets
-   * \param m simulated number of packets arrival during idle period
-   * \param qAvg average queue size
-   * \param qW queue weight given to cur q size sample
-   * \returns new average queue size
-   */
-  double Estimator (uint32_t nQueued, uint32_t m, double qAvg, double qW);
-  /**
-   * \brief Check if packet p needs to be dropped due to probability mark
-   * \param p packet
-   * \param qSize queue size
-   * \returns 0 for no drop/mark, 1 for drop
-   */
-  uint32_t DropEarly (Ptr<Packet> p, uint32_t qSize);
-  /**
-   * \brief Returns a probability using these function parameters for the DropEarly function
-   * \param qAvg Average queue length
-   * \param maxTh Max avg length threshold
-   * \param gentle "gentle" algorithm
-   * \param vA vA
-   * \param vB vB
-   * \param vC vC
-   * \param vD vD
-   * \param maxP max_p
-   * \returns Prob. of packet drop before "count"
-   */
-  double CalculatePNew (double qAvg, double , bool gentle, double vA,
-                        double vB, double vC, double vD, double maxP);
-  /**
-   * \brief Returns a probability using these function parameters for the DropEarly function
-   * \param p Prob. of packet drop before "count"
-   * \param count number of packets since last random number generation
-   * \param countBytes number of bytes since last drop
-   * \param meanPktSize Avg pkt size
-   * \param wait True for waiting between dropped packets
-   * \param size packet size
-   * \returns Prob. of packet drop
-   */
-  double ModifyP (double p, uint32_t count, uint32_t countBytes,
-                  uint32_t meanPktSize, bool wait, uint32_t size);
-
-  std::list<Ptr<Packet> > m_packets; //!< packets in the queue
-
-  uint32_t m_bytesInQueue; //!< bytes in the queue
-  bool m_hasRedStarted; //!< True if RED has started
-  Stats m_stats; //!< RED statistics
-
-  // ** Variables supplied by user
-  QueueMode m_mode;         //!< Mode (Bytes or packets)
-  uint32_t m_meanPktSize;   //!< Avg pkt size
-  uint32_t m_idlePktSize;   //!< Avg pkt size used during idle times
-  bool m_isWait;            //!< True for waiting between dropped packets
-  bool m_isGentle;          //!< True to increases dropping prob. slowly when ave queue exceeds maxthresh
-  double m_minTh;           //!< Min avg length threshold (bytes)
-  double m_maxTh;           //!< Max avg length threshold (bytes), should be >= 2*minTh
-  uint32_t m_queueLimit;    //!< Queue limit in bytes / packets
-  double m_qW;              //!< Queue weight given to cur queue size sample
-  double m_lInterm;         //!< The max probability of dropping a packet
-  bool m_isNs1Compat;       //!< Ns-1 compatibility
-  DataRate m_linkBandwidth; //!< Link bandwidth
-  Time m_linkDelay;         //!< Link delay
-
-  // ** Variables maintained by RED
-  double m_vProb1;          //!< Prob. of packet drop before "count"
-  double m_vA;              //!< 1.0 / (m_maxTh - m_minTh)
-  double m_vB;              //!< -m_minTh / (m_maxTh - m_minTh)
-  double m_vC;              //!< (1.0 - m_curMaxP) / m_maxTh - used in "gentle" mode
-  double m_vD;              //!< 2.0 * m_curMaxP - 1.0 - used in "gentle" mode
-  double m_curMaxP;         //!< Current max_p
-  double m_vProb;           //!< Prob. of packet drop
-  uint32_t m_countBytes;    //!< Number of bytes since last drop
-  uint32_t m_old;           //!< 0 when average queue first exceeds threshold
-  uint32_t m_idle;          //!< 0/1 idle status
-  double m_ptc;             //!< packet time constant in packets/second
-  double m_qAvg;            //!< Average queue length
-  uint32_t m_count;         //!< Number of packets since last random number generation
-  /**
-   * 0 for default RED
-   * 1 experimental (see red-queue.cc)
-   * 2 experimental (see red-queue.cc)
-   * 3 use Idle packet size in the ptc
-   */
-  uint32_t m_cautious;
-  Time m_idleTime;          //!< Start of current idle period
-
-  Ptr<UniformRandomVariable> m_uv;  //!< rng stream
-};
-
-}; // namespace ns3
-
-#endif // RED_QUEUE_H
diff -Naur ns-3.24.1/src/network/utils/simple-net-device.cc ns-3.25/src/network/utils/simple-net-device.cc
--- ns-3.24.1/src/network/utils/simple-net-device.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/utils/simple-net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -444,11 +444,11 @@
 
   p->AddPacketTag (tag);
 
-  if (m_queue->Enqueue (p))
+  if (m_queue->Enqueue (Create<QueueItem> (p)))
     {
       if (m_queue->GetNPackets () == 1 && !TransmitCompleteEvent.IsRunning ())
         {
-          p = m_queue->Dequeue ();
+          p = m_queue->Dequeue ()->GetPacket ();
           p->RemovePacketTag (tag);
           Time txTime = Time (0);
           if (m_bps > DataRate (0))
@@ -477,7 +477,7 @@
       return;
     }
 
-  Ptr<Packet> packet = m_queue->Dequeue ();
+  Ptr<Packet> packet = m_queue->Dequeue ()->GetPacket ();
 
   SimpleTag tag;
   packet->RemovePacketTag (tag);
diff -Naur ns-3.24.1/src/network/utils/sll-header.cc ns-3.25/src/network/utils/sll-header.cc
--- ns-3.24.1/src/network/utils/sll-header.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/network/utils/sll-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Université Pierre et Marie Curie
+ *
+ * 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: Matthieu Coudron <matthieu.coudron@lip6.fr>
+ */
+#include "sll-header.h"
+#include "ns3/log.h"
+
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("SllHeader");
+
+NS_OBJECT_ENSURE_REGISTERED (SllHeader);
+
+SllHeader::SllHeader ()
+  : m_packetType (UNICAST_FROM_PEER_TO_ME),
+    m_arphdType (0),
+    m_addressLength (0),
+    m_address (0),
+    m_protocolType (0)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+SllHeader::~SllHeader ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+
+TypeId
+SllHeader::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::SllHeader")
+    .SetParent<Header> ()
+    .SetGroupName ("Network")
+    .AddConstructor<SllHeader> ()
+  ;
+  return tid;
+}
+
+TypeId
+SllHeader::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+uint16_t
+SllHeader::GetArpType () const
+{
+  return m_arphdType;
+}
+
+void
+SllHeader::SetArpType (uint16_t arphdType)
+{
+  NS_LOG_FUNCTION (arphdType);
+  m_arphdType = arphdType;
+}
+
+SllHeader::PacketType
+SllHeader::GetPacketType (void) const
+{
+  return m_packetType;
+}
+
+void
+SllHeader::SetPacketType (PacketType type)
+{
+  NS_LOG_FUNCTION (type);
+  m_packetType = type;
+}
+
+void
+SllHeader::Print (std::ostream &os)  const
+{
+  os << "SLLHeader packetType=" << m_packetType << " protocol=" << m_protocolType;
+}
+
+uint32_t
+SllHeader::GetSerializedSize (void)  const
+{
+  return 2 + 2 + 2 + 8 + 2;
+}
+
+void
+SllHeader::Serialize (Buffer::Iterator start)  const
+{
+  Buffer::Iterator i = start;
+  i.WriteHtonU16 (m_packetType);
+  i.WriteHtonU16 (m_arphdType);
+  i.WriteHtonU16 (m_addressLength);
+  i.WriteHtonU64 (m_address);
+  i.WriteHtonU16 (m_protocolType);
+}
+
+uint32_t
+SllHeader::Deserialize (Buffer::Iterator start)
+{
+  Buffer::Iterator i = start;
+  m_packetType = static_cast<PacketType> (i.ReadNtohU16 ());
+  m_arphdType = i.ReadNtohU16 ();
+  m_addressLength = i.ReadNtohU16 ();
+  m_address = i.ReadNtohU64 ();
+  m_protocolType = i.ReadNtohU16 ();
+
+  return GetSerializedSize ();
+}
+
+}
diff -Naur ns-3.24.1/src/network/utils/sll-header.h ns-3.25/src/network/utils/sll-header.h
--- ns-3.24.1/src/network/utils/sll-header.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/network/utils/sll-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,125 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Université Pierre et Marie Curie
+ *
+ * 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: Matthieu Coudron <matthieu.coudron@lip6.fr>
+ */
+#ifndef SLL_HEADER_H
+#define SLL_HEADER_H
+
+#include "ns3/buffer.h"
+#include "ns3/header.h"
+#include <stdint.h>
+
+namespace ns3 {
+
+/**
+  * \ingroup packet
+  *
+  * \brief Protocol header serialization and deserialization.
+  *
+  * Libpcap sometimes add an additional header to provide information that would be
+  * lost otherwise due to the link-layer/capture mechanism, for instance when capturing from
+  * "nlmon" device on linux
+  *
+  * \see http://www.tcpdump.org/linktypes/LINKTYPE_LINUX_SLL.html
+  * \see https://wiki.wireshark.org/SLL
+  *
+  * \verbatim
+  * +---------------------------+
+  * |         Packet type       |
+  * |         (2 Octets)        |
+  * +---------------------------+
+  * |        ARPHRD_ type       |
+  * |         (2 Octets)        |
+  * +---------------------------+
+  * | Link-layer address length |
+  * |         (2 Octets)        |
+  * +---------------------------+
+  * |    Link-layer address     |
+  * |         (8 Octets)        |
+  * +---------------------------+
+  * |        Protocol type      |
+  * |         (2 Octets)        |
+  * +---------------------------+
+  * |           Payload         |
+  * .                           .
+  * .                           .
+  * .                           .
+  * \endverbatim
+  */
+class SllHeader : public Header
+{
+public:
+  enum PacketType
+  {
+    UNICAST_FROM_PEER_TO_ME = 0, /**< the packet was specifically sent to us by somebody else */
+    BROADCAST_BY_PEER = 1, /**< packet was broadcast by somebody else */
+    MULTICAST_BY_PEER = 2, /**< packet was multicast, but not broadcast, by somebody else */
+    INTERCEPTED_PACKET = 3, /**< packet was sent to somebody else by somebody else **/
+    SENT_BY_US  /**< the packet was sent by us */
+  };
+
+  /**
+    * \brief Get the type ID.
+    * \return the object TypeId
+    */
+  static TypeId GetTypeId (void);
+
+  SllHeader ();
+  virtual ~SllHeader ();
+
+  /**
+    * \return ARP header type field in network byte order
+    *  The ARPHRD_ type field is in network byte order; it contains a Linux ARPHRD_ value for the link-layer device type.
+    */
+  uint16_t GetArpType () const;
+
+  /**
+    * \param arphw ARP protocol hardware identifier
+    */
+  void SetArpType (uint16_t arphdType);
+
+   /**
+    * \return Packet type
+    */
+  enum PacketType GetPacketType () const;
+
+  /**
+    * \param type Depends on source and address of the packet
+    */
+  void SetPacketType (PacketType type);
+
+  //! Inherited from ObjectBase
+  virtual TypeId GetInstanceTypeId (void) const;
+  //! Inherited from Header
+  virtual uint32_t GetSerializedSize (void) const;
+  virtual void Serialize (Buffer::Iterator start) const;
+  virtual uint32_t Deserialize (Buffer::Iterator start);
+  virtual void Print (std::ostream &os) const;
+
+protected:
+  // declared in packet order
+  PacketType m_packetType;
+  uint16_t m_arphdType;   /**< ARP protocol hardware identifier */
+  uint16_t m_addressLength;
+  uint64_t m_address;
+  uint16_t m_protocolType;
+};
+
+} // namespace ns3
+
+#endif /* SLL_HEADER_H */
diff -Naur ns-3.24.1/src/network/wscript ns-3.25/src/network/wscript
--- ns-3.24.1/src/network/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/network/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -50,9 +50,9 @@
         'utils/pcap-file-wrapper.cc',
         'utils/queue.cc',
         'utils/radiotap-header.cc',
-        'utils/red-queue.cc',
         'utils/simple-channel.cc',
         'utils/simple-net-device.cc',
+        'utils/sll-header.cc',
         'utils/packet-socket-client.cc',
         'utils/packet-socket-server.cc',
         'utils/packet-data-calculators.cc',
@@ -76,7 +76,6 @@
         'test/packet-test-suite.cc',
         'test/packet-metadata-test.cc',
         'test/pcap-file-test-suite.cc',
-        'test/red-queue-test-suite.cc',
         'test/sequence-number-test-suite.cc',
         'test/packet-socket-apps-test-suite.cc',
         ]
@@ -133,11 +132,11 @@
         'utils/generic-phy.h',
         'utils/queue.h',
         'utils/radiotap-header.h',
-        'utils/red-queue.h',
         'utils/sequence-number.h',
         'utils/sgi-hashmap.h',
         'utils/simple-channel.h',
         'utils/simple-net-device.h',
+        'utils/sll-header.h',
         'utils/packet-socket-client.h',
         'utils/packet-socket-server.h',
         'utils/pcap-test.h',
diff -Naur ns-3.24.1/src/nix-vector-routing/bindings/callbacks_list.py ns-3.25/src/nix-vector-routing/bindings/callbacks_list.py
--- ns-3.24.1/src/nix-vector-routing/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -1,9 +1,11 @@
 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'],
     ['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::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'],
+    ['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/nix-vector-routing/bindings/modulegen__gcc_ILP32.py ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -164,12 +164,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]
@@ -178,6 +182,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]
@@ -250,6 +256,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]
@@ -262,6 +272,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]
@@ -280,6 +292,7 @@
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting [class]
     module.add_class('Ipv4NixVectorRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    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'std::map< ns3::Ipv4Address, ns3::Ptr< ns3::NixVector >, std::less< ns3::Ipv4Address >, std::allocator< std::pair< ns3::Ipv4Address const, ns3::Ptr< ns3::NixVector > > > >', u'ns3::NixMap_t')
     typehandlers.add_type_alias(u'std::map< ns3::Ipv4Address, ns3::Ptr< ns3::NixVector >, std::less< ns3::Ipv4Address >, std::allocator< std::pair< ns3::Ipv4Address const, ns3::Ptr< ns3::NixVector > > > >*', u'ns3::NixMap_t*')
@@ -407,9 +420,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'])
@@ -445,12 +460,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'])
@@ -1155,6 +1173,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', 
@@ -1170,6 +1193,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', 
@@ -1464,7 +1492,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', 
@@ -3036,6 +3064,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([])
@@ -3072,6 +3112,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([])
@@ -3163,6 +3215,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', 
@@ -3188,6 +3245,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', 
@@ -4249,6 +4321,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 >', 
@@ -4264,6 +4341,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', 
@@ -4279,6 +4361,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', 
@@ -4329,6 +4421,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]
@@ -4701,7 +4798,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')], 
@@ -4828,6 +4925,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]
@@ -4907,6 +5090,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', 
@@ -5193,6 +5381,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([])
@@ -5337,7 +5546,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/nix-vector-routing/bindings/modulegen__gcc_LP64.py ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -164,12 +164,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]
@@ -178,6 +182,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]
@@ -250,6 +256,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]
@@ -262,6 +272,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]
@@ -280,6 +292,7 @@
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
     ## ipv4-nix-vector-routing.h (module 'nix-vector-routing'): ns3::Ipv4NixVectorRouting [class]
     module.add_class('Ipv4NixVectorRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    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'std::map< ns3::Ipv4Address, ns3::Ptr< ns3::NixVector >, std::less< ns3::Ipv4Address >, std::allocator< std::pair< ns3::Ipv4Address const, ns3::Ptr< ns3::NixVector > > > >', u'ns3::NixMap_t')
     typehandlers.add_type_alias(u'std::map< ns3::Ipv4Address, ns3::Ptr< ns3::NixVector >, std::less< ns3::Ipv4Address >, std::allocator< std::pair< ns3::Ipv4Address const, ns3::Ptr< ns3::NixVector > > > >*', u'ns3::NixMap_t*')
@@ -407,9 +420,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'])
@@ -445,12 +460,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'])
@@ -1155,6 +1173,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', 
@@ -1170,6 +1193,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', 
@@ -1464,7 +1492,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', 
@@ -3036,6 +3064,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([])
@@ -3072,6 +3112,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([])
@@ -3163,6 +3215,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', 
@@ -3188,6 +3245,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', 
@@ -4249,6 +4321,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 >', 
@@ -4264,6 +4341,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', 
@@ -4279,6 +4361,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', 
@@ -4329,6 +4421,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]
@@ -4701,7 +4798,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')], 
@@ -4828,6 +4925,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]
@@ -4907,6 +5090,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', 
@@ -5193,6 +5381,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([])
@@ -5337,7 +5546,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/nix-vector-routing/doc/nix-vector-routing.h ns-3.25/src/nix-vector-routing/doc/nix-vector-routing.h
--- ns-3.24.1/src/nix-vector-routing/doc/nix-vector-routing.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/doc/nix-vector-routing.h	2016-03-23 21:36:53.000000000 -0700
@@ -34,24 +34,6 @@
  * efficient adaptation to link failures.  It simply flushes all nix-vector 
  * routing caches. Finally, IPv6 is not supported.
  *
- * \section api API and Usage
- *
- * The Nix-vector routing protocol must be added to a list of routing 
- * protocols.  It is important that list routing is utilized.
- *
- *    Example:
- *
- *    Ipv4NixVectorHelper nixRouting;
- *    Ipv4StaticRoutingHelper staticRouting;
- *
- *    Ipv4ListRoutingHelper list;
- *    list.Add (staticRouting, 0);
- *    list.Add (nixRouting, 10);
- *
- *    InternetStackHelper stack;
- *    stack.SetRoutingHelper (list);
- *    stack.Install (allNodes);
- *
  * \section impl Implementation
  *
  * ns-3 nix-vector-routing performs on-demand route computation using 
@@ -65,4 +47,6 @@
  * current node extracts the appropriate neighbor-index from the 
  * nix-vector and transmits the packet through the corresponding 
  * net-device.  This continues until the packet reaches the destination.
- * */
+ *
+ */
+
diff -Naur ns-3.24.1/src/nix-vector-routing/examples/nix-simple.cc ns-3.25/src/nix-vector-routing/examples/nix-simple.cc
--- ns-3.24.1/src/nix-vector-routing/examples/nix-simple.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/examples/nix-simple.cc	2016-03-23 21:36:53.000000000 -0700
@@ -68,14 +68,8 @@
   // NixHelper to install nix-vector routing
   // on all nodes
   Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper list;
-  list.Add (staticRouting, 0);
-  list.Add (nixRouting, 10);
-
   InternetStackHelper stack;
-  stack.SetRoutingHelper (list); // has effect on the next Install ()
+  stack.SetRoutingHelper (nixRouting); // has effect on the next Install ()
   stack.Install (allNodes);
 
   NetDeviceContainer devices12;
diff -Naur ns-3.24.1/src/nix-vector-routing/examples/nms-p2p-nix.cc ns-3.25/src/nix-vector-routing/examples/nms-p2p-nix.cc
--- ns-3.24.1/src/nix-vector-routing/examples/nms-p2p-nix.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/examples/nms-p2p-nix.cc	2016-03-23 21:36:53.000000000 -0700
@@ -44,8 +44,6 @@
 #include "ns3/onoff-application.h"
 #include "ns3/packet-sink.h"
 #include "ns3/simulator.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
 
 using namespace ns3;
@@ -76,7 +74,7 @@
       {
         for (size_t i = 0; i < m_xMax; i++)
           delete[] p[i];
-        delete p;
+        delete[] p;
         p = 0;
       }
 
@@ -126,7 +124,7 @@
   TIMER_TYPE t0, t1, t2;
   TIMER_NOW (t0);
   std::cout << " ==== DARPA NMS CAMPUS NETWORK SIMULATION ====" << std::endl;
-  LogComponentEnable ("OnOffApplication", LOG_LEVEL_INFO);
+  // LogComponentEnable ("OnOffApplication", LOG_LEVEL_INFO);
 
   int nCN = 2, nLANClients = 42;
   bool nix = true;
@@ -174,16 +172,10 @@
   p2p_100mb1ms.SetChannelAttribute ("Delay", StringValue ("1ms"));
 
   // Setup NixVector Routing
-  Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper list;
-  list.Add (staticRouting, 0);
-  list.Add (nixRouting, 10);
-
   if (nix)
     {
-      stack.SetRoutingHelper (list); // has effect on the next Install ()
+      Ipv4NixVectorHelper nixRouting;
+      stack.SetRoutingHelper (nixRouting); // has effect on the next Install ()
     }
 
   // Create Campus Networks
diff -Naur ns-3.24.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc ns-3.25/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc
--- ns-3.24.1/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/nix-vector-routing/model/ipv4-nix-vector-routing.cc	2016-03-23 21:36:53.000000000 -0700
@@ -143,7 +143,7 @@
   /// Do not process packets to self (see \bugid{1308})
   if (source == destNode)
     {
-      NS_LOG_DEBUG ("Do not processs packets to self");
+      NS_LOG_DEBUG ("Do not process packets to self");
       return 0;
     }
   else
@@ -619,6 +619,31 @@
 
   CheckCacheStateAndFlush ();
 
+  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);
+
+  // Local delivery
+  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;
+        }
+    }
+
   Ptr<Ipv4Route> rtentry;
 
   // Get the nix-vector from the packet
@@ -677,6 +702,12 @@
   CheckCacheStateAndFlush ();
 
   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)
+      << ", Nix Routing" << std::endl;
+
   *os << "NixCache:" << std::endl;
   if (m_nixCache.size () > 0)
     {
@@ -714,6 +745,7 @@
           *os << std::endl;
         }
     }
+  *os << std::endl;
 }
 
 // virtual functions from Ipv4RoutingProtocol 
diff -Naur ns-3.24.1/src/olsr/bindings/callbacks_list.py ns-3.25/src/olsr/bindings/callbacks_list.py
--- ns-3.24.1/src/olsr/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/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/olsr/bindings/modulegen__gcc_ILP32.py ns-3.25/src/olsr/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/olsr/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -206,12 +206,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]
@@ -220,6 +224,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 +322,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]
@@ -332,6 +342,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> >'])
     ## 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]
@@ -344,6 +356,7 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    module.add_container('std::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')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     
@@ -579,9 +592,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'])
@@ -629,6 +644,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'])
@@ -637,6 +654,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_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'])
@@ -1418,6 +1436,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', 
@@ -1433,6 +1456,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', 
@@ -1727,7 +1755,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', 
@@ -3437,6 +3465,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([])
@@ -3473,6 +3513,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([])
@@ -3564,6 +3616,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', 
@@ -3589,6 +3646,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', 
@@ -5023,6 +5095,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 >', 
@@ -5038,6 +5115,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', 
@@ -5053,6 +5135,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', 
@@ -5103,6 +5195,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]
@@ -5639,7 +5736,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')], 
@@ -5766,6 +5863,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]
@@ -5845,6 +6028,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', 
@@ -6219,6 +6407,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/olsr/bindings/modulegen__gcc_LP64.py ns-3.25/src/olsr/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/olsr/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -206,12 +206,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]
@@ -220,6 +224,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 +322,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]
@@ -332,6 +342,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> >'])
     ## 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]
@@ -344,6 +356,7 @@
     module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
     ## ipv4-list-routing.h (module 'internet'): ns3::Ipv4ListRouting [class]
     module.add_class('Ipv4ListRouting', import_from_module='ns.internet', parent=root_module['ns3::Ipv4RoutingProtocol'])
+    module.add_container('std::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')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     
@@ -579,9 +592,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'])
@@ -629,6 +644,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'])
@@ -637,6 +654,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_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'])
@@ -1418,6 +1436,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', 
@@ -1433,6 +1456,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', 
@@ -1727,7 +1755,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', 
@@ -3437,6 +3465,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([])
@@ -3473,6 +3513,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([])
@@ -3564,6 +3616,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', 
@@ -3589,6 +3646,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', 
@@ -5023,6 +5095,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 >', 
@@ -5038,6 +5115,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', 
@@ -5053,6 +5135,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', 
@@ -5103,6 +5195,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]
@@ -5639,7 +5736,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')], 
@@ -5766,6 +5863,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]
@@ -5845,6 +6028,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', 
@@ -6219,6 +6407,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/olsr/doc/olsr.rst ns-3.25/src/olsr/doc/olsr.rst
--- ns-3.24.1/src/olsr/doc/olsr.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/doc/olsr.rst	2016-03-23 21:36:53.000000000 -0700
@@ -9,13 +9,16 @@
 University of Murcia (Spain) by Francisco J. Ros for NS-2, and was
 ported to NS-3 by Gustavo Carneiro at INESC Porto (Portugal).
 
+The implementation is based on OLSR Version 1 (:rfc:`3626`) and
+it is *not* compliant with OLSR Version 2 (:rfc:`7181`) or any 
+of the Version 2 extensions.
+ 
 Model Description
 *****************
 
 The source code for the OLSR model lives in the directory `src/olsr`.
-
-Design
-++++++
+As stated before, the model is based on :rfc:`3626`. Moreover, many
+design choices are based on the previous ns2 model.
 
 Scope and Limitations
 +++++++++++++++++++++
@@ -35,13 +38,23 @@
 ++++++++++
 
 .. [rfc3626] :rfc:`3626` *Optimized Link State Routing*
+.. [rfc7181] :rfc:`7181` *The Optimized Link State Routing Protocol Version 2*
 
 Usage
 *****
 
+The usage pattern is the one of all the Internet routing protocols.
+Since OLSR is not installed by default in the Internet stack, it is necessary to
+set it in the Internet Stack helper by using ``InternetStackHelper::SetRoutingHelper``
+
 Examples
 ++++++++
 
+The examples are in the ``src/olsr/examples/`` directory. However, many other examples esists in the
+general examples directory, e.g., ``examples/routing/manet-routing-compare.cc``.
+
+For specific examples of the HNA feature, see the examples in ``src/olsr/examples/``.
+
 Helpers
 +++++++
 
@@ -61,21 +74,29 @@
 MidInterval, Willingness.  Other parameters are defined as macros
 in ``olsr-routing-protocol.cc``.
 
+The list of configurabel attributes is:
+
+* HelloInterval (time, default 2s), HELLO messages emission interval.
+* TcInterval (time, default 5s), TC messages emission interval.
+* MidInterval (time, default 5s), MID messages emission interval.
+* HnaInterval (time, default 5s), HNA messages emission interval.
+* Willingness (enum, default OLSR_WILL_DEFAULT), Willingness of a node to carry and forward traffic for other nodes.
+
 Tracing
 +++++++
 
-Logging
-+++++++
+The available traces are:
+
+* Rx: Receive OLSR packet.
+* Tx: Send OLSR packet.
+* RoutingTableChanged: The OLSR routing table has changed.
 
 Caveats
 +++++++
 
+The code does not present any known issue.
+
 Validation
 **********
 
-Unit tests
-++++++++++
-
-Larger-scale performance tests
-++++++++++++++++++++++++++++++
-
+The code validationhas been done through Wireshark message compliance and unit testings.
diff -Naur ns-3.24.1/src/olsr/examples/olsr-hna.cc ns-3.25/src/olsr/examples/olsr-hna.cc
--- ns-3.24.1/src/olsr/examples/olsr-hna.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/examples/olsr-hna.cc	2016-03-23 21:36:53.000000000 -0700
@@ -18,10 +18,10 @@
  *
  */
 
-// 
+//
 // This script, adapted from examples/wireless/wifi-simple-adhoc illustrates
 // the use of OLSR HNA.
-// 
+//
 // Network Topology:
 //
 //             |------ OLSR ------|   |---- non-OLSR ----|
@@ -74,14 +74,14 @@
   NS_LOG_UNCOND ("Received one packet!");
 }
 
-static void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, 
+static void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize,
                              uint32_t pktCount, Time pktInterval )
 {
   if (pktCount > 0)
     {
       socket->Send (Create<Packet> (pktSize));
-      Simulator::Schedule (pktInterval, &GenerateTraffic, 
-                           socket, pktSize,pktCount-1, pktInterval);
+      Simulator::Schedule (pktInterval, &GenerateTraffic,
+                           socket, pktSize,pktCount - 1, pktInterval);
     }
   else
     {
@@ -121,7 +121,7 @@
   // turn off RTS/CTS for frames below 2200 bytes
   Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
   // Fix non-unicast data rate to be the same as that of unicast
-  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", 
+  Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",
                       StringValue (phyMode));
 
   NodeContainer olsrNodes;
@@ -141,7 +141,7 @@
   YansWifiPhyHelper wifiPhy =  YansWifiPhyHelper::Default ();
   // This is one parameter that matters when using FixedRssLossModel
   // set it to zero; otherwise, gain will be added
-  wifiPhy.Set ("RxGain", DoubleValue (0) ); 
+  wifiPhy.Set ("RxGain", DoubleValue (0) );
   // ns-3 supports RadioTap and Prism tracing extensions for 802.11b
   wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO);
 
@@ -152,8 +152,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));
@@ -166,8 +166,8 @@
   csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2)));
   NetDeviceContainer csmaDevices = csma.Install (NodeContainer (csmaNodes.Get (0), olsrNodes.Get (1)));
 
-  // Note that with FixedRssLossModel, the positions below are not 
-  // used for received signal strength. 
+  // Note that with FixedRssLossModel, the positions below are not
+  // used for received signal strength.
   MobilityHelper mobility;
   Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
   positionAlloc->Add (Vector (0.0, 0.0, 0.0));
@@ -242,7 +242,7 @@
       hnaEntries->AddNetworkRouteTo (Ipv4Address ("172.16.1.0"), Ipv4Mask ("255.255.255.0"), uint32_t (2), uint32_t (1));
       olsrrp_Gw->SetRoutingTableAssociation (hnaEntries);
     }
- 
+
   if (assocMethod2)
     {
       // Specify the required associations directly.
@@ -254,7 +254,7 @@
   csma.EnablePcap ("olsr-hna", csmaDevices, false);
 
   Simulator::ScheduleWithContext (source->GetNode ()->GetId (),
-                                  Seconds (15.0), &GenerateTraffic, 
+                                  Seconds (15.0), &GenerateTraffic,
                                   source, packetSize, numPackets, interPacketInterval);
 
   Simulator::Stop (Seconds (20.0));
diff -Naur ns-3.24.1/src/olsr/examples/simple-point-to-point-olsr.cc ns-3.25/src/olsr/examples/simple-point-to-point-olsr.cc
--- ns-3.24.1/src/olsr/examples/simple-point-to-point-olsr.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/examples/simple-point-to-point-olsr.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,7 +32,7 @@
 // - CBR/UDP flows from n0 to n4, and from n3 to n1
 // - UDP packet size of 210 bytes, with per-packet interval 0.00375 sec.
 //   (i.e., DataRate of 448,000 bps)
-// - DropTail queues 
+// - DropTail queues
 // - Tracing of queues and packet receptions to file "simple-point-to-point-olsr.tr"
 
 #include <iostream>
@@ -53,16 +53,16 @@
 
 NS_LOG_COMPONENT_DEFINE ("SimplePointToPointOlsrExample");
 
-int 
+int
 main (int argc, char *argv[])
 {
   // Users may find it convenient to turn on explicit debugging
   // for selected modules; the below lines suggest how to do this
-#if 0 
+#if 0
   LogComponentEnable ("SimpleGlobalRoutingExample", LOG_LEVEL_INFO);
 #endif
 
-  // Set up some default values for the simulation.  Use the 
+  // Set up some default values for the simulation.  Use the
 
   Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (210));
   Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("448kb/s"));
@@ -130,7 +130,7 @@
   NS_LOG_INFO ("Create Applications.");
   uint16_t port = 9;   // Discard port (RFC 863)
 
-  OnOffHelper onoff ("ns3::UdpSocketFactory", 
+  OnOffHelper onoff ("ns3::UdpSocketFactory",
                      InetSocketAddress (i34.GetAddress (1), port));
   onoff.SetConstantRate (DataRate ("448kb/s"));
 
diff -Naur ns-3.24.1/src/olsr/helper/olsr-helper.cc ns-3.25/src/olsr/helper/olsr-helper.cc
--- ns-3.24.1/src/olsr/helper/olsr-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/helper/olsr-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -37,10 +37,10 @@
   m_interfaceExclusions = o.m_interfaceExclusions;
 }
 
-OlsrHelper* 
-OlsrHelper::Copy (void) const 
+OlsrHelper*
+OlsrHelper::Copy (void) const
 {
-  return new OlsrHelper (*this); 
+  return new OlsrHelper (*this);
 }
 
 void
@@ -48,7 +48,7 @@
 {
   std::map< Ptr<Node>, std::set<uint32_t> >::iterator it = m_interfaceExclusions.find (node);
 
-  if(it == m_interfaceExclusions.end ())
+  if (it == m_interfaceExclusions.end ())
     {
       std::set<uint32_t> interfaces;
       interfaces.insert (interface);
@@ -61,14 +61,14 @@
     }
 }
 
-Ptr<Ipv4RoutingProtocol> 
+Ptr<Ipv4RoutingProtocol>
 OlsrHelper::Create (Ptr<Node> node) const
 {
   Ptr<olsr::RoutingProtocol> agent = m_agentFactory.Create<olsr::RoutingProtocol> ();
 
   std::map<Ptr<Node>, std::set<uint32_t> >::const_iterator it = m_interfaceExclusions.find (node);
 
-  if(it != m_interfaceExclusions.end ())
+  if (it != m_interfaceExclusions.end ())
     {
       agent->SetInterfaceExclusions (it->second);
     }
@@ -77,13 +77,13 @@
   return agent;
 }
 
-void 
+void
 OlsrHelper::Set (std::string name, const AttributeValue &value)
 {
   m_agentFactory.Set (name, value);
 }
 
-int64_t 
+int64_t
 OlsrHelper::AssignStreams (NodeContainer c, int64_t stream)
 {
   int64_t currentStream = stream;
@@ -108,7 +108,7 @@
           int16_t priority;
           Ptr<Ipv4RoutingProtocol> listProto;
           Ptr<olsr::RoutingProtocol> listOlsr;
-          for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++) 
+          for (uint32_t i = 0; i < list->GetNRoutingProtocols (); i++)
             {
               listProto = list->GetRoutingProtocol (i, priority);
               listOlsr = DynamicCast<olsr::RoutingProtocol> (listProto);
diff -Naur ns-3.24.1/src/olsr/helper/olsr-helper.h ns-3.25/src/olsr/helper/olsr-helper.h
--- ns-3.24.1/src/olsr/helper/olsr-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/helper/olsr-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -30,9 +30,11 @@
 namespace ns3 {
 
 /**
+ * \ingroup olsr
+ *
  * \brief Helper class that adds OLSR routing to nodes.
  *
- * This class is expected to be used in conjunction with 
+ * This class is expected to be used in conjunction with
  * ns3::InternetStackHelper::SetRoutingHelper
  */
 class OlsrHelper : public Ipv4RoutingHelper
@@ -51,8 +53,8 @@
   OlsrHelper (const OlsrHelper &);
 
   /**
-   * \returns pointer to clone of this OlsrHelper 
-   * 
+   * \returns pointer to clone of this OlsrHelper
+   *
    * This method is mainly for internal use by the other helpers;
    * clients are expected to free the dynamic memory allocated by this method
    */
@@ -82,17 +84,17 @@
    */
   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 of the InternetStackHelper
-  * should have previously been called by the user.
-  *
-  * \param stream first stream index to use
-  * \param c NodeContainer of the set of nodes for which the OlsrRoutingProtocol
-  *          should be modified to use a fixed stream
-  * \return the number of stream indices assigned by this helper
-  */
+  /**
+   * 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 of the InternetStackHelper
+   * should have previously been called by the user.
+   *
+   * \param stream first stream index to use
+   * \param c NodeContainer of the set of nodes for which the OlsrRoutingProtocol
+   *          should be modified to use a fixed stream
+   * \return the number of stream indices assigned by this helper
+   */
   int64_t AssignStreams (NodeContainer c, int64_t stream);
 
 private:
diff -Naur ns-3.24.1/src/olsr/model/olsr-header.cc ns-3.25/src/olsr/model/olsr-header.cc
--- ns-3.24.1/src/olsr/model/olsr-header.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,7 +30,7 @@
 #define OLSR_PKT_HEADER_SIZE 4
 
 namespace ns3 {
-  
+
 NS_LOG_COMPONENT_DEFINE ("OlsrHeader");
 
 namespace olsr {
@@ -51,17 +51,18 @@
   int a, b = 0;
 
   // find the largest integer 'b' such that: T/C >= 2^b
-  for (b = 0; (seconds/OLSR_C) >= (1 << b); ++b)
-    ;
-  NS_ASSERT ((seconds/OLSR_C) < (1 << b));
+  for (b = 0; (seconds / OLSR_C) >= (1 << b); ++b)
+    {
+    }
+  NS_ASSERT ((seconds / OLSR_C) < (1 << b));
   b--;
-  NS_ASSERT ((seconds/OLSR_C) >= (1 << b));
+  NS_ASSERT ((seconds / OLSR_C) >= (1 << b));
 
   // compute the expression 16*(T/(C*(2^b))-1), which may not be a integer
-  double tmp = 16*(seconds/(OLSR_C*(1<<b))-1);
+  double tmp = 16 * (seconds / (OLSR_C * (1 << b)) - 1);
 
   // round it up.  This results in the value for 'a'
-  a = (int) std::ceil (tmp);
+  a = (int) std::ceil (tmp - 0.5);
 
   // if 'a' is equal to 16: increment 'b' by one, and set 'a' to 0
   if (a == 16)
@@ -90,7 +91,7 @@
   int a = (olsrFormat >> 4);
   int b = (olsrFormat & 0xf);
   // value = C*(1+a/16)*2^b [in seconds]
-  return OLSR_C * (1 + a/16.0) * (1 << b);
+  return OLSR_C * (1 + a / 16.0) * (1 << b);
 }
 
 
@@ -123,13 +124,13 @@
   return GetTypeId ();
 }
 
-uint32_t 
+uint32_t
 PacketHeader::GetSerializedSize (void) const
 {
   return OLSR_PKT_HEADER_SIZE;
 }
 
-void 
+void
 PacketHeader::Print (std::ostream &os) const
 {
   /// \todo
@@ -207,7 +208,7 @@
   return size;
 }
 
-void 
+void
 MessageHeader::Print (std::ostream &os) const
 {
   /// \todo
@@ -282,13 +283,13 @@
 
 // ---------------- OLSR MID Message -------------------------------
 
-uint32_t 
+uint32_t
 MessageHeader::Mid::GetSerializedSize (void) const
 {
   return this->interfaceAddresses.size () * IPV4_ADDRESS_SIZE;
 }
 
-void 
+void
 MessageHeader::Mid::Print (std::ostream &os) const
 {
   /// \todo
@@ -318,7 +319,9 @@
   this->interfaceAddresses.erase (this->interfaceAddresses.begin (),
                                   this->interfaceAddresses.end ());
   for (int n = 0; n < numAddresses; ++n)
-    this->interfaceAddresses.push_back (Ipv4Address (i.ReadNtohU32 ()));
+    {
+      this->interfaceAddresses.push_back (Ipv4Address (i.ReadNtohU32 ()));
+    }
   return GetSerializedSize ();
 }
 
@@ -326,7 +329,7 @@
 
 // ---------------- OLSR HELLO Message -------------------------------
 
-uint32_t 
+uint32_t
 MessageHeader::Hello::GetSerializedSize (void) const
 {
   uint32_t size = 4;
@@ -340,7 +343,7 @@
   return size;
 }
 
-void 
+void
 MessageHeader::Hello::Print (std::ostream &os) const
 {
   /// \todo
@@ -417,13 +420,13 @@
 
 // ---------------- OLSR TC Message -------------------------------
 
-uint32_t 
+uint32_t
 MessageHeader::Tc::GetSerializedSize (void) const
 {
   return 4 + this->neighborAddresses.size () * IPV4_ADDRESS_SIZE;
 }
 
-void 
+void
 MessageHeader::Tc::Print (std::ostream &os) const
 {
   /// \todo
@@ -459,7 +462,9 @@
   int numAddresses = (messageSize - 4) / IPV4_ADDRESS_SIZE;
   this->neighborAddresses.clear ();
   for (int n = 0; n < numAddresses; ++n)
-    this->neighborAddresses.push_back (Ipv4Address (i.ReadNtohU32 ()));
+    {
+      this->neighborAddresses.push_back (Ipv4Address (i.ReadNtohU32 ()));
+    }
 
   return messageSize;
 }
@@ -467,13 +472,13 @@
 
 // ---------------- OLSR HNA Message -------------------------------
 
-uint32_t 
+uint32_t
 MessageHeader::Hna::GetSerializedSize (void) const
 {
-  return 2*this->associations.size () * IPV4_ADDRESS_SIZE;
+  return 2 * this->associations.size () * IPV4_ADDRESS_SIZE;
 }
 
-void 
+void
 MessageHeader::Hna::Print (std::ostream &os) const
 {
   /// \todo
@@ -496,7 +501,7 @@
 {
   Buffer::Iterator i = start;
 
-  NS_ASSERT (messageSize % (IPV4_ADDRESS_SIZE*2) == 0);
+  NS_ASSERT (messageSize % (IPV4_ADDRESS_SIZE * 2) == 0);
   int numAddresses = messageSize / IPV4_ADDRESS_SIZE / 2;
   this->associations.clear ();
   for (int n = 0; n < numAddresses; ++n)
diff -Naur ns-3.24.1/src/olsr/model/olsr-header.h ns-3.25/src/olsr/model/olsr-header.h
--- ns-3.24.1/src/olsr/model/olsr-header.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -34,67 +34,95 @@
 double EmfToSeconds (uint8_t emf);
 uint8_t SecondsToEmf (double seconds);
 
-// 3.3.  Packet Format
-//
-//    The basic layout of any packet in OLSR is as follows (omitting IP and
-//    UDP headers):
-//
-//        0                   1                   2                   3
-//        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |         Packet Length         |    Packet Sequence Number     |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Message Type |     Vtime     |         Message Size          |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |                      Originator Address                       |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Time To Live |   Hop Count   |    Message Sequence Number    |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |                                                               |
-//       :                            MESSAGE                            :
-//       |                                                               |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Message Type |     Vtime     |         Message Size          |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |                      Originator Address                       |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Time To Live |   Hop Count   |    Message Sequence Number    |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |                                                               |
-//       :                            MESSAGE                            :
-//       |                                                               |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       :                                                               :
-//                (etc.)
+/**
+ * \ingroup olsr
+ *
+ * The basic layout of any packet in OLSR is as follows (omitting IP and
+ * UDP headers):
+  \verbatim
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |         Packet Length         |    Packet Sequence Number     |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Message Type |     Vtime     |         Message Size          |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                      Originator Address                       |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Time To Live |   Hop Count   |    Message Sequence Number    |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                                                               |
+   :                            MESSAGE                            :
+   |                                                               |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Message Type |     Vtime     |         Message Size          |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                      Originator Address                       |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Time To Live |   Hop Count   |    Message Sequence Number    |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                                                               |
+   :                            MESSAGE                            :
+   |                                                               |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   :                                                               :
+            (etc.)
+  \endverbatim
+  *
+  * This header only holds the common part of a message group, i.e.,
+  * the first 4 bytes.
+  */
 class PacketHeader : public Header
 {
 public:
   PacketHeader ();
   virtual ~PacketHeader ();
 
+  /**
+   * Set the packet total length.
+   * \param length The packet length.
+   */
   void SetPacketLength (uint16_t length)
   {
     m_packetLength = length;
   }
+
+  /**
+   * Get the packet total length.
+   * \return The packet length.
+   */
   uint16_t GetPacketLength () const
   {
     return m_packetLength;
   }
 
+  /**
+   * Set the packet sequence number.
+   * \param seqnum The packet sequence number.
+   */
   void SetPacketSequenceNumber (uint16_t seqnum)
   {
     m_packetSequenceNumber = seqnum;
   }
+
+  /**
+   * Get the packet sequence number.
+   * \returns The packet sequence number.
+   */
   uint16_t GetPacketSequenceNumber () const
   {
     return m_packetSequenceNumber;
   }
 
 private:
-  uint16_t m_packetLength;
-  uint16_t m_packetSequenceNumber;
+  uint16_t m_packetLength;          //!< The packet length.
+  uint16_t m_packetSequenceNumber;  //!< The packet sequence number.
 
 public:
+  /**
+   * \brief Get the type ID.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -103,21 +131,37 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 };
 
-
-//        0                   1                   2                   3
-//        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Message Type |     Vtime     |         Message Size          |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |                      Originator Address                       |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-//       |  Time To Live |   Hop Count   |    Message Sequence Number    |
-//       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+/**
+ * \ingroup olsr
+ *
+ * This header can store HELP, TC, MID and HNA messages.
+ * The header size is variable, and depends on the
+ * actual message type.
+ *
+  \verbatim
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Message Type |     Vtime     |         Message Size          |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                      Originator Address                       |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |  Time To Live |   Hop Count   |    Message Sequence Number    |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                                                               |
+   :                            MESSAGE                            :
+   |                                                               |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+  \endverbatim
+ */
 class MessageHeader : public Header
 {
 public:
-
-  enum MessageType {
+  /**
+   * Message type
+   */
+  enum MessageType
+  {
     HELLO_MESSAGE = 1,
     TC_MESSAGE    = 2,
     MID_MESSAGE   = 3,
@@ -127,79 +171,122 @@
   MessageHeader ();
   virtual ~MessageHeader ();
 
+  /**
+   * Set the message type.
+   * \param messageType The message type.
+   */
   void SetMessageType (MessageType messageType)
   {
     m_messageType = messageType;
   }
+  /**
+   * Get the message type.
+   * \return The message type.
+   */
   MessageType GetMessageType () const
   {
     return m_messageType;
   }
 
+  /**
+   * Set the validity time.
+   * \param time The validity time.
+   */
   void SetVTime (Time time)
   {
     m_vTime = SecondsToEmf (time.GetSeconds ());
   }
+  /**
+   * Get the validity time.
+   * \return The validity time.
+   */
   Time GetVTime () const
   {
     return Seconds (EmfToSeconds (m_vTime));
   }
 
+  /**
+   * Set the originator address.
+   * \param originatorAddress The originator address.
+   */
   void SetOriginatorAddress (Ipv4Address originatorAddress)
   {
     m_originatorAddress = originatorAddress;
   }
+  /**
+   * Get the originator address.
+   * \return The originator address.
+   */
   Ipv4Address GetOriginatorAddress () const
   {
     return m_originatorAddress;
   }
 
+  /**
+   * Set the time to live.
+   * \param timeToLive The time to live.
+   */
   void SetTimeToLive (uint8_t timeToLive)
   {
     m_timeToLive = timeToLive;
   }
+  /**
+   * Get the time to live.
+   * \return The time to live.
+   */
   uint8_t GetTimeToLive () const
   {
     return m_timeToLive;
   }
 
+  /**
+   * Set the hop count.
+   * \param hopCount The hop count.
+   */
   void SetHopCount (uint8_t hopCount)
   {
     m_hopCount = hopCount;
   }
+  /**
+   * Get the hop count.
+   * \return The hop count.
+   */
   uint8_t GetHopCount () const
   {
     return m_hopCount;
   }
 
+  /**
+   * Set the message sequence number.
+   * \param messageSequenceNumber The message sequence number.
+   */
   void SetMessageSequenceNumber (uint16_t messageSequenceNumber)
   {
     m_messageSequenceNumber = messageSequenceNumber;
   }
+  /**
+   * Get the message sequence number.
+   * \return The message sequence number.
+   */
   uint16_t GetMessageSequenceNumber () const
   {
     return m_messageSequenceNumber;
   }
 
-//   void SetMessageSize (uint16_t messageSize)
-//   {
-//     m_messageSize = messageSize;
-//   }
-//   uint16_t GetMessageSize () const
-//   {
-//     return m_messageSize;
-//   }
-
 private:
-  MessageType m_messageType;
-  uint8_t m_vTime;
-  Ipv4Address m_originatorAddress;
-  uint8_t m_timeToLive;
-  uint8_t m_hopCount;
-  uint16_t m_messageSequenceNumber;
-  uint16_t m_messageSize;
+  MessageType m_messageType;        //!< The message type
+  uint8_t m_vTime;                  //!< The validity time.
+  Ipv4Address m_originatorAddress;  //!< The originator address.
+  uint8_t m_timeToLive;             //!< The time to live.
+  uint8_t m_hopCount;               //!< The hop count.
+  uint16_t m_messageSequenceNumber; //!< The message sequence number.
+  uint16_t m_messageSize;           //!< The message size.
 
 public:
+  /**
+   * \brief Get the type ID.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual void Print (std::ostream &os) const;
@@ -207,153 +294,283 @@
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
-  // 5.1.  MID Message Format
-  //
-  //    The proposed format of a MID message is as follows:
-  //
-  //        0                   1                   2                   3
-  //        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                    OLSR Interface Address                     |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                    OLSR Interface Address                     |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                              ...                              |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+  /**
+   * \ingroup olsr
+   * MID Message Format
+   *
+  \verbatim
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                    OLSR Interface Address                     |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                    OLSR Interface Address                     |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                              ...                              |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+  \endverbatim
+  */
   struct Mid
   {
-    std::vector<Ipv4Address> interfaceAddresses;
+    std::vector<Ipv4Address> interfaceAddresses;  //!< Interface Address container.
+    /**
+     * This method is used to print the content of a MID message.
+     * \param os output stream
+     */
     void Print (std::ostream &os) const;
+    /**
+     * Returns the expected size of the header.
+     * \returns the expected size of the header.
+     */
     uint32_t GetSerializedSize (void) const;
+    /**
+     * This method is used by Packet::AddHeader to
+     * store a header into the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        be written.
+     */
     void Serialize (Buffer::Iterator start) const;
+    /**
+     * This method is used by Packet::RemoveHeader to
+     * re-create a header from the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        read from.
+     * \param messageSize the message size.
+     * \returns the number of bytes read.
+     */
     uint32_t Deserialize (Buffer::Iterator start, uint32_t messageSize);
   };
 
-  // 6.1.  HELLO Message Format
-  //
-  //        0                   1                   2                   3
-  //        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-  //
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |          Reserved             |     Htime     |  Willingness  |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |   Link Code   |   Reserved    |       Link Message Size       |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                  Neighbor Interface Address                   |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                  Neighbor Interface Address                   |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       :                             .  .  .                           :
-  //       :                                                               :
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |   Link Code   |   Reserved    |       Link Message Size       |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                  Neighbor Interface Address                   |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                  Neighbor Interface Address                   |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       :                                                               :
-  //       :                                       :
-  //    (etc.)
+  /**
+   * \ingroup olsr
+   * HELLO Message Format
+   *
+  \verbatim
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |          Reserved             |     Htime     |  Willingness  |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |   Link Code   |   Reserved    |       Link Message Size       |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                  Neighbor Interface Address                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                  Neighbor Interface Address                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   :                             .  .  .                           :
+   :                                                               :
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |   Link Code   |   Reserved    |       Link Message Size       |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                  Neighbor Interface Address                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   |                  Neighbor Interface Address                   |
+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   :                                                               :
+     (etc.)
+  \endverbatim
+  */
   struct Hello
   {
-    struct LinkMessage {
-      uint8_t linkCode;
-      std::vector<Ipv4Address> neighborInterfaceAddresses;
+    /**
+     * Link message item
+     */
+    struct LinkMessage
+    {
+      uint8_t linkCode;       //!< Link code
+      std::vector<Ipv4Address> neighborInterfaceAddresses;  //!< Neighbor interface address container.
     };
 
-    uint8_t hTime;
+    uint8_t hTime;  //!< HELLO emission interval (coded)
+
+    /**
+     * Set the HELLO emission interval.
+     * \param time The HELLO emission interval.
+     */
     void SetHTime (Time time)
     {
       this->hTime = SecondsToEmf (time.GetSeconds ());
     }
+
+    /**
+     * Get the HELLO emission interval.
+     * \return The HELLO emission interval.
+     */
     Time GetHTime () const
     {
       return Seconds (EmfToSeconds (this->hTime));
     }
 
-    uint8_t willingness;
-    std::vector<LinkMessage> linkMessages;
+    uint8_t willingness; //!< The willingness of a node to carry and forward traffic for other nodes.
+    std::vector<LinkMessage> linkMessages; //!< Link messages container.
 
+    /**
+     * This method is used to print the content of a MID message.
+     * \param os output stream
+     */
     void Print (std::ostream &os) const;
+    /**
+     * Returns the expected size of the header.
+     * \returns the expected size of the header.
+     */
     uint32_t GetSerializedSize (void) const;
+    /**
+     * This method is used by Packet::AddHeader to
+     * store a header into the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        be written.
+     */
     void Serialize (Buffer::Iterator start) const;
+    /**
+     * This method is used by Packet::RemoveHeader to
+     * re-create a header from the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        read from.
+     * \param messageSize the message size.
+     * \returns the number of bytes read.
+     */
     uint32_t Deserialize (Buffer::Iterator start, uint32_t messageSize);
   };
 
-  // 9.1.  TC Message Format
-  //
-  //    The proposed format of a TC message is as follows:
-  //
-  //        0                   1                   2                   3
-  //        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |              ANSN             |           Reserved            |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |               Advertised Neighbor Main Address                |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |               Advertised Neighbor Main Address                |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                              ...                              |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
+  /**
+   * \ingroup olsr
+   * TC Message Format
+   *
+   \verbatim
+     0                   1                   2                   3
+     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |              ANSN             |           Reserved            |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |               Advertised Neighbor Main Address                |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |               Advertised Neighbor Main Address                |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                              ...                              |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   \endverbatim
+   */
   struct Tc
   {
-    std::vector<Ipv4Address> neighborAddresses;
-    uint16_t ansn;
+    std::vector<Ipv4Address> neighborAddresses; //!< Neighbor address container.
+    uint16_t ansn;  //!< Advertised Neighbor Sequence Number.
 
+    /**
+     * This method is used to print the content of a MID message.
+     * \param os output stream
+     */
     void Print (std::ostream &os) const;
+    /**
+     * Returns the expected size of the header.
+     * \returns the expected size of the header.
+     */
     uint32_t GetSerializedSize (void) const;
+    /**
+     * This method is used by Packet::AddHeader to
+     * store a header into the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        be written.
+     */
     void Serialize (Buffer::Iterator start) const;
+    /**
+     * This method is used by Packet::RemoveHeader to
+     * re-create a header from the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        read from.
+     * \param messageSize the message size.
+     * \returns the number of bytes read.
+     */
     uint32_t Deserialize (Buffer::Iterator start, uint32_t messageSize);
   };
 
 
-  // 12.1.  HNA Message Format
-  //
-  //    The proposed format of an HNA-message is:
-  //
-  //        0                   1                   2                   3
-  //        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                         Network Address                       |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                             Netmask                           |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                         Network Address                       |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                             Netmask                           |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  //       |                              ...                              |
-  //       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-  // Note: HNA stands for Host Network Association
+  /**
+   * \ingroup olsr
+   * HNA (Host Network Association) Message Format
+   *
+   \verbatim
+     0                   1                   2                   3
+     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                         Network Address                       |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                             Netmask                           |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                         Network Address                       |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                             Netmask                           |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                              ...                              |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+   \endverbatim
+   */
   struct Hna
   {
+    /**
+     * Association item structure.
+     */
     struct Association
     {
-      Ipv4Address address;
-      Ipv4Mask mask;
+      Ipv4Address address; //!< IPv4 Address.
+      Ipv4Mask mask;       //!< IPv4 netmask.
     };
-    std::vector<Association> associations;
 
+    std::vector<Association> associations; //!< Association container.
+
+    /**
+     * This method is used to print the content of a MID message.
+     * \param os output stream
+     */
     void Print (std::ostream &os) const;
+    /**
+     * Returns the expected size of the header.
+     * \returns the expected size of the header.
+     */
     uint32_t GetSerializedSize (void) const;
+    /**
+     * This method is used by Packet::AddHeader to
+     * store a header into the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        be written.
+     */
     void Serialize (Buffer::Iterator start) const;
+    /**
+     * This method is used by Packet::RemoveHeader to
+     * re-create a header from the byte buffer of a packet.
+     *
+     * \param start an iterator which points to where the header should
+     *        read from.
+     * \param messageSize the message size.
+     * \returns the number of bytes read.
+     */
     uint32_t Deserialize (Buffer::Iterator start, uint32_t messageSize);
   };
 
 private:
+  /**
+   * Structure holding the message content.
+   */
   struct
   {
-    Mid mid;
-    Hello hello;
-    Tc tc;
-    Hna hna;
-  } m_message; // union not allowed
+    Mid mid;      //!< MID message (optional).
+    Hello hello;  //!< HELLO message (optional).
+    Tc tc;        //!< TC message (optional).
+    Hna hna;      //!< HNA message (optional).
+  } m_message; //!< The actual message being carried.
 
 public:
-
+  /**
+   * Set the message type to MID and return the message content.
+   * \returns The MID message.
+   */
   Mid& GetMid ()
   {
     if (m_messageType == 0)
@@ -367,6 +584,10 @@
     return m_message.mid;
   }
 
+  /**
+   * Set the message type to HELLO and return the message content.
+   * \returns The HELLO message.
+   */
   Hello& GetHello ()
   {
     if (m_messageType == 0)
@@ -380,6 +601,10 @@
     return m_message.hello;
   }
 
+  /**
+   * Set the message type to TC and return the message content.
+   * \returns The TC message.
+   */
   Tc& GetTc ()
   {
     if (m_messageType == 0)
@@ -393,6 +618,10 @@
     return m_message.tc;
   }
 
+  /**
+   * Set the message type to HNA and return the message content.
+   * \returns The HNA message.
+   */
   Hna& GetHna ()
   {
     if (m_messageType == 0)
@@ -407,24 +636,40 @@
   }
 
 
+  /**
+   * Get the MID message.
+   * \returns The MID message.
+   */
   const Mid& GetMid () const
   {
     NS_ASSERT (m_messageType == MID_MESSAGE);
     return m_message.mid;
   }
 
+  /**
+   * Get the HELLO message.
+   * \returns The HELLO message.
+   */
   const Hello& GetHello () const
   {
     NS_ASSERT (m_messageType == HELLO_MESSAGE);
     return m_message.hello;
   }
 
+  /**
+   * Get the TC message.
+   * \returns The TC message.
+   */
   const Tc& GetTc () const
   {
     NS_ASSERT (m_messageType == TC_MESSAGE);
     return m_message.tc;
   }
 
+  /**
+   * Get the HNA message.
+   * \returns The HNA message.
+   */
   const Hna& GetHna () const
   {
     NS_ASSERT (m_messageType == HNA_MESSAGE);
@@ -456,8 +701,10 @@
        messageIter != messages.end (); messageIter++)
     {
       messageIter->Print (os);
-      if (messageIter+1 != messages.end ())
-        os << ", ";
+      if (messageIter + 1 != messages.end ())
+        {
+          os << ", ";
+        }
     }
   os << "]";
   return os;
diff -Naur ns-3.24.1/src/olsr/model/olsr-repositories.h ns-3.25/src/olsr/model/olsr-repositories.h
--- ns-3.24.1/src/olsr/model/olsr-repositories.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-repositories.h	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2004 Francisco J. Ros 
+ * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
  * This program is free software; you can redistribute it and/or modify
@@ -33,271 +33,282 @@
 #include "ns3/ipv4-address.h"
 #include "ns3/nstime.h"
 
-namespace ns3 { namespace olsr {
-
+namespace ns3 {
+namespace olsr {
 
 
+/// \ingroup olsr
 /// An Interface Association Tuple.
-                struct IfaceAssocTuple
-                {
-                  /// Interface address of a node.
-                  Ipv4Address ifaceAddr;
-                  /// Main address of the node.
-                  Ipv4Address mainAddr;
-                  /// Time at which this tuple expires and must be removed.
-                  Time time;
-                };
-
-                static inline bool
-                operator == (const IfaceAssocTuple &a, const IfaceAssocTuple &b)
-                {
-                  return (a.ifaceAddr == b.ifaceAddr
-                          && a.mainAddr == b.mainAddr);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const IfaceAssocTuple &tuple)
-                {
-                  os << "IfaceAssocTuple(ifaceAddr=" << tuple.ifaceAddr
-                  << ", mainAddr=" << tuple.mainAddr
-                  << ", time=" << tuple.time << ")";
-                  return os;
-                }
+struct IfaceAssocTuple
+{
+  /// Interface address of a node.
+  Ipv4Address ifaceAddr;
+  /// Main address of the node.
+  Ipv4Address mainAddr;
+  /// Time at which this tuple expires and must be removed.
+  Time time;
+};
+
+static inline bool
+operator == (const IfaceAssocTuple &a, const IfaceAssocTuple &b)
+{
+  return (a.ifaceAddr == b.ifaceAddr
+          && a.mainAddr == b.mainAddr);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const IfaceAssocTuple &tuple)
+{
+  os << "IfaceAssocTuple(ifaceAddr=" << tuple.ifaceAddr
+     << ", mainAddr=" << tuple.mainAddr
+     << ", time=" << tuple.time << ")";
+  return os;
+}
 
+/// \ingroup olsr
 /// A Link Tuple.
-                struct LinkTuple
-                {
-                  /// Interface address of the local node.
-                  Ipv4Address localIfaceAddr;
-                  /// Interface address of the neighbor node.
-                  Ipv4Address neighborIfaceAddr;
-                  /// The link is considered bidirectional until this time.
-                  Time symTime;
-                  /// The link is considered unidirectional until this time.
-                  Time asymTime;
-                  /// Time at which this tuple expires and must be removed.
-                  Time time;
-                };
-
-                static inline bool
-                operator == (const LinkTuple &a, const LinkTuple &b)
-                {
-                  return (a.localIfaceAddr == b.localIfaceAddr
-                          && a.neighborIfaceAddr == b.neighborIfaceAddr);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const LinkTuple &tuple)
-                {
-                  os << "LinkTuple(localIfaceAddr=" << tuple.localIfaceAddr
-                  << ", neighborIfaceAddr=" << tuple.neighborIfaceAddr
-                  << ", symTime=" << tuple.symTime
-                  << ", asymTime=" << tuple.asymTime
-                  << ", expTime=" << tuple.time
-                  << ")";
-                  return os;
-                }
+struct LinkTuple
+{
+  /// Interface address of the local node.
+  Ipv4Address localIfaceAddr;
+  /// Interface address of the neighbor node.
+  Ipv4Address neighborIfaceAddr;
+  /// The link is considered bidirectional until this time.
+  Time symTime;
+  /// The link is considered unidirectional until this time.
+  Time asymTime;
+  /// Time at which this tuple expires and must be removed.
+  Time time;
+};
+
+static inline bool
+operator == (const LinkTuple &a, const LinkTuple &b)
+{
+  return (a.localIfaceAddr == b.localIfaceAddr
+          && a.neighborIfaceAddr == b.neighborIfaceAddr);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const LinkTuple &tuple)
+{
+  os << "LinkTuple(localIfaceAddr=" << tuple.localIfaceAddr
+     << ", neighborIfaceAddr=" << tuple.neighborIfaceAddr
+     << ", symTime=" << tuple.symTime
+     << ", asymTime=" << tuple.asymTime
+     << ", expTime=" << tuple.time
+     << ")";
+  return os;
+}
 
+/// \ingroup olsr
 /// A Neighbor Tuple.
-                struct NeighborTuple
-                {
-                  /// Main address of a neighbor node.
-                  Ipv4Address neighborMainAddr;
-                  /// Neighbor Type and Link Type at the four less significative digits.
-                  enum Status {
-                    STATUS_NOT_SYM = 0, // "not symmetric"
-                    STATUS_SYM = 1, // "symmetric"
-                  } status;
-                  /// A value between 0 and 7 specifying the node's willingness to carry traffic on behalf of other nodes.
-                  uint8_t willingness;
-                };
-
-                static inline bool
-                operator == (const NeighborTuple &a, const NeighborTuple &b)
-                {
-                  return (a.neighborMainAddr == b.neighborMainAddr
-                          && a.status == b.status
-                          && a.willingness == b.willingness);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const NeighborTuple &tuple)
-                {
-                  os << "NeighborTuple(neighborMainAddr=" << tuple.neighborMainAddr
-                  << ", status=" << (tuple.status == NeighborTuple::STATUS_SYM ? "SYM" : "NOT_SYM")
-                  << ", willingness=" << (int) tuple.willingness << ")";
-                  return os;
-                }
+struct NeighborTuple
+{
+  /// Main address of a neighbor node.
+  Ipv4Address neighborMainAddr;
+  /// Status of the link (Symmetric or not Symmetric).
+  enum Status
+  {
+    STATUS_NOT_SYM = 0, // "not symmetric"
+    STATUS_SYM = 1, // "symmetric"
+  } status; //!< Status of the link.
+  /// A value between 0 and 7 specifying the node's willingness to carry traffic on behalf of other nodes.
+  uint8_t willingness;
+};
+
+static inline bool
+operator == (const NeighborTuple &a, const NeighborTuple &b)
+{
+  return (a.neighborMainAddr == b.neighborMainAddr
+          && a.status == b.status
+          && a.willingness == b.willingness);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const NeighborTuple &tuple)
+{
+  os << "NeighborTuple(neighborMainAddr=" << tuple.neighborMainAddr
+     << ", status=" << (tuple.status == NeighborTuple::STATUS_SYM ? "SYM" : "NOT_SYM")
+     << ", willingness=" << (int) tuple.willingness << ")";
+  return os;
+}
 
+/// \ingroup olsr
 /// A 2-hop Tuple.
-                struct TwoHopNeighborTuple
-                {
-                  /// Main address of a neighbor.
-                  Ipv4Address neighborMainAddr;
-                  /// Main address of a 2-hop neighbor with a symmetric link to nb_main_addr.
-                  Ipv4Address twoHopNeighborAddr;
-                  /// Time at which this tuple expires and must be removed.
-                  Time expirationTime; // previously called 'time_'
-                };
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const TwoHopNeighborTuple &tuple)
-                {
-                  os << "TwoHopNeighborTuple(neighborMainAddr=" << tuple.neighborMainAddr
-                  << ", twoHopNeighborAddr=" << tuple.twoHopNeighborAddr
-                  << ", expirationTime=" << tuple.expirationTime
-                  << ")";
-                  return os;
-                }
-
-                static inline bool
-                operator == (const TwoHopNeighborTuple &a, const TwoHopNeighborTuple &b)
-                {
-                  return (a.neighborMainAddr == b.neighborMainAddr
-                          && a.twoHopNeighborAddr == b.twoHopNeighborAddr);
-                }
+struct TwoHopNeighborTuple
+{
+  /// Main address of a neighbor.
+  Ipv4Address neighborMainAddr;
+  /// Main address of a 2-hop neighbor with a symmetric link to nb_main_addr.
+  Ipv4Address twoHopNeighborAddr;
+  /// Time at which this tuple expires and must be removed.
+  Time expirationTime; // previously called 'time_'
+};
+
+static inline std::ostream&
+operator << (std::ostream &os, const TwoHopNeighborTuple &tuple)
+{
+  os << "TwoHopNeighborTuple(neighborMainAddr=" << tuple.neighborMainAddr
+     << ", twoHopNeighborAddr=" << tuple.twoHopNeighborAddr
+     << ", expirationTime=" << tuple.expirationTime
+     << ")";
+  return os;
+}
+
+static inline bool
+operator == (const TwoHopNeighborTuple &a, const TwoHopNeighborTuple &b)
+{
+  return (a.neighborMainAddr == b.neighborMainAddr
+          && a.twoHopNeighborAddr == b.twoHopNeighborAddr);
+}
 
+/// \ingroup olsr
 /// An MPR-Selector Tuple.
-                struct MprSelectorTuple
-                {
-                  /// Main address of a node which have selected this node as a MPR.
-                  Ipv4Address mainAddr;
-                  /// Time at which this tuple expires and must be removed.
-                  Time expirationTime; // previously called 'time_'
-                };
-
-                static inline bool
-                operator == (const MprSelectorTuple &a, const MprSelectorTuple &b)
-                {
-                  return (a.mainAddr == b.mainAddr);
-                }
+struct MprSelectorTuple
+{
+  /// Main address of a node which have selected this node as a MPR.
+  Ipv4Address mainAddr;
+  /// Time at which this tuple expires and must be removed.
+  Time expirationTime; // previously called 'time_'
+};
+
+static inline bool
+operator == (const MprSelectorTuple &a, const MprSelectorTuple &b)
+{
+  return (a.mainAddr == b.mainAddr);
+}
 
 
-/// The type "list of interface addresses"
+// The type "list of interface addresses"
 //typedef std::vector<nsaddr_t> addr_list_t;
 
+/// \ingroup olsr
 /// A Duplicate Tuple
-                struct DuplicateTuple
-                {
-                  /// Originator address of the message.
-                  Ipv4Address address;
-                  /// Message sequence number.
-                  uint16_t sequenceNumber;
-                  /// Indicates whether the message has been retransmitted or not.
-                  bool retransmitted;
-                  /// List of interfaces which the message has been received on.
-                  std::vector<Ipv4Address> ifaceList;
-                  /// Time at which this tuple expires and must be removed.
-                  Time expirationTime;
-                };
-
-                static inline bool
-                operator == (const DuplicateTuple &a, const DuplicateTuple &b)
-                {
-                  return (a.address == b.address
-                          && a.sequenceNumber == b.sequenceNumber);
-                }
+struct DuplicateTuple
+{
+  /// Originator address of the message.
+  Ipv4Address address;
+  /// Message sequence number.
+  uint16_t sequenceNumber;
+  /// Indicates whether the message has been retransmitted or not.
+  bool retransmitted;
+  /// List of interfaces which the message has been received on.
+  std::vector<Ipv4Address> ifaceList;
+  /// Time at which this tuple expires and must be removed.
+  Time expirationTime;
+};
+
+static inline bool
+operator == (const DuplicateTuple &a, const DuplicateTuple &b)
+{
+  return (a.address == b.address
+          && a.sequenceNumber == b.sequenceNumber);
+}
 
+/// \ingroup olsr
 /// A Topology Tuple
-                struct TopologyTuple
-                {
-                  /// Main address of the destination.
-                  Ipv4Address destAddr;
-                  /// Main address of a node which is a neighbor of the destination.
-                  Ipv4Address lastAddr;
-                  /// Sequence number.
-                  uint16_t sequenceNumber;
-                  /// Time at which this tuple expires and must be removed.
-                  Time expirationTime;
-                };
-
-                static inline bool
-                operator == (const TopologyTuple &a, const TopologyTuple &b)
-                {
-                  return (a.destAddr == b.destAddr
-                          && a.lastAddr == b.lastAddr
-                          && a.sequenceNumber == b.sequenceNumber);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const TopologyTuple &tuple)
-                {
-                  os << "TopologyTuple(destAddr=" << tuple.destAddr
-                  << ", lastAddr=" << tuple.lastAddr
-                  << ", sequenceNumber=" << (int) tuple.sequenceNumber
-                  << ", expirationTime=" << tuple.expirationTime
-                  << ")";
-                  return os;
-                }
+struct TopologyTuple
+{
+  /// Main address of the destination.
+  Ipv4Address destAddr;
+  /// Main address of a node which is a neighbor of the destination.
+  Ipv4Address lastAddr;
+  /// Sequence number.
+  uint16_t sequenceNumber;
+  /// Time at which this tuple expires and must be removed.
+  Time expirationTime;
+};
+
+static inline bool
+operator == (const TopologyTuple &a, const TopologyTuple &b)
+{
+  return (a.destAddr == b.destAddr
+          && a.lastAddr == b.lastAddr
+          && a.sequenceNumber == b.sequenceNumber);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const TopologyTuple &tuple)
+{
+  os << "TopologyTuple(destAddr=" << tuple.destAddr
+     << ", lastAddr=" << tuple.lastAddr
+     << ", sequenceNumber=" << (int) tuple.sequenceNumber
+     << ", expirationTime=" << tuple.expirationTime
+     << ")";
+  return os;
+}
 
+/// \ingroup olsr
 /// Association
-                struct Association
-                {
-                  Ipv4Address networkAddr;
-                  Ipv4Mask netmask;
-                };
-
-                static inline bool
-                operator == (const Association &a, const Association &b)
-                {
-                  return (a.networkAddr == b.networkAddr
-                          && a.netmask == b.netmask);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const Association &tuple)
-                {
-                  os << "Association(networkAddr=" << tuple.networkAddr
-                  << ", netmask=" << tuple.netmask
-                  << ")";
-                  return os;
-                }
+struct Association
+{
+  Ipv4Address networkAddr; //!< IPv4 Network address.
+  Ipv4Mask netmask;        //!< IPv4 Network mask.
+};
+
+static inline bool
+operator == (const Association &a, const Association &b)
+{
+  return (a.networkAddr == b.networkAddr
+          && a.netmask == b.netmask);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const Association &tuple)
+{
+  os << "Association(networkAddr=" << tuple.networkAddr
+     << ", netmask=" << tuple.netmask
+     << ")";
+  return os;
+}
 
+/// \ingroup olsr
 /// An Association Tuple
-                struct AssociationTuple
-                {
-                  /// Main address of the gateway.
-                  Ipv4Address gatewayAddr;
-                  /// Network Address of network reachable through gatewayAddr
-                  Ipv4Address networkAddr;
-                  /// Netmask of network reachable through gatewayAddr
-                  Ipv4Mask netmask;
-                  /// Time at which this tuple expires and must be removed
-                  Time expirationTime;
-                };
-
-                static inline bool
-                operator == (const AssociationTuple &a, const AssociationTuple &b)
-                {
-                  return (a.gatewayAddr == b.gatewayAddr
-                          && a.networkAddr == b.networkAddr
-                          && a.netmask == b.netmask);
-                }
-
-                static inline std::ostream&
-                operator << (std::ostream &os, const AssociationTuple &tuple)
-                {
-                  os << "AssociationTuple(gatewayAddr=" << tuple.gatewayAddr
-                  << ", networkAddr=" << tuple.networkAddr
-                  << ", netmask=" << tuple.netmask
-                  << ", expirationTime=" << tuple.expirationTime
-                  << ")";
-                  return os;
-                }
-
-
-                typedef std::set<Ipv4Address>                   MprSet; ///< MPR Set type.
-                typedef std::vector<MprSelectorTuple>           MprSelectorSet; ///< MPR Selector Set type.
-                typedef std::vector<LinkTuple>                  LinkSet; ///< Link Set type.
-                typedef std::vector<NeighborTuple>              NeighborSet; ///< Neighbor Set type.
-                typedef std::vector<TwoHopNeighborTuple>        TwoHopNeighborSet; ///< 2-hop Neighbor Set type.
-                typedef std::vector<TopologyTuple>              TopologySet; ///< Topology Set type.
-                typedef std::vector<DuplicateTuple>             DuplicateSet; ///< Duplicate Set type.
-                typedef std::vector<IfaceAssocTuple>            IfaceAssocSet; ///< Interface Association Set type.
-                typedef std::vector<AssociationTuple>           AssociationSet; ///< Association Set type.
-                typedef std::vector<Association>                Associations; ///< Association Set type.
+struct AssociationTuple
+{
+  /// Main address of the gateway.
+  Ipv4Address gatewayAddr;
+  /// Network Address of network reachable through gatewayAddr
+  Ipv4Address networkAddr;
+  /// Netmask of network reachable through gatewayAddr
+  Ipv4Mask netmask;
+  /// Time at which this tuple expires and must be removed
+  Time expirationTime;
+};
+
+static inline bool
+operator == (const AssociationTuple &a, const AssociationTuple &b)
+{
+  return (a.gatewayAddr == b.gatewayAddr
+          && a.networkAddr == b.networkAddr
+          && a.netmask == b.netmask);
+}
+
+static inline std::ostream&
+operator << (std::ostream &os, const AssociationTuple &tuple)
+{
+  os << "AssociationTuple(gatewayAddr=" << tuple.gatewayAddr
+     << ", networkAddr=" << tuple.networkAddr
+     << ", netmask=" << tuple.netmask
+     << ", expirationTime=" << tuple.expirationTime
+     << ")";
+  return os;
+}
+
+
+typedef std::set<Ipv4Address>                   MprSet; //!< MPR Set type.
+typedef std::vector<MprSelectorTuple>           MprSelectorSet; //!< MPR Selector Set type.
+typedef std::vector<LinkTuple>                  LinkSet; //!< Link Set type.
+typedef std::vector<NeighborTuple>              NeighborSet; //!< Neighbor Set type.
+typedef std::vector<TwoHopNeighborTuple>        TwoHopNeighborSet; //!< 2-hop Neighbor Set type.
+typedef std::vector<TopologyTuple>              TopologySet; //!< Topology Set type.
+typedef std::vector<DuplicateTuple>             DuplicateSet; //!< Duplicate Set type.
+typedef std::vector<IfaceAssocTuple>            IfaceAssocSet; //!< Interface Association Set type.
+typedef std::vector<AssociationTuple>           AssociationSet; //!< Association Set type.
+typedef std::vector<Association>                Associations; //!< Association Set type.
 
 
-                }} // namespace ns3, olsr
+}
+}  // namespace ns3, olsr
 
 #endif /* OLSR_REPOSITORIES_H */
diff -Naur ns-3.24.1/src/olsr/model/olsr-routing-protocol.cc ns-3.25/src/olsr/model/olsr-routing-protocol.cc
--- ns-3.24.1/src/olsr/model/olsr-routing-protocol.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-routing-protocol.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2004 Francisco J. Ros 
+ * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
  * This program is free software; you can redistribute it and/or modify
@@ -141,14 +141,14 @@
 namespace ns3 {
 
 NS_LOG_COMPONENT_DEFINE ("OlsrRoutingProtocol");
-  
+
 namespace olsr {
 
 /********** OLSR class **********/
 
 NS_OBJECT_ENSURE_REGISTERED (RoutingProtocol);
 
-TypeId 
+TypeId
 RoutingProtocol::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::olsr::RoutingProtocol")
@@ -195,12 +195,12 @@
 
 RoutingProtocol::RoutingProtocol ()
   : m_routingTableAssociation (0),
-    m_ipv4 (0),
-    m_helloTimer (Timer::CANCEL_ON_DESTROY),
-    m_tcTimer (Timer::CANCEL_ON_DESTROY),
-    m_midTimer (Timer::CANCEL_ON_DESTROY),
-    m_hnaTimer (Timer::CANCEL_ON_DESTROY),
-    m_queuedMessagesTimer (Timer::CANCEL_ON_DESTROY)
+  m_ipv4 (0),
+  m_helloTimer (Timer::CANCEL_ON_DESTROY),
+  m_tcTimer (Timer::CANCEL_ON_DESTROY),
+  m_midTimer (Timer::CANCEL_ON_DESTROY),
+  m_hnaTimer (Timer::CANCEL_ON_DESTROY),
+  m_queuedMessagesTimer (Timer::CANCEL_ON_DESTROY)
 {
   m_uniformRandomVariable = CreateObject<UniformRandomVariable> ();
 
@@ -254,6 +254,12 @@
 RoutingProtocol::PrintRoutingTable (Ptr<OutputStreamWrapper> stream) const
 {
   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)
+      << ", OLSR Routing table" << std::endl;
+
   *os << "Destination\t\tNextHop\t\tInterface\tDistance\n";
 
   for (std::map<Ipv4Address, RoutingTableEntry>::const_iterator iter = m_table.begin ();
@@ -272,9 +278,17 @@
       *os << iter->second.distance << "\t";
       *os << "\n";
     }
+
   // Also print the HNA routing table
-  *os << " HNA Routing Table:\n";
-  m_hnaRoutingTable->PrintRoutingTable (stream);
+  if (m_hnaRoutingTable->GetNRoutes () > 0)
+    {
+      *os << " HNA Routing Table: ";
+      m_hnaRoutingTable->PrintRoutingTable (stream);
+    }
+  else
+    {
+      *os << " HNA Routing Table: empty" << std::endl;
+    }
 }
 
 void RoutingProtocol::DoInitialize ()
@@ -305,7 +319,9 @@
     {
       Ipv4Address addr = m_ipv4->GetAddress (i, 0).GetLocal ();
       if (addr == loopback)
-        continue;
+        {
+          continue;
+        }
 
       if (addr != m_mainAddress)
         {
@@ -319,11 +335,13 @@
           NS_ASSERT (GetMainAddress (addr) == m_mainAddress);
         }
 
-      if(m_interfaceExclusions.find (i) != m_interfaceExclusions.end ())
-        continue;
+      if (m_interfaceExclusions.find (i) != m_interfaceExclusions.end ())
+        {
+          continue;
+        }
 
       // Create a socket to listen only on this interface
-      Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (), 
+      Ptr<Socket> socket = Socket::CreateSocket (GetObject<Node> (),
                                                  UdpSocketFactory::GetTypeId ());
       socket->SetAllowBroadcast (true);
       InetSocketAddress inetAddr (m_ipv4->GetAddress (i, 0).GetLocal (), OLSR_PORT_NUMBER);
@@ -338,7 +356,7 @@
       canRunOlsr = true;
     }
 
-  if(canRunOlsr)
+  if (canRunOlsr)
     {
       HelloTimerExpire ();
       TcTimerExpire ();
@@ -392,7 +410,9 @@
     {
       MessageHeader messageHeader;
       if (packet->RemoveHeader (messageHeader) == 0)
-        NS_ASSERT (false);
+        {
+          NS_ASSERT (false);
+        }
 
       sizeLeft -= messageHeader.GetSerializedSize ();
 
@@ -467,7 +487,7 @@
                             << "s OLSR node " << m_mainAddress
                             <<  " received HNA message of size " << messageHeader.GetSerializedSize ());
               ProcessHna (messageHeader, senderIfaceAddr);
-              break; 
+              break;
 
             default:
               NS_LOG_DEBUG ("OLSR message type " <<
@@ -528,7 +548,9 @@
           const NeighborTuple *nb_tuple =
             m_state.FindNeighborTuple (nb2hop_tuple.neighborMainAddr);
           if (nb_tuple == NULL)
-            degree++;
+            {
+              degree++;
+            }
         }
     }
   return degree;
@@ -536,9 +558,13 @@
 
 namespace {
 ///
-/// \brief Remove all covered 2-hop neighbors from N2 set. This is a helper function used by MprComputation algorithm.
+/// \brief Remove all covered 2-hop neighbors from N2 set.
+/// This is a helper function used by MprComputation algorithm.
 ///
-void 
+/// \param neighborMainAddr Neighbor main address.
+/// \param N2 Reference to the 2-hop neighbor set.
+///
+void
 CoverTwoHopNeighbors (Ipv4Address neighborMainAddr, TwoHopNeighborSet & N2)
 {
   // first gather all 2-hop neighbors to be removed
@@ -565,9 +591,6 @@
 }
 } // anonymous namespace
 
-///
-/// \brief Computates MPR set of a node following \RFC{3626} hints.
-///
 void
 RoutingProtocol::MprComputation ()
 {
@@ -661,7 +684,9 @@
         next++;
         os << iter->neighborMainAddr << "->" << iter->twoHopNeighborAddr;
         if (next != N2.end ())
-          os << ", ";
+          {
+            os << ", ";
+          }
       }
     os << "]";
     NS_LOG_DEBUG ("N2: " << os.str ());
@@ -726,7 +751,7 @@
     {
       if (coveredTwoHopNeighbors.find (twoHopNeigh->twoHopNeighborAddr) != coveredTwoHopNeighbors.end ())
         {
-          // This works correctly only because it is known that twoHopNeigh is reachable by exactly one neighbor, 
+          // This works correctly only because it is known that twoHopNeigh is reachable by exactly one neighbor,
           // so only one record in N2 exists for each of them. This record is erased here.
           NS_LOG_LOGIC ("2-hop neigh. " << twoHopNeigh->twoHopNeighborAddr << " is already covered by an MPR.");
           twoHopNeigh = N2.erase (twoHopNeigh);
@@ -753,7 +778,9 @@
             next++;
             os << iter->neighborMainAddr << "->" << iter->twoHopNeighborAddr;
             if (next != N2.end ())
-              os << ", ";
+              {
+                os << ", ";
+              }
           }
         os << "]";
         NS_LOG_DEBUG ("Step 4 iteration: N2=" << os.str ());
@@ -775,7 +802,9 @@
             {
               TwoHopNeighborTuple const &nb2hop_tuple = *it2;
               if (nb_tuple.neighborMainAddr == nb2hop_tuple.neighborMainAddr)
-                r++;
+                {
+                  r++;
+                }
             }
           rs.insert (r);
           reachability[r].push_back (&nb_tuple);
@@ -845,7 +874,9 @@
         next++;
         os << *iter;
         if (next != mprSet.end ())
-          os << ", ";
+          {
+            os << ", ";
+          }
       }
     os << "]";
     NS_LOG_DEBUG ("Computed MPR set for node " << m_mainAddress << ": " << os.str ());
@@ -855,12 +886,6 @@
   m_state.SetMprSet (mprSet);
 }
 
-///
-/// \brief Gets the main address associated with a given interface address.
-///
-/// \param iface_addr the interface address.
-/// \return the corresponding main address.
-///
 Ipv4Address
 RoutingProtocol::GetMainAddress (Ipv4Address iface_addr) const
 {
@@ -868,14 +893,15 @@
     m_state.FindIfaceAssocTuple (iface_addr);
 
   if (tuple != NULL)
-    return tuple->mainAddr;
+    {
+      return tuple->mainAddr;
+    }
   else
-    return iface_addr;
+    {
+      return iface_addr;
+    }
 }
 
-///
-/// \brief Creates the routing table of the node following \RFC{3626} hints.
-///
 void
 RoutingProtocol::RoutingTableComputation ()
 {
@@ -1077,7 +1103,9 @@
         }
 
       if (!added)
-        break;
+        {
+          break;
+        }
     }
 
   // 4. For each entry in the multiple interface association base
@@ -1158,8 +1186,8 @@
       for (routeIndex = 0; routeIndex < m_hnaRoutingTable->GetNRoutes (); routeIndex++)
         {
           Ipv4RoutingTableEntry route = m_hnaRoutingTable->GetRoute (routeIndex);
-          if (route.GetDestNetwork () == tuple.networkAddr &&
-              route.GetDestNetworkMask () == tuple.netmask)
+          if (route.GetDestNetwork () == tuple.networkAddr
+              && route.GetDestNetworkMask () == tuple.netmask)
             {
               break;
             }
@@ -1169,13 +1197,13 @@
         {
           addRoute = true;
         }
-      else if(gatewayEntryExists && m_hnaRoutingTable->GetMetric (routeIndex) > gatewayEntry.distance)
+      else if (gatewayEntryExists && m_hnaRoutingTable->GetMetric (routeIndex) > gatewayEntry.distance)
         {
           m_hnaRoutingTable->RemoveRoute (routeIndex);
           addRoute = true;
         }
 
-      if(addRoute && gatewayEntryExists)
+      if (addRoute && gatewayEntryExists)
         {
           m_hnaRoutingTable->AddNetworkRouteTo (tuple.networkAddr,
                                                 tuple.netmask,
@@ -1191,16 +1219,6 @@
 }
 
 
-///
-/// \brief Processes a HELLO message following \RFC{3626} specification.
-///
-/// Link sensing and population of the Neighbor Set, 2-hop Neighbor Set and MPR
-/// Selector Set are performed.
-///
-/// \param msg the %OLSR message which contains the HELLO message.
-/// \param receiver_iface the address of the interface where the message was received from.
-/// \param sender_iface the address of the interface where the message was sent from.
-///
 void
 RoutingProtocol::ProcessHello (const olsr::MessageHeader &msg,
                                const Ipv4Address &receiverIface,
@@ -1255,15 +1273,6 @@
   PopulateMprSelectorSet (msg, hello);
 }
 
-///
-/// \brief Processes a TC message following \RFC{3626} specification.
-///
-/// The Topology Set is updated (if needed) with the information of
-/// the received TC message.
-///
-/// \param msg the %OLSR message which contains the TC message.
-/// \param sender_iface the address of the interface where the message was sent from.
-///
 void
 RoutingProtocol::ProcessTc (const olsr::MessageHeader &msg,
                             const Ipv4Address &senderIface)
@@ -1275,7 +1284,9 @@
   // 1-hop neighborhood of this node, the message MUST be discarded.
   const LinkTuple *link_tuple = m_state.FindSymLinkTuple (senderIface, now);
   if (link_tuple == NULL)
-    return;
+    {
+      return;
+    }
 
   // 2. If there exist some tuple in the topology set where:
   //    T_last_addr == originator address AND
@@ -1285,7 +1296,9 @@
   const TopologyTuple *topologyTuple =
     m_state.FindNewerTopologyTuple (msg.GetOriginatorAddress (), tc.ansn);
   if (topologyTuple != NULL)
-    return;
+    {
+      return;
+    }
 
   // 3. All tuples in the topology set where:
   //    T_last_addr == originator address AND
@@ -1319,7 +1332,7 @@
           //      T_last_addr = originator address,
           //      T_seq       = ANSN,
           //      T_time      = current time + validity time.
-          TopologyTuple topologyTuple;;
+          TopologyTuple topologyTuple;
           topologyTuple.destAddr = addr;
           topologyTuple.lastAddr = msg.GetOriginatorAddress ();
           topologyTuple.sequenceNumber = tc.ansn;
@@ -1350,15 +1363,6 @@
 #endif // NS3_LOG_ENABLE
 }
 
-///
-/// \brief Processes a MID message following \RFC{3626} specification.
-///
-/// The Interface Association Set is updated (if needed) with the information
-/// of the received MID message.
-///
-/// \param msg the %OLSR message which contains the MID message.
-/// \param sender_iface the address of the interface where the message was sent from.
-///
 void
 RoutingProtocol::ProcessMid (const olsr::MessageHeader &msg,
                              const Ipv4Address &senderIface)
@@ -1429,15 +1433,6 @@
   NS_LOG_DEBUG ("Node " << m_mainAddress << " ProcessMid from " << senderIface << " -> END.");
 }
 
-///
-/// \brief Processes a HNA message following \RFC{3626} specification.
-///
-/// The Host Network Association Set is updated (if needed) with the information
-/// of the received HNA message.
-///
-/// \param msg the %OLSR message which contains the HNA message.
-/// \param sender_iface the address of the interface where the message was sent from.
-///
 void
 RoutingProtocol::ProcessHna (const olsr::MessageHeader &msg,
                              const Ipv4Address &senderIface)
@@ -1450,7 +1445,9 @@
   // 1-hop neighborhood of this node, the message MUST be discarded.
   const LinkTuple *link_tuple = m_state.FindSymLinkTuple (senderIface, now);
   if (link_tuple == NULL)
-    return;
+    {
+      return;
+    }
 
   // 2. Otherwise, for each (network address, netmask) pair in the
   // message:
@@ -1466,7 +1463,7 @@
       //          A_netmask      == netmask
       //      then the holding time for that tuple MUST be set to:
       //          A_time         =  current time + validity time
-      if(tuple != NULL)
+      if (tuple != NULL)
         {
           tuple->expirationTime = now + msg.GetVTime ();
         }
@@ -1495,17 +1492,6 @@
     }
 }
 
-///
-/// \brief OLSR's default forwarding algorithm.
-///
-/// See \RFC{3626} for details.
-///
-/// \param p the %OLSR packet which has been received.
-/// \param msg the %OLSR message which must be forwarded.
-/// \param dup_tuple NULL if the message has never been considered for forwarding,
-/// or a duplicate tuple in other case.
-/// \param local_iface the address of the interface where the message was received from.
-///
 void
 RoutingProtocol::ForwardDefault (olsr::MessageHeader olsrMessage,
                                  DuplicateTuple *duplicated,
@@ -1518,7 +1504,9 @@
   // 1-hop neighborhood the message must not be forwarded
   const LinkTuple *linkTuple = m_state.FindSymLinkTuple (senderAddress, now);
   if (linkTuple == NULL)
-    return;
+    {
+      return;
+    }
 
   // If the message has already been considered for forwarding,
   // it must not be retransmitted again
@@ -1572,15 +1560,6 @@
     }
 }
 
-///
-/// \brief Enques an %OLSR message which will be sent with a delay of (0, delay].
-///
-/// This buffering system is used in order to piggyback several %OLSR messages in
-/// a same %OLSR packet.
-///
-/// \param msg the %OLSR message which must be sent.
-/// \param delay maximum delay the %OLSR message is going to be buffered.
-///
 void
 RoutingProtocol::QueueMessage (const olsr::MessageHeader &message, Time delay)
 {
@@ -1593,7 +1572,7 @@
 }
 
 void
-RoutingProtocol::SendPacket (Ptr<Packet> packet, 
+RoutingProtocol::SendPacket (Ptr<Packet> packet,
                              const MessageList &containedMessages)
 {
   NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " sending a OLSR packet");
@@ -1616,13 +1595,6 @@
     }
 }
 
-///
-/// \brief Creates as many %OLSR packets as needed in order to send all buffered
-/// %OLSR messages.
-///
-/// Maximum number of messages which can be contained in an %OLSR packet is
-/// dictated by OLSR_MAX_MSGS constant.
-///
 void
 RoutingProtocol::SendQueuedMessages ()
 {
@@ -1659,9 +1631,6 @@
   m_queuedMessages.clear ();
 }
 
-///
-/// \brief Creates a new %OLSR HELLO message which is buffered for being sent later on.
-///
 void
 RoutingProtocol::SendHello ()
 {
@@ -1770,9 +1739,6 @@
   QueueMessage (msg, JITTER);
 }
 
-///
-/// \brief Creates a new %OLSR TC message which is buffered for being sent later on.
-///
 void
 RoutingProtocol::SendTc ()
 {
@@ -1797,9 +1763,6 @@
   QueueMessage (msg, JITTER);
 }
 
-///
-/// \brief Creates a new %OLSR MID message which is buffered for being sent later on.
-///
 void
 RoutingProtocol::SendMid ()
 {
@@ -1827,10 +1790,14 @@
     {
       Ipv4Address addr = m_ipv4->GetAddress (i, 0).GetLocal ();
       if (addr != m_mainAddress && addr != loopback && m_interfaceExclusions.find (i) == m_interfaceExclusions.end ())
-        mid.interfaceAddresses.push_back (addr);
+        {
+          mid.interfaceAddresses.push_back (addr);
+        }
     }
   if (mid.interfaceAddresses.size () == 0)
-    return;
+    {
+      return;
+    }
 
   msg.SetVTime (OLSR_MID_HOLD_TIME);
   msg.SetOriginatorAddress (m_mainAddress);
@@ -1841,9 +1808,6 @@
   QueueMessage (msg, JITTER);
 }
 
-///
-/// \brief Creates a new %OLSR HNA message which is buffered for being sent later on.
-///
 void
 RoutingProtocol::SendHna ()
 {
@@ -1877,11 +1841,6 @@
   QueueMessage (msg, JITTER);
 }
 
-///
-/// \brief Injects the specified (networkAddr, netmask) tuple in the list of
-///        local HNA associations to be sent by the node via HNA messages.
-///        If this tuple already exists, nothing is done.
-///
 void
 RoutingProtocol::AddHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask)
 {
@@ -1903,11 +1862,6 @@
   m_state.InsertAssociation ( (Association) { networkAddr, netmask} );
 }
 
-///
-/// \brief Removes the specified (networkAddr, netmask) tuple from the list of
-///        local HNA associations to be sent by the node via HNA messages.
-///        If this tuple does not exist, nothing is done (see "OlsrState::EraseAssociation()").
-///
 void
 RoutingProtocol::RemoveHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask)
 {
@@ -1915,16 +1869,6 @@
   m_state.EraseAssociation ( (Association) { networkAddr, netmask} );
 }
 
-///
-/// \brief Associates the specified Ipv4StaticRouting routing table
-///        to the OLSR routing protocol. Entries from this associated
-///        routing table that use non-olsr outgoing interfaces are added
-///        to the list of local HNA associations so that they are included
-///        in HNA messages sent by the node.
-///        If this method is called more than once, entries from the old
-///        association are deleted before entries from the new one are added.
-/// \param routingTable the Ipv4StaticRouting routing table to be associated.
-///
 void
 RoutingProtocol::SetRoutingTableAssociation (Ptr<Ipv4StaticRouting> routingTable)
 {
@@ -1970,11 +1914,6 @@
                 "the associated routing table: " << m_state.GetAssociations ().size ());
 }
 
-///
-/// \brief Tests whether or not the specified route uses a non-OLSR outgoing interface.
-///        Returns true if the outgoing interface of the specified route is a non-OLSR interface.
-///        Returns false otherwise.
-///
 bool
 RoutingProtocol::UsesNonOlsrOutgoingInterface (const Ipv4RoutingTableEntry &route)
 {
@@ -1984,9 +1923,6 @@
   return ci != m_interfaceExclusions.end ();
 }
 
-///
-/// \brief Updates Link Set according to a new received HELLO message
-/// (following \RFC{3626} specification). Neighbor Set is also updated if needed.
 void
 RoutingProtocol::LinkSensing (const olsr::MessageHeader &msg,
                               const olsr::MessageHeader::Hello &hello,
@@ -2033,10 +1969,18 @@
       const char *linkTypeName;
       switch (lt)
         {
-        case OLSR_UNSPEC_LINK: linkTypeName = "UNSPEC_LINK"; break;
-        case OLSR_ASYM_LINK: linkTypeName = "ASYM_LINK"; break;
-        case OLSR_SYM_LINK: linkTypeName = "SYM_LINK"; break;
-        case OLSR_LOST_LINK: linkTypeName = "LOST_LINK"; break;
+        case OLSR_UNSPEC_LINK:
+          linkTypeName = "UNSPEC_LINK";
+          break;
+        case OLSR_ASYM_LINK:
+          linkTypeName = "ASYM_LINK";
+          break;
+        case OLSR_SYM_LINK:
+          linkTypeName = "SYM_LINK";
+          break;
+        case OLSR_LOST_LINK:
+          linkTypeName = "LOST_LINK";
+          break;
           /*  no default, since lt must be in 0..3, covered above
         default: linkTypeName = "(invalid value!)";
           */
@@ -2045,10 +1989,17 @@
       const char *neighborTypeName;
       switch (nt)
         {
-        case OLSR_NOT_NEIGH: neighborTypeName = "NOT_NEIGH"; break;
-        case OLSR_SYM_NEIGH: neighborTypeName = "SYM_NEIGH"; break;
-        case OLSR_MPR_NEIGH: neighborTypeName = "MPR_NEIGH"; break;
-        default: neighborTypeName = "(invalid value!)";
+        case OLSR_NOT_NEIGH:
+          neighborTypeName = "NOT_NEIGH";
+          break;
+        case OLSR_SYM_NEIGH:
+          neighborTypeName = "SYM_NEIGH";
+          break;
+        case OLSR_MPR_NEIGH:
+          neighborTypeName = "MPR_NEIGH";
+          break;
+        default:
+          neighborTypeName = "(invalid value!)";
         }
 
       NS_LOG_DEBUG ("Looking at HELLO link messages with Link Type "
@@ -2058,9 +2009,9 @@
 #endif // NS3_LOG_ENABLE
 
       // We must not process invalid advertised links
-      if ((lt == OLSR_SYM_LINK && nt == OLSR_NOT_NEIGH) ||
-          (nt != OLSR_SYM_NEIGH && nt != OLSR_MPR_NEIGH
-           && nt != OLSR_NOT_NEIGH))
+      if ((lt == OLSR_SYM_LINK && nt == OLSR_NOT_NEIGH)
+          || (nt != OLSR_SYM_NEIGH && nt != OLSR_MPR_NEIGH
+              && nt != OLSR_NOT_NEIGH))
         {
           NS_LOG_LOGIC ("HELLO link code is invalid => IGNORING");
           continue;
@@ -2121,9 +2072,6 @@
                     << ": LinkSensing END");
 }
 
-///
-/// \brief Updates the Neighbor Set according to the information contained in
-/// a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateNeighborSet (const olsr::MessageHeader &msg,
                                       const olsr::MessageHeader::Hello &hello)
@@ -2135,10 +2083,6 @@
     }
 }
 
-
-///
-/// \brief Updates the 2-hop Neighbor Set according to the information contained
-/// in a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateTwoHopNeighborSet (const olsr::MessageHeader &msg,
                                             const olsr::MessageHeader::Hello &hello)
@@ -2246,11 +2190,6 @@
   NS_LOG_DEBUG ("Olsr node " << m_mainAddress << ": PopulateTwoHopNeighborSet END");
 }
 
-
-
-///
-/// \brief Updates the MPR Selector Set according to the information contained in
-/// a new received HELLO message (following \RFC{3626}).
 void
 RoutingProtocol::PopulateMprSelectorSet (const olsr::MessageHeader &msg,
                                          const olsr::MessageHeader::Hello &hello)
@@ -2310,13 +2249,14 @@
 #if 0
 ///
 /// \brief Drops a given packet because it couldn't be delivered to the corresponding
-/// destination by the MAC layer. This may cause a neighbor loss, and appropiate
+/// destination by the MAC layer. This may cause a neighbor loss, and appropriate
 /// actions are then taken.
 ///
 /// \param p the packet which couldn't be delivered by the MAC layer.
 ///
 void
-OLSR::mac_failed (Ptr<Packet> p) {
+OLSR::mac_failed (Ptr<Packet> p)
+{
   double now              = Simulator::Now ();
   struct hdr_ip* ih       = HDR_IP (p);
   struct hdr_cmn* ch      = HDR_CMN (p);
@@ -2326,13 +2266,15 @@
          OLSR::node_id (ra_addr ()),
          OLSR::node_id (ch->next_hop ()));
 
-  if ((u_int32_t)ih->daddr () == IP_BROADCAST) {
+  if ((u_int32_t)ih->daddr () == IP_BROADCAST)
+    {
       drop (p, DROP_RTR_MAC_CALLBACK);
       return;
     }
 
   OLSR_link_tuple* link_tuple = state_.find_link_tuple (ch->next_hop ());
-  if (link_tuple != NULL) {
+  if (link_tuple != NULL)
+    {
       link_tuple->lost_time () = now + OLSR_NEIGHB_HOLD_TIME;
       link_tuple->time ()      = now + OLSR_NEIGHB_HOLD_TIME;
       nb_loss (link_tuple);
@@ -2344,13 +2286,6 @@
 
 
 
-///
-/// \brief Performs all actions needed when a neighbor loss occurs.
-///
-/// Neighbor Set, 2-hop Neighbor Set, MPR Set and MPR Selector Set are updated.
-///
-/// \param tuple link tuple with the information of the link to the neighbor which has been lost.
-///
 void
 RoutingProtocol::NeighborLoss (const LinkTuple &tuple)
 {
@@ -2365,11 +2300,6 @@
   RoutingTableComputation ();
 }
 
-///
-/// \brief Adds a duplicate tuple to the Duplicate Set.
-///
-/// \param tuple the duplicate tuple to be added.
-///
 void
 RoutingProtocol::AddDuplicateTuple (const DuplicateTuple &tuple)
 {
@@ -2381,11 +2311,6 @@
   m_state.InsertDuplicateTuple (tuple);
 }
 
-///
-/// \brief Removes a duplicate tuple from the Duplicate Set.
-///
-/// \param tuple the duplicate tuple to be removed.
-///
 void
 RoutingProtocol::RemoveDuplicateTuple (const DuplicateTuple &tuple)
 {
@@ -2417,11 +2342,6 @@
   AddNeighborTuple (nb_tuple);
 }
 
-///
-/// \brief Removes a link tuple from the Link Set.
-///
-/// \param tuple the link tuple to be removed.
-///
 void
 RoutingProtocol::RemoveLinkTuple (const LinkTuple &tuple)
 {
@@ -2433,12 +2353,6 @@
   m_state.EraseLinkTuple (tuple);
 }
 
-///
-/// \brief This function is invoked when a link tuple is updated. Its aim is to
-/// also update the corresponding neighbor tuple if it is needed.
-///
-/// \param tuple the link tuple which has been updated.
-///
 void
 RoutingProtocol::LinkTupleUpdated (const LinkTuple &tuple, uint8_t willingness)
 {
@@ -2495,11 +2409,6 @@
     }
 }
 
-///
-/// \brief Adds a neighbor tuple to the Neighbor Set.
-///
-/// \param tuple the neighbor tuple to be added.
-///
 void
 RoutingProtocol::AddNeighborTuple (const NeighborTuple &tuple)
 {
@@ -2513,11 +2422,6 @@
   IncrementAnsn ();
 }
 
-///
-/// \brief Removes a neighbor tuple from the Neighbor Set.
-///
-/// \param tuple the neighbor tuple to be removed.
-///
 void
 RoutingProtocol::RemoveNeighborTuple (const NeighborTuple &tuple)
 {
@@ -2531,11 +2435,6 @@
   IncrementAnsn ();
 }
 
-///
-/// \brief Adds a 2-hop neighbor tuple to the 2-hop Neighbor Set.
-///
-/// \param tuple the 2-hop neighbor tuple to be added.
-///
 void
 RoutingProtocol::AddTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple)
 {
@@ -2548,11 +2447,6 @@
   m_state.InsertTwoHopNeighborTuple (tuple);
 }
 
-///
-/// \brief Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set.
-///
-/// \param tuple the 2-hop neighbor tuple to be removed.
-///
 void
 RoutingProtocol::RemoveTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple)
 {
@@ -2571,13 +2465,6 @@
   m_ansn = (m_ansn + 1) % (OLSR_MAX_SEQ_NUM + 1);
 }
 
-///
-/// \brief Adds an MPR selector tuple to the MPR Selector Set.
-///
-/// Advertised Neighbor Sequence Number (ANSN) is also updated.
-///
-/// \param tuple the MPR selector tuple to be added.
-///
 void
 RoutingProtocol::AddMprSelectorTuple (const MprSelectorTuple  &tuple)
 {
@@ -2590,13 +2477,6 @@
   IncrementAnsn ();
 }
 
-///
-/// \brief Removes an MPR selector tuple from the MPR Selector Set.
-///
-/// Advertised Neighbor Sequence Number (ANSN) is also updated.
-///
-/// \param tuple the MPR selector tuple to be removed.
-///
 void
 RoutingProtocol::RemoveMprSelectorTuple (const MprSelectorTuple &tuple)
 {
@@ -2609,11 +2489,6 @@
   IncrementAnsn ();
 }
 
-///
-/// \brief Adds a topology tuple to the Topology Set.
-///
-/// \param tuple the topology tuple to be added.
-///
 void
 RoutingProtocol::AddTopologyTuple (const TopologyTuple &tuple)
 {
@@ -2627,11 +2502,6 @@
   m_state.InsertTopologyTuple (tuple);
 }
 
-///
-/// \brief Removes a topology tuple from the Topology Set.
-///
-/// \param tuple the topology tuple to be removed.
-///
 void
 RoutingProtocol::RemoveTopologyTuple (const TopologyTuple &tuple)
 {
@@ -2645,11 +2515,6 @@
   m_state.EraseTopologyTuple (tuple);
 }
 
-///
-/// \brief Adds an interface association tuple to the Interface Association Set.
-///
-/// \param tuple the interface association tuple to be added.
-///
 void
 RoutingProtocol::AddIfaceAssocTuple (const IfaceAssocTuple &tuple)
 {
@@ -2662,11 +2527,6 @@
   m_state.InsertIfaceAssocTuple (tuple);
 }
 
-///
-/// \brief Removes an interface association tuple from the Interface Association Set.
-///
-/// \param tuple the interface association tuple to be removed.
-///
 void
 RoutingProtocol::RemoveIfaceAssocTuple (const IfaceAssocTuple &tuple)
 {
@@ -2679,48 +2539,30 @@
   m_state.EraseIfaceAssocTuple (tuple);
 }
 
-///
-/// \brief Adds a host network association tuple to the Association Set.
-///
-/// \param tuple the host network association tuple to be added.
-///
 void
 RoutingProtocol::AddAssociationTuple (const AssociationTuple &tuple)
 {
   m_state.InsertAssociationTuple (tuple);
 }
 
-///
-/// \brief Removes a host network association tuple from the Association Set.
-///
-/// \param tuple the host network association tuple to be removed.
-///
 void
 RoutingProtocol::RemoveAssociationTuple (const AssociationTuple &tuple)
 {
   m_state.EraseAssociationTuple (tuple);
 }
 
-
-
 uint16_t RoutingProtocol::GetPacketSequenceNumber ()
 {
   m_packetSequenceNumber = (m_packetSequenceNumber + 1) % (OLSR_MAX_SEQ_NUM + 1);
   return m_packetSequenceNumber;
 }
 
-/// Increments message sequence number and returns the new value.
 uint16_t RoutingProtocol::GetMessageSequenceNumber ()
 {
   m_messageSequenceNumber = (m_messageSequenceNumber + 1) % (OLSR_MAX_SEQ_NUM + 1);
   return m_messageSequenceNumber;
 }
 
-
-///
-/// \brief Sends a HELLO message and reschedules the HELLO timer.
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::HelloTimerExpire ()
 {
@@ -2728,10 +2570,6 @@
   m_helloTimer.Schedule (m_helloInterval);
 }
 
-///
-/// \brief Sends a TC message (if there exists any MPR selector) and reschedules the TC timer.
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::TcTimerExpire ()
 {
@@ -2746,10 +2584,6 @@
   m_tcTimer.Schedule (m_tcInterval);
 }
 
-///
-/// \brief Sends a MID message (if the node has more than one interface) and resets the MID timer.
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::MidTimerExpire ()
 {
@@ -2757,9 +2591,6 @@
   m_midTimer.Schedule (m_midInterval);
 }
 
-///
-/// \brief Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer.
-///
 void
 RoutingProtocol::HnaTimerExpire ()
 {
@@ -2774,13 +2605,6 @@
   m_hnaTimer.Schedule (m_hnaInterval);
 }
 
-///
-/// \brief Removes tuple if expired. Else timer is rescheduled to expire at tuple.expirationTime.
-///
-/// The task of actually removing the tuple is left to the OLSR agent.
-///
-/// \param tuple The tuple which has expired.
-///
 void
 RoutingProtocol::DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber)
 {
@@ -2802,17 +2626,6 @@
     }
 }
 
-///
-/// \brief Removes tuple_ if expired. Else if symmetric time
-/// has expired then it is assumed a neighbor loss and agent_->nb_loss()
-/// is called. In this case the timer is rescheduled to expire at
-/// tuple_->time(). Otherwise the timer is rescheduled to expire at
-/// the minimum between tuple_->time() and tuple_->sym_time().
-///
-/// The task of actually removing the tuple is left to the OLSR agent.
-///
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr)
 {
@@ -2831,9 +2644,13 @@
   else if (tuple->symTime < now)
     {
       if (m_linkTupleTimerFirstTime)
-        m_linkTupleTimerFirstTime = false;
+        {
+          m_linkTupleTimerFirstTime = false;
+        }
       else
-        NeighborLoss (*tuple);
+        {
+          NeighborLoss (*tuple);
+        }
 
       m_events.Track (Simulator::Schedule (DELAY (tuple->time),
                                            &RoutingProtocol::LinkTupleTimerExpire, this,
@@ -2847,13 +2664,6 @@
     }
 }
 
-///
-/// \brief Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
-///
-/// The task of actually removing the tuple is left to the OLSR agent.
-///
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr)
 {
@@ -2875,13 +2685,6 @@
     }
 }
 
-///
-/// \brief Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
-///
-/// The task of actually removing the tuple is left to the OLSR agent.
-///
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::MprSelTupleTimerExpire (Ipv4Address mainAddr)
 {
@@ -2902,13 +2705,6 @@
     }
 }
 
-///
-/// \brief Removes tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
-///
-/// The task of actually removing the tuple is left to the OLSR agent.
-///
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr)
 {
@@ -2929,10 +2725,6 @@
     }
 }
 
-///
-/// \brief Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time().
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr)
 {
@@ -2953,9 +2745,6 @@
     }
 }
 
-/// \brief Removes tuple_ if expired. Else timer is rescheduled to expire at tuple_->time().
-/// \param e The event which has expired.
-///
 void
 RoutingProtocol::AssociationTupleTimerExpire (Ipv4Address gatewayAddr, Ipv4Address networkAddr, Ipv4Mask netmask)
 {
@@ -2976,9 +2765,6 @@
     }
 }
 
-///
-/// \brief Clears the routing table and frees the memory assigned to each one of its entries.
-///
 void
 RoutingProtocol::Clear ()
 {
@@ -2986,22 +2772,12 @@
   m_table.clear ();
 }
 
-///
-/// \brief Deletes the entry whose destination address is given.
-/// \param dest address of the destination node.
-///
 void
 RoutingProtocol::RemoveEntry (Ipv4Address const &dest)
 {
   m_table.erase (dest);
 }
 
-///
-/// \brief Looks up an entry for the specified destination address.
-/// \param dest destination address.
-/// \param outEntry output parameter to hold the routing entry result, if fuond
-/// \return true if found, false if not found
-///
 bool
 RoutingProtocol::Lookup (Ipv4Address const &dest,
                          RoutingTableEntry &outEntry) const
@@ -3011,27 +2787,13 @@
     m_table.find (dest);
   // If there is no route to "dest", return NULL
   if (it == m_table.end ())
-    return false;
+    {
+      return false;
+    }
   outEntry = it->second;
   return true;
 }
 
-///
-/// \brief Finds the appropiate entry which must be used in order to forward
-/// a data packet to a next hop (given a destination).
-///
-/// Imagine a routing table like this: [A,B] [B,C] [C,C]; being each pair of the
-/// form [dest addr,next-hop addr]. In this case, if this function is invoked with
-/// [A,B] then pair [C,C] is returned because C is the next hop that must be used
-/// to forward a data packet destined to A. That is, C is a neighbor of this node,
-/// but B isn't. This function finds the appropiate neighbor for forwarding a packet.
-///
-/// \param entry the routing table entry which indicates the destination node
-/// we are interested in.
-/// \return the appropiate routing table entry which indicates the next
-/// hop which must be used for forwarding a data packet, or NULL
-/// if there is no such entry.
-///
 bool
 RoutingProtocol::FindSendEntry (RoutingTableEntry const &entry,
                                 RoutingTableEntry &outEntry) const
@@ -3040,7 +2802,9 @@
   while (outEntry.destAddr != outEntry.nextAddr)
     {
       if (not Lookup (outEntry.nextAddr, outEntry))
-        return false;
+        {
+          return false;
+        }
     }
   return true;
 }
@@ -3064,9 +2828,9 @@
       if (oif && m_ipv4->GetInterfaceForDevice (oif) != static_cast<int> (interfaceIdx))
         {
           // We do not attempt to perform a constrained routing search
-          // if the caller specifies the oif; we just enforce that 
-          // that the found route matches the requested outbound interface 
-          NS_LOG_DEBUG ("Olsr node " << m_mainAddress 
+          // if the caller specifies the oif; we just enforce that
+          // that the found route matches the requested outbound interface
+          NS_LOG_DEBUG ("Olsr node " << m_mainAddress
                                      << ": RouteOutput for dest=" << header.GetDestination ()
                                      << " Route interface " << interfaceIdx
                                      << " does not match requested output interface "
@@ -3077,15 +2841,18 @@
       rtentry = Create<Ipv4Route> ();
       rtentry->SetDestination (header.GetDestination ());
       // the source address is the interface address that matches
-      // the destination address (when multiple are present on the 
+      // the destination address (when multiple are present on the
       // outgoing interface, one is selected via scoping rules)
       NS_ASSERT (m_ipv4);
       uint32_t numOifAddresses = m_ipv4->GetNAddresses (interfaceIdx);
       NS_ASSERT (numOifAddresses > 0);
       Ipv4InterfaceAddress ifAddr;
-      if (numOifAddresses == 1) {
+      if (numOifAddresses == 1)
+        {
           ifAddr = m_ipv4->GetAddress (interfaceIdx, 0);
-        } else {
+        }
+      else
+        {
           /// \todo Implment IP aliasing and OLSR
           NS_FATAL_ERROR ("XXX Not implemented yet:  IP aliasing and OLSR");
         }
@@ -3093,7 +2860,7 @@
       rtentry->SetGateway (entry2.nextAddr);
       rtentry->SetOutputDevice (m_ipv4->GetNetDevice (interfaceIdx));
       sockerr = Socket::ERROR_NOTERROR;
-      NS_LOG_DEBUG ("Olsr node " << m_mainAddress 
+      NS_LOG_DEBUG ("Olsr node " << m_mainAddress
                                  << ": RouteOutput for dest=" << header.GetDestination ()
                                  << " --> nextHop=" << entry2.nextAddr
                                  << " interface=" << entry2.interface);
@@ -3101,7 +2868,7 @@
       found = true;
     }
   else
-    { 
+    {
       rtentry = m_hnaRoutingTable->RouteOutput (p, header, oif, sockerr);
 
       if (rtentry)
@@ -3113,7 +2880,7 @@
 
   if (!found)
     {
-      NS_LOG_DEBUG ("Olsr node " << m_mainAddress 
+      NS_LOG_DEBUG ("Olsr node " << m_mainAddress
                                  << ": RouteOutput for dest=" << header.GetDestination ()
                                  << " No route to host");
       sockerr = Socket::ERROR_NOROUTETOHOST;
@@ -3121,7 +2888,7 @@
   return rtentry;
 }
 
-bool RoutingProtocol::RouteInput  (Ptr<const Packet> p, 
+bool RoutingProtocol::RouteInput  (Ptr<const Packet> p,
                                    const Ipv4Header &header, Ptr<const NetDevice> idev,
                                    UnicastForwardCallback ucb, MulticastForwardCallback mcb,
                                    LocalDeliverCallback lcb, ErrorCallback ecb)
@@ -3134,7 +2901,7 @@
   // Consume self-originated packets
   if (IsMyOwnAddress (origin) == true)
     {
-      return true; 
+      return true;
     }
 
   // Local delivery
@@ -3151,7 +2918,7 @@
       else
         {
           // The local delivery callback is null.  This may be a multicast
-          // or broadcast packet, so return false so that another 
+          // 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
@@ -3161,12 +2928,14 @@
 
   // Forwarding
   Ptr<Ipv4Route> rtentry;
-  RoutingTableEntry entry1, entry2; 
+  RoutingTableEntry entry1, entry2;
   if (Lookup (header.GetDestination (), entry1))
-    { 
+    {
       bool foundSendEntry = FindSendEntry (entry1, entry2);
       if (!foundSendEntry)
-        NS_FATAL_ERROR ("FindSendEntry failure");
+        {
+          NS_FATAL_ERROR ("FindSendEntry failure");
+        }
       rtentry = Create<Ipv4Route> ();
       rtentry->SetDestination (header.GetDestination ());
       uint32_t interfaceIdx = entry2.interface;
@@ -3177,9 +2946,12 @@
       uint32_t numOifAddresses = m_ipv4->GetNAddresses (interfaceIdx);
       NS_ASSERT (numOifAddresses > 0);
       Ipv4InterfaceAddress ifAddr;
-      if (numOifAddresses == 1) {
+      if (numOifAddresses == 1)
+        {
           ifAddr = m_ipv4->GetAddress (interfaceIdx, 0);
-        } else {
+        }
+      else
+        {
           /// \todo Implment IP aliasing and OLSR
           NS_FATAL_ERROR ("XXX Not implemented yet:  IP aliasing and OLSR");
         }
@@ -3197,7 +2969,7 @@
     }
   else
     {
-      if(m_hnaRoutingTable->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
+      if (m_hnaRoutingTable->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
         {
           return true;
         }
@@ -3205,7 +2977,7 @@
         {
 
 #ifdef NS3_LOG_ENABLE
-          NS_LOG_DEBUG ("Olsr node " << m_mainAddress 
+          NS_LOG_DEBUG ("Olsr node " << m_mainAddress
                                      << ": RouteInput for dest=" << header.GetDestination ()
                                      << " --> NOT FOUND; ** Dumping routing table...");
 
@@ -3223,30 +2995,24 @@
         }
     }
 }
-void 
+void
 RoutingProtocol::NotifyInterfaceUp (uint32_t i)
-{}
-void 
+{
+}
+void
 RoutingProtocol::NotifyInterfaceDown (uint32_t i)
-{}
-void 
+{
+}
+void
 RoutingProtocol::NotifyAddAddress (uint32_t interface, Ipv4InterfaceAddress address)
-{}
-void 
+{
+}
+void
 RoutingProtocol::NotifyRemoveAddress (uint32_t interface, Ipv4InterfaceAddress address)
-{}
+{
+}
 
 
-///
-/// \brief Adds a new entry into the routing table.
-///
-/// If an entry for the given destination existed, it is deleted and freed.
-///
-/// \param dest address of the destination node.
-/// \param next address of the next hop node.
-/// \param iface address of the local interface.
-/// \param dist distance to the destination node.
-///
 void
 RoutingProtocol::AddEntry (Ipv4Address const &dest,
                            Ipv4Address const &next,
@@ -3346,7 +3112,7 @@
        iter != m_state.GetTwoHopNeighbors ().end (); iter++)
     {
       if (now < iter->expirationTime)
-        { 
+        {
           NS_LOG_DEBUG ("  " << *iter);
         }
     }
diff -Naur ns-3.24.1/src/olsr/model/olsr-routing-protocol.h ns-3.25/src/olsr/model/olsr-routing-protocol.h
--- ns-3.24.1/src/olsr/model/olsr-routing-protocol.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-routing-protocol.h	2016-03-23 21:36:53.000000000 -0700
@@ -51,20 +51,23 @@
 
 ///
 /// \defgroup olsr OLSR Routing
-/// This section documents the API of the ns-3 OLSR module. For a generic 
+/// This section documents the API of the ns-3 OLSR module. For a generic
 /// functional description, please refer to the ns-3 manual.
 
+/// \ingroup olsr
 /// An %OLSR's routing table entry.
 struct RoutingTableEntry
 {
-  Ipv4Address destAddr; ///< Address of the destination node.
-  Ipv4Address nextAddr; ///< Address of the next hop.
-  uint32_t interface; ///< Interface index
-  uint32_t distance; ///< Distance in hops to the destination.
+  Ipv4Address destAddr; //!< Address of the destination node.
+  Ipv4Address nextAddr; //!< Address of the next hop.
+  uint32_t interface; //!< Interface index
+  uint32_t distance; //!< Distance in hops to the destination.
 
   RoutingTableEntry () : // default values
-                         destAddr (), nextAddr (),
-                         interface (0), distance (0) {};
+    destAddr (), nextAddr (),
+    interface (0), distance (0)
+  {
+  }
 };
 
 class RoutingProtocol;
@@ -78,38 +81,43 @@
 {
 public:
   friend class ::OlsrMprTestCase;
+
+  /**
+   * \brief Get the type ID.
+   * \return The object TypeId.
+   */
   static TypeId GetTypeId (void);
 
   RoutingProtocol ();
   virtual ~RoutingProtocol ();
 
-  ///
-  /// \brief Set the OLSR main address to the first address on the indicated
-  ///        interface
-  /// \param interface IPv4 interface index
-  ///
+  /**
+   * \brief Set the OLSR main address to the first address on the indicated interface.
+   *
+   * \param interface IPv4 interface index
+   */
   void SetMainInterface (uint32_t interface);
 
-  ///
-  /// Dump the neighbor table, two-hop neighbor table, and routing table
-  /// to logging output (NS_LOG_DEBUG log level).  If logging is disabled,
-  /// this function does nothing.
-  ///
+  /**
+   * Dump the neighbor table, two-hop neighbor table, and routing table
+   * to logging output (NS_LOG_DEBUG log level).  If logging is disabled,
+   * this function does nothing.
+   */
   void Dump (void);
 
   /**
    * Return the list of routing table entries discovered by OLSR
-   **/
+   */
   std::vector<RoutingTableEntry> GetRoutingTableEntries () const;
 
- /**
-  * 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
-  */
+  /**
+   * 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);
 
   /**
@@ -118,8 +126,7 @@
    * \param [in] header
    * \param [in] messages
    */
-  typedef void (* PacketTxRxTracedCallback)
-    (const PacketHeader & header, const MessageList & messages);
+  typedef void (* PacketTxRxTracedCallback)(const PacketHeader & header, const MessageList & messages);
 
   /**
    * TracedCallback signature for routing table computation.
@@ -129,22 +136,55 @@
   typedef void (* TableChangeTracedCallback) (uint32_t size);
 
 private:
-  std::set<uint32_t> m_interfaceExclusions;
-  Ptr<Ipv4StaticRouting> m_routingTableAssociation;
+  std::set<uint32_t> m_interfaceExclusions; //!< Set of interfaces excluded by OSLR.
+  Ptr<Ipv4StaticRouting> m_routingTableAssociation; //!< Associations from an Ipv4StaticRouting instance
 
 public:
+  /**
+   * Get the excluded interfaces.
+   * \returns Container of excluded interfaces.
+   */
   std::set<uint32_t> GetInterfaceExclusions () const
   {
     return m_interfaceExclusions;
   }
+
+  /**
+   * Set the interfaces to be excluded.
+   * \param exceptions Container of excluded interfaces.
+   */
   void SetInterfaceExclusions (std::set<uint32_t> exceptions);
 
-  /// Inject Association to be sent in HNA message
+  /**
+   *  \brief Injects the specified (networkAddr, netmask) tuple in the list of
+   *  local HNA associations to be sent by the node via HNA messages.
+   *  If this tuple already exists, nothing is done.
+   *
+   * \param networkAddr The network address.
+   * \param netmask The network mask.
+   */
   void AddHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask);
-  /// Removes Association sent in HNA message
+
+  /**
+   * \brief Removes the specified (networkAddr, netmask) tuple from the list of
+   * local HNA associations to be sent by the node via HNA messages.
+   * If this tuple does not exist, nothing is done (see "OlsrState::EraseAssociation()").
+   *
+   * \param networkAddr The network address.
+   * \param netmask The network mask.
+   */
   void RemoveHostNetworkAssociation (Ipv4Address networkAddr, Ipv4Mask netmask);
 
-  /// Inject Associations from an Ipv4StaticRouting instance
+  /**
+   * \brief Associates the specified Ipv4StaticRouting routing table
+   *         to the OLSR routing protocol. Entries from this associated
+   *         routing table that use non-olsr outgoing interfaces are added
+   *         to the list of local HNA associations so that they are included
+   *         in HNA messages sent by the node.
+   *         If this method is called more than once, entries from the old
+   *         association are deleted before entries from the new one are added.
+   *  \param routingTable the Ipv4StaticRouting routing table to be associated.
+   */
   void SetRoutingTableAssociation (Ptr<Ipv4StaticRouting> routingTable);
 
   /**
@@ -156,48 +196,100 @@
 protected:
   virtual void DoInitialize (void);
 private:
-  std::map<Ipv4Address, RoutingTableEntry> m_table; ///< Data structure for the routing table.
+  std::map<Ipv4Address, RoutingTableEntry> m_table; //!< Data structure for the routing table.
+
+  Ptr<Ipv4StaticRouting> m_hnaRoutingTable; //!< Routing table for HNA routes
 
-  Ptr<Ipv4StaticRouting> m_hnaRoutingTable;
+  EventGarbageCollector m_events; //!< Running events.
 
-  EventGarbageCollector m_events;
-	
-  /// Packets sequence number counter.
-  uint16_t m_packetSequenceNumber;
-  /// Messages sequence number counter.
-  uint16_t m_messageSequenceNumber;
-  /// Advertised Neighbor Set sequence number.
-  uint16_t m_ansn;
-
-  /// HELLO messages' emission interval.
-  Time m_helloInterval;
-  /// TC messages' emission interval.
-  Time m_tcInterval;
-  /// MID messages' emission interval.
-  Time m_midInterval;
-  /// HNA messages' emission interval.
-  Time m_hnaInterval;
-  /// Willingness for forwarding packets on behalf of other nodes.
-  uint8_t m_willingness;
+  uint16_t m_packetSequenceNumber;    //!< Packets sequence number counter.
+  uint16_t m_messageSequenceNumber;   //!< Messages sequence number counter.
+  uint16_t m_ansn;  //!< Advertised Neighbor Set sequence number.
 
-  /// Internal state with all needed data structs.
-  OlsrState m_state;
+  Time m_helloInterval;   //!< HELLO messages' emission interval.
+  Time m_tcInterval;      //!< TC messages' emission interval.
+  Time m_midInterval;     //!< MID messages' emission interval.
+  Time m_hnaInterval;     //!< HNA messages' emission interval.
+  uint8_t m_willingness;  //!<  Willingness for forwarding packets on behalf of other nodes.
 
-  Ptr<Ipv4> m_ipv4;
+  OlsrState m_state;  //!< Internal state with all needed data structs.
+  Ptr<Ipv4> m_ipv4;   //!< IPv4 object the routing is linked to.
 
+  /**
+   * \brief Clears the routing table and frees the memory assigned to each one of its entries.
+   */
   void Clear ();
-  uint32_t GetSize () const { return m_table.size (); }
+
+  /**
+   * Returns the routing table size.
+   * \return The routing table size.
+   */
+  uint32_t GetSize () const
+  {
+    return m_table.size ();
+  }
+
+  /**
+   * \brief Deletes the entry whose destination address is given.
+   * \param dest address of the destination node.
+   */
   void RemoveEntry (const Ipv4Address &dest);
+  /**
+   * \brief Adds a new entry into the routing table.
+   *
+   * If an entry for the given destination existed, it is deleted and freed.
+   *
+   * \param dest address of the destination node.
+   * \param next address of the next hop node.
+   * \param interface address of the local interface.
+   * \param distance distance to the destination node.
+   */
   void AddEntry (const Ipv4Address &dest,
                  const Ipv4Address &next,
                  uint32_t interface,
                  uint32_t distance);
+  /**
+   * \brief Adds a new entry into the routing table.
+   *
+   * If an entry for the given destination existed, an error is thrown.
+   *
+   * \param dest address of the destination node.
+   * \param next address of the next hop node.
+   * \param interfaceAddress address of the local interface.
+   * \param distance distance to the destination node.
+   */
   void AddEntry (const Ipv4Address &dest,
                  const Ipv4Address &next,
                  const Ipv4Address &interfaceAddress,
                  uint32_t distance);
+
+  /**
+   * \brief Looks up an entry for the specified destination address.
+   * \param [in] dest Destination address.
+   * \param [out] outEntry Holds the routing entry result, if found.
+   * \return true if found, false if not found.
+   */
   bool Lookup (const Ipv4Address &dest,
                RoutingTableEntry &outEntry) const;
+
+  /**
+   * \brief Finds the appropriate entry which must be used in order to forward
+   * a data packet to a next hop (given a destination).
+   *
+   * Imagine a routing table like this: [A,B] [B,C] [C,C]; being each pair of the
+   * form [dest addr, next-hop addr]. In this case, if this function is invoked
+   * with [A,B] then pair [C,C] is returned because C is the next hop that must be used
+   * to forward a data packet destined to A. That is, C is a neighbor of this node,
+   * but B isn't. This function finds the appropriate neighbor for forwarding a packet.
+   *
+   * \param[in] entry The routing table entry which indicates the destination node
+   * we are interested in.
+   *
+   * \param[out] outEntry The appropriate routing table entry which indicates the next
+   * hop which must be used for forwarding a data packet, or NULL if there is no such entry.
+   *
+   * \return True if an entry was found, false otherwise.
+   */
   bool FindSendEntry (const RoutingTableEntry &entry,
                       RoutingTableEntry &outEntry) const;
 
@@ -222,96 +314,435 @@
 
   void DoDispose ();
 
+  /**
+   * Send an OLSR message.
+   * \param packet The packet to be sent.
+   * \param containedMessages The messages contained in the packet.
+   */
   void SendPacket (Ptr<Packet> packet, const MessageList &containedMessages);
 
-  /// Increments packet sequence number and returns the new value.
+  /**
+   * Increments packet sequence number and returns the new value.
+   * \return The packet sequence number.
+   */
   inline uint16_t GetPacketSequenceNumber ();
-  /// Increments message sequence number and returns the new value.
+
+  /**
+   * Increments message sequence number and returns the new value.
+   * \return The message sequence number.
+   */
   inline uint16_t GetMessageSequenceNumber ();
 
+  /**
+   * Receive an OLSR message.
+   * \param socket The receiving socket.
+   */
   void RecvOlsr (Ptr<Socket> socket);
 
+  /**
+   * \brief Computates MPR set of a node following \RFC{3626} hints.
+   */
   void MprComputation ();
+
+  /**
+   * \brief Creates the routing table of the node following \RFC{3626} hints.
+   */
   void RoutingTableComputation ();
+
+  /**
+   * \brief Gets the main address associated with a given interface address.
+   * \param iface_addr the interface address.
+   * \return the corresponding main address.
+   */
   Ipv4Address GetMainAddress (Ipv4Address iface_addr) const;
+
+  /**
+   *  \brief Tests whether or not the specified route uses a non-OLSR outgoing interface.
+   *  \param route The route to be tested.
+   *  \returns True if the outgoing interface of the specified route is a non-OLSR interface, false otherwise.
+   */
   bool UsesNonOlsrOutgoingInterface (const Ipv4RoutingTableEntry &route);
 
   // Timer handlers
-  Timer m_helloTimer;
+  Timer m_helloTimer; //!< Timer for the HELLO message.
+  /**
+   * \brief Sends a HELLO message and reschedules the HELLO timer.
+   */
   void HelloTimerExpire ();
 
-  Timer m_tcTimer;
+  Timer m_tcTimer; //!< Timer for the TC message.
+  /**
+   * \brief Sends a TC message (if there exists any MPR selector) and reschedules the TC timer.
+   */
   void TcTimerExpire ();
 
-  Timer m_midTimer;
+  Timer m_midTimer; //!< Timer for the MID message.
+  /**
+   * \brief \brief Sends a MID message (if the node has more than one interface) and resets the MID timer.
+   */
   void MidTimerExpire ();
 
-  Timer m_hnaTimer;
+  Timer m_hnaTimer; //!< Timer for the HNA message.
+  /**
+   * \brief Sends an HNA message (if the node has associated hosts/networks) and reschedules the HNA timer.
+   */
   void HnaTimerExpire ();
 
+  /**
+   * \brief Removes tuple if expired. Else timer is rescheduled to expire at tuple.expirationTime.
+   *
+   * The task of actually removing the tuple is left to the OLSR agent.
+   *
+   * \param address The address of the tuple.
+   * \param sequenceNumber The sequence number of the tuple.
+   */
   void DupTupleTimerExpire (Ipv4Address address, uint16_t sequenceNumber);
-  bool m_linkTupleTimerFirstTime;
+
+  bool m_linkTupleTimerFirstTime; //!< Flag to indicate if it is the first time the LinkTupleTimer fires.
+  /**
+   * \brief Removes tuple_ if expired. Else if symmetric time
+   * has expired then it is assumed a neighbor loss and agent_->nb_loss()
+   * is called. In this case the timer is rescheduled to expire at
+   * tuple_->time(). Otherwise the timer is rescheduled to expire at
+   * the minimum between tuple_->time() and tuple_->sym_time().
+   *
+   * The task of actually removing the tuple is left to the OLSR agent.
+   *
+   * \param neighborIfaceAddr The tuple neighbor interface address.
+   */
   void LinkTupleTimerExpire (Ipv4Address neighborIfaceAddr);
+
+  /**
+   * \brief Removes 2_hop neighbor tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
+   *
+   * The task of actually removing the tuple is left to the OLSR agent.
+   *
+   * \param neighborMainAddr The neighbor main address.
+   * \param twoHopNeighborAddr The 2-hop neighbor address.
+   */
   void Nb2hopTupleTimerExpire (Ipv4Address neighborMainAddr, Ipv4Address twoHopNeighborAddr);
+
+  /**
+   * \brief Removes MPR selector tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
+   *
+   * The task of actually removing the tuple is left to the OLSR agent.
+   *
+   * \param mainAddr The tuple IPv4 address.
+   */
   void MprSelTupleTimerExpire (Ipv4Address mainAddr);
+
+  /**
+   * \brief Removes topology tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
+   *
+   * The task of actually removing the tuple is left to the OLSR agent.
+   *
+   * \param destAddr The destination address.
+   * \param lastAddr The last address.
+   */
   void TopologyTupleTimerExpire (Ipv4Address destAddr, Ipv4Address lastAddr);
+
+  /**
+   * \brief Removes interface association tuple_ if expired. Else the timer is rescheduled to expire at tuple_->time().
+   *
+   * \param ifaceAddr The interface address.
+   */
   void IfaceAssocTupleTimerExpire (Ipv4Address ifaceAddr);
+
+  /**
+   * \brief Removes association tuple_ if expired. Else timer is rescheduled to expire at tuple_->time().
+   *
+   * \param gatewayAddr The gateway address.
+   * \param networkAddr The network address.
+   * \param netmask  The network mask.
+   */
   void AssociationTupleTimerExpire (Ipv4Address gatewayAddr, Ipv4Address networkAddr, Ipv4Mask netmask);
 
+  /**
+   * Increments the ANSN counter.
+   */
   void IncrementAnsn ();
 
   /// A list of pending messages which are buffered awaiting for being sent.
   olsr::MessageList m_queuedMessages;
-  Timer m_queuedMessagesTimer; // timer for throttling outgoing messages
+  Timer m_queuedMessagesTimer; //!< timer for throttling outgoing messages
 
+  /**
+   * \brief OLSR's default forwarding algorithm.
+   *
+   * See \RFC{3626} for details.
+   *
+   * \param olsrMessage The %OLSR message which must be forwarded.
+   * \param duplicated NULL if the message has never been considered for forwarding, or a duplicate tuple in other case.
+   * \param localIface The address of the interface where the message was received from.
+   * \param senderAddress The sender IPv4 address.
+   */
   void ForwardDefault (olsr::MessageHeader olsrMessage,
                        DuplicateTuple *duplicated,
                        const Ipv4Address &localIface,
                        const Ipv4Address &senderAddress);
+
+  /**
+   * \brief Enques an %OLSR message which will be sent with a delay of (0, delay].
+   *
+   * This buffering system is used in order to piggyback several %OLSR messages in
+   * a same %OLSR packet.
+   *
+   * \param message the %OLSR message which must be sent.
+   * \param delay maximum delay the %OLSR message is going to be buffered.
+   */
   void QueueMessage (const olsr::MessageHeader &message, Time delay);
+
+  /**
+   * \brief Creates as many %OLSR packets as needed in order to send all buffered
+   * %OLSR messages.
+   *
+   * Maximum number of messages which can be contained in an %OLSR packet is
+   * dictated by OLSR_MAX_MSGS constant.
+   */
   void SendQueuedMessages ();
+
+  /**
+   * \brief Creates a new %OLSR HELLO message which is buffered for being sent later on.
+   */
   void SendHello ();
+
+  /**
+   * \brief Creates a new %OLSR TC message which is buffered for being sent later on.
+   */
   void SendTc ();
+
+  /**
+   * \brief Creates a new %OLSR MID message which is buffered for being sent later on.
+   */
   void SendMid ();
+
+  /**
+   * \brief Creates a new %OLSR HNA message which is buffered for being sent later on.
+   */
   void SendHna ();
 
+  /**
+   * \brief Performs all actions needed when a neighbor loss occurs.
+   *
+   * Neighbor Set, 2-hop Neighbor Set, MPR Set and MPR Selector Set are updated.
+   *
+   * \param tuple link tuple with the information of the link to the neighbor which has been lost.
+   */
   void NeighborLoss (const LinkTuple &tuple);
+
+  /**
+   * \brief Adds a duplicate tuple to the Duplicate Set.
+   *
+   * \param tuple The duplicate tuple to be added.
+   */
   void AddDuplicateTuple (const DuplicateTuple &tuple);
+
+  /**
+   * \brief Removes a duplicate tuple from the Duplicate Set.
+   *
+   * \param tuple The duplicate tuple to be removed.
+   */
   void RemoveDuplicateTuple (const DuplicateTuple &tuple);
+
+  /**
+   * Adds a link tuple.
+   * \param tuple Thetuple to be added.
+   * \param willingness The tuple willingness.
+   */
   void LinkTupleAdded (const LinkTuple &tuple, uint8_t willingness);
+
+  /**
+   * \brief Removes a link tuple from the Link Set.
+   *
+   * \param tuple The link tuple to be removed.
+   */
   void RemoveLinkTuple (const LinkTuple &tuple);
+
+  /**
+   * \brief This function is invoked when a link tuple is updated. Its aim is to
+   * also update the corresponding neighbor tuple if it is needed.
+   *
+   * \param tuple The link tuple which has been updated.
+   * \param willingness The tuple willingness.
+   */
   void LinkTupleUpdated (const LinkTuple &tuple, uint8_t willingness);
+
+  /**
+   * \brief Adds a neighbor tuple to the Neighbor Set.
+   *
+   * \param tuple The neighbor tuple to be added.
+   */
   void AddNeighborTuple (const NeighborTuple &tuple);
+
+  /**
+   * \brief Removes a neighbor tuple from the Neighbor Set.
+   *
+   * \param tuple The neighbor tuple to be removed.
+   */
   void RemoveNeighborTuple (const NeighborTuple &tuple);
+
+  /**
+   * \brief Adds a 2-hop neighbor tuple to the 2-hop Neighbor Set.
+   *
+   * \param tuple The 2-hop neighbor tuple to be added.
+   */
   void AddTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple);
+
+  /**
+   * \brief Removes a 2-hop neighbor tuple from the 2-hop Neighbor Set.
+   *
+   * \param tuple The 2-hop neighbor tuple to be removed.
+   */
   void RemoveTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple);
+
+  /**
+   * \brief Adds an MPR selector tuple to the MPR Selector Set.
+   * Advertised Neighbor Sequence Number (ANSN) is also updated.
+   *
+   * \param tuple The MPR selector tuple to be added.
+   */
   void AddMprSelectorTuple (const MprSelectorTuple  &tuple);
+
+  /**
+   * \brief Removes an MPR selector tuple from the MPR Selector Set.
+   * Advertised Neighbor Sequence Number (ANSN) is also updated.
+   *
+   * \param tuple The MPR selector tuple to be removed.
+   */
   void RemoveMprSelectorTuple (const MprSelectorTuple &tuple);
+
+  /**
+   * \brief Adds a topology tuple to the Topology Set.
+   *
+   * \param tuple The topology tuple to be added.
+   */
   void AddTopologyTuple (const TopologyTuple &tuple);
+
+  /**
+   * \brief Removes a topology tuple to the Topology Set.
+   *
+   * \param tuple The topology tuple to be removed.
+   */
   void RemoveTopologyTuple (const TopologyTuple &tuple);
+
+  /**
+   * \brief Adds an interface association tuple to the Interface Association Set.
+   *
+   * \param tuple The interface association tuple to be added.
+   */
   void AddIfaceAssocTuple (const IfaceAssocTuple &tuple);
+
+  /**
+   * \brief Removed an interface association tuple to the Interface Association Set.
+   *
+   * \param tuple The interface association tuple to be removed.
+   */
   void RemoveIfaceAssocTuple (const IfaceAssocTuple &tuple);
+
+  /**
+   * \brief Adds a host network association tuple to the Association Set.
+   *
+   * \param tuple The host network association tuple to be added.
+   */
   void AddAssociationTuple (const AssociationTuple &tuple);
+
+  /**
+   * \brief Removes a host network association tuple to the Association Set.
+   *
+   * \param tuple The host network association tuple to be removed.
+   */
   void RemoveAssociationTuple (const AssociationTuple &tuple);
 
+  /**
+   * \brief Processes a HELLO message following \RFC{3626} specification.
+   *
+   * Link sensing and population of the Neighbor Set, 2-hop Neighbor Set and MPR
+   * Selector Set are performed.
+   *
+   * \param msg the %OLSR message which contains the HELLO message.
+   * \param receiverIface the address of the interface where the message was received from.
+   * \param senderIface the address of the interface where the message was sent from.
+   */
   void ProcessHello (const olsr::MessageHeader &msg,
                      const Ipv4Address &receiverIface,
                      const Ipv4Address &senderIface);
+
+  /**
+   * \brief Processes a TC message following \RFC{3626} specification.
+   *
+   * The Topology Set is updated (if needed) with the information of
+   * the received TC message.
+   *
+   * \param msg The %OLSR message which contains the TC message.
+   * \param senderIface The address of the interface where the message was sent from.
+   *
+   */
   void ProcessTc (const olsr::MessageHeader &msg,
                   const Ipv4Address &senderIface);
+
+  /**
+   * \brief Processes a MID message following \RFC{3626} specification.
+   *
+   * The Interface Association Set is updated (if needed) with the information
+   * of the received MID message.
+   *
+   * \param msg the %OLSR message which contains the MID message.
+   * \param senderIface the address of the interface where the message was sent from.
+   */
   void ProcessMid (const olsr::MessageHeader &msg,
                    const Ipv4Address &senderIface);
+
+  /**
+   *
+   * \brief Processes a HNA message following \RFC{3626} specification.
+   *
+   * The Host Network Association Set is updated (if needed) with the information
+   * of the received HNA message.
+   *
+   * \param msg the %OLSR message which contains the HNA message.
+   * \param senderIface the address of the interface where the message was sent from.
+   *
+   */
   void ProcessHna (const olsr::MessageHeader &msg,
                    const Ipv4Address &senderIface);
 
+  /**
+   * \brief Updates Link Set according to a new received HELLO message
+   * (following \RFC{3626} specification). Neighbor Set is also updated if needed.
+   * \param msg The received message.
+   * \param hello The received HELLO sub-message.
+   * \param receiverIface The interface that received the message.
+   * \param senderIface The sender interface.
+   */
   void LinkSensing (const olsr::MessageHeader &msg,
                     const olsr::MessageHeader::Hello &hello,
                     const Ipv4Address &receiverIface,
-                    const Ipv4Address &sender_iface);
+                    const Ipv4Address &senderIface);
+
+  /**
+   * \brief Updates the Neighbor Set according to the information contained in
+   * a new received HELLO message (following \RFC{3626}).
+   * \param msg The received message.
+   * \param hello The received HELLO sub-message.
+   */
   void PopulateNeighborSet (const olsr::MessageHeader &msg,
                             const olsr::MessageHeader::Hello &hello);
+
+  /**
+   * \brief Updates the 2-hop Neighbor Set according to the information contained
+   * in a new received HELLO message (following \RFC{3626}).
+   * \param msg The received message.
+   * \param hello The received HELLO sub-message.
+   */
   void PopulateTwoHopNeighborSet (const olsr::MessageHeader &msg,
                                   const olsr::MessageHeader::Hello &hello);
+
+  /**
+   * \brief Updates the MPR Selector Set according to the information contained in
+   * a new received HELLO message (following \RFC{3626}).
+   * \param msg The received message.
+   * \param hello The received HELLO sub-message.
+   */
   void PopulateMprSelectorSet (const olsr::MessageHeader &msg,
                                const olsr::MessageHeader::Hello &hello);
 
@@ -319,21 +750,24 @@
   /// Check that address is one of my interfaces
   bool IsMyOwnAddress (const Ipv4Address & a) const;
 
-  Ipv4Address m_mainAddress;
+  Ipv4Address m_mainAddress; //!< the node main address.
 
   // One socket per interface, each bound to that interface's address
   // (reason: for OLSR Link Sensing we need to know on which interface
   // HELLO messages arrive)
-  std::map< Ptr<Socket>, Ipv4InterfaceAddress > m_socketAddresses;
+  std::map< Ptr<Socket>, Ipv4InterfaceAddress > m_socketAddresses; //!< Container of sockets and the interfaces they are opened onto.
+
+  /// Rx packet trace.
+  TracedCallback <const PacketHeader &, const MessageList &> m_rxPacketTrace;
+
+  /// Tx packet trace.
+  TracedCallback <const PacketHeader &, const MessageList &> m_txPacketTrace;
 
-  TracedCallback <const PacketHeader &,
-                  const MessageList &> m_rxPacketTrace;
-  TracedCallback <const PacketHeader &,
-                  const MessageList &> m_txPacketTrace;
+  /// Routing table chanes challback
   TracedCallback <uint32_t> m_routingTableChanged;
 
   /// Provides uniform random variables.
-  Ptr<UniformRandomVariable> m_uniformRandomVariable;  
+  Ptr<UniformRandomVariable> m_uniformRandomVariable;
 
 };
 
diff -Naur ns-3.24.1/src/olsr/model/olsr-state.cc ns-3.25/src/olsr/model/olsr-state.cc
--- ns-3.24.1/src/olsr/model/olsr-state.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-state.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2004 Francisco J. Ros 
+ * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
  * This program is free software; you can redistribute it and/or modify
@@ -41,7 +41,9 @@
        it != m_mprSelectorSet.end (); it++)
     {
       if (it->mainAddr == mainAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -64,7 +66,7 @@
 OlsrState::EraseMprSelectorTuples (const Ipv4Address &mainAddr)
 {
   for (MprSelectorSet::iterator it = m_mprSelectorSet.begin ();
-       it != m_mprSelectorSet.end ();)
+       it != m_mprSelectorSet.end (); )
     {
       if (it->mainAddr == mainAddr)
         {
@@ -95,7 +97,9 @@
       next++;
       os << iter->mainAddr;
       if (next != m_mprSelectorSet.end ())
-        os << ", ";
+        {
+          os << ", ";
+        }
     }
   os << "]";
   return os.str ();
@@ -111,7 +115,9 @@
        it != m_neighborSet.end (); it++)
     {
       if (it->neighborMainAddr == mainAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -123,7 +129,9 @@
        it != m_neighborSet.end (); it++)
     {
       if (it->neighborMainAddr == mainAddr && it->status == NeighborTuple::STATUS_SYM)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -135,7 +143,9 @@
        it != m_neighborSet.end (); it++)
     {
       if (it->neighborMainAddr == mainAddr && it->willingness == willingness)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -221,7 +231,7 @@
                                       const Ipv4Address &twoHopNeighborAddr)
 {
   for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin ();
-       it != m_twoHopNeighborSet.end ();)
+       it != m_twoHopNeighborSet.end (); )
     {
       if (it->neighborMainAddr == neighborMainAddr
           && it->twoHopNeighborAddr == twoHopNeighborAddr)
@@ -239,7 +249,7 @@
 OlsrState::EraseTwoHopNeighborTuples (const Ipv4Address &neighborMainAddr)
 {
   for (TwoHopNeighborSet::iterator it = m_twoHopNeighborSet.begin ();
-       it != m_twoHopNeighborSet.end ();)
+       it != m_twoHopNeighborSet.end (); )
     {
       if (it->neighborMainAddr == neighborMainAddr)
         {
@@ -287,7 +297,9 @@
        it != m_duplicateSet.end (); it++)
     {
       if (it->address == addr && it->sequenceNumber == sequenceNumber)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -321,7 +333,9 @@
        it != m_linkSet.end (); it++)
     {
       if (it->neighborIfaceAddr == ifaceAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -335,9 +349,13 @@
       if (it->neighborIfaceAddr == ifaceAddr)
         {
           if (it->symTime > now)
-            return &(*it);
+            {
+              return &(*it);
+            }
           else
-            break;
+            {
+              break;
+            }
         }
     }
   return NULL;
@@ -374,7 +392,9 @@
        it != m_topologySet.end (); it++)
     {
       if (it->destAddr == destAddr && it->lastAddr == lastAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -386,7 +406,9 @@
        it != m_topologySet.end (); it++)
     {
       if (it->lastAddr == lastAddr && it->sequenceNumber > ansn)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -409,7 +431,7 @@
 OlsrState::EraseOlderTopologyTuples (const Ipv4Address &lastAddr, uint16_t ansn)
 {
   for (TopologySet::iterator it = m_topologySet.begin ();
-       it != m_topologySet.end ();)
+       it != m_topologySet.end (); )
     {
       if (it->lastAddr == lastAddr && it->sequenceNumber < ansn)
         {
@@ -437,7 +459,9 @@
        it != m_ifaceAssocSet.end (); it++)
     {
       if (it->ifaceAddr == ifaceAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -449,7 +473,9 @@
        it != m_ifaceAssocSet.end (); it++)
     {
       if (it->ifaceAddr == ifaceAddr)
-        return &(*it);
+        {
+          return &(*it);
+        }
     }
   return NULL;
 }
@@ -482,7 +508,9 @@
        it != m_ifaceAssocSet.end (); it++)
     {
       if (it->mainAddr == neighborMainAddr)
-        retval.push_back (it->ifaceAddr);
+        {
+          retval.push_back (it->ifaceAddr);
+        }
     }
   return retval;
 }
@@ -543,4 +571,5 @@
   m_associations.push_back (tuple);
 }
 
-}} // namespace olsr, ns3
+}
+}  // namespace olsr, ns3
diff -Naur ns-3.24.1/src/olsr/model/olsr-state.h ns-3.25/src/olsr/model/olsr-state.h
--- ns-3.24.1/src/olsr/model/olsr-state.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/model/olsr-state.h	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2004 Francisco J. Ros 
+ * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
  * This program is free software; you can redistribute it and/or modify
@@ -30,150 +30,407 @@
 namespace ns3 {
 namespace olsr {
 
+/// \ingroup olsr
 /// This class encapsulates all data structures needed for maintaining internal state of an OLSR node.
 class OlsrState
 {
   //  friend class Olsr;
 
 protected:
-  LinkSet m_linkSet;    ///< Link Set (\RFC{3626}, section 4.2.1).
-  NeighborSet m_neighborSet;            ///< Neighbor Set (\RFC{3626}, section 4.3.1).
-  TwoHopNeighborSet m_twoHopNeighborSet;        ///< 2-hop Neighbor Set (\RFC{3626}, section 4.3.2).
-  TopologySet m_topologySet;    ///< Topology Set (\RFC{3626}, section 4.4).
-  MprSet m_mprSet;      ///< MPR Set (\RFC{3626}, section 4.3.3).
-  MprSelectorSet m_mprSelectorSet;      ///< MPR Selector Set (\RFC{3626}, section 4.3.4).
-  DuplicateSet m_duplicateSet;  ///< Duplicate Set (\RFC{3626}, section 3.4).
-  IfaceAssocSet m_ifaceAssocSet;        ///< Interface Association Set (\RFC{3626}, section 4.1).
-  AssociationSet m_associationSet; ///<	Association Set (\RFC{3626}, section12.2). Associations obtained from HNA messages generated by other nodes.
-  Associations m_associations;  ///< The node's local Host Network Associations that will be advertised using HNA messages.
+  LinkSet m_linkSet;    //!< Link Set (\RFC{3626}, section 4.2.1).
+  NeighborSet m_neighborSet;            //!< Neighbor Set (\RFC{3626}, section 4.3.1).
+  TwoHopNeighborSet m_twoHopNeighborSet;        //!< 2-hop Neighbor Set (\RFC{3626}, section 4.3.2).
+  TopologySet m_topologySet;    //!< Topology Set (\RFC{3626}, section 4.4).
+  MprSet m_mprSet;      //!< MPR Set (\RFC{3626}, section 4.3.3).
+  MprSelectorSet m_mprSelectorSet;      //!< MPR Selector Set (\RFC{3626}, section 4.3.4).
+  DuplicateSet m_duplicateSet;  //!< Duplicate Set (\RFC{3626}, section 3.4).
+  IfaceAssocSet m_ifaceAssocSet;        //!< Interface Association Set (\RFC{3626}, section 4.1).
+  AssociationSet m_associationSet; //!<	Association Set (\RFC{3626}, section12.2). Associations obtained from HNA messages generated by other nodes.
+  Associations m_associations;  //!< The node's local Host Network Associations that will be advertised using HNA messages.
 
 public:
-
   OlsrState ()
-  {}
+  {
+  }
 
   // MPR selector
+
+  /**
+   * Gets the MPR selectors.
+   * \returns The MPR selectors.
+   */
   const MprSelectorSet & GetMprSelectors () const
   {
     return m_mprSelectorSet;
   }
+
+  /**
+   * Finds a MPR selector tuple.
+   * \param mainAddr The MPR selector main address.
+   * \returns The MPR selector, if found. Else it returns a null pointer.
+   */
   MprSelectorTuple* FindMprSelectorTuple (const Ipv4Address &mainAddr);
+
+  /**
+   * Erases a MPR selector tuple.
+   * \param tuple The MPR selector tuple.
+   */
   void EraseMprSelectorTuple (const MprSelectorTuple &tuple);
+
+  /**
+   * Erases all MPR selector tuples belonging to the same address.
+   * \param mainAddr The MPR selector main address.
+   */
   void EraseMprSelectorTuples (const Ipv4Address &mainAddr);
+
+  /**
+   * Inserts a MPR selector tuple
+   * \param tuple The MPR selector tuple.
+   */
   void InsertMprSelectorTuple (const MprSelectorTuple &tuple);
+
+  /**
+   * Prints the MPR selector sets.
+   * \return a string with the output data.
+   */
   std::string PrintMprSelectorSet () const;
 
   // Neighbor
+
+  /**
+   * Gets the neighbor set.
+   * \returns The neighbor set.
+   */
   const NeighborSet & GetNeighbors () const
   {
     return m_neighborSet;
   }
+  /**
+   * Gets the neighbor set.
+   * \returns The neighbor set.
+   */
   NeighborSet & GetNeighbors ()
   {
     return m_neighborSet;
   }
+
+  /**
+   * Finds a neighbor tuple.
+   * \param mainAddr The neighbor tuple main address.
+   * \returns The neighbor tuple, if found. Else it returns a null pointer.
+   */
   NeighborTuple* FindNeighborTuple (const Ipv4Address &mainAddr);
+
+  /**
+   * Finds a symmetrical neighbor tuple.
+   * \param mainAddr The neighbor tuple main address.
+   * \returns The neighbor tuple, if found. Else it returns a null pointer.
+   */
   const NeighborTuple* FindSymNeighborTuple (const Ipv4Address &mainAddr) const;
+
+  /**
+   * Finds a neighbor tuple.
+   * \param mainAddr The neighbor tuple main address.
+   * \param willingness The neighbor willingness.
+   * \returns The neighbor tuple, if found. Else it returns a null pointer.
+   */
   NeighborTuple* FindNeighborTuple (const Ipv4Address &mainAddr,
                                     uint8_t willingness);
+
+  /**
+   * Erases a neighbor tuple.
+   * \param neighborTuple The neighbor tuple.
+   */
   void EraseNeighborTuple (const NeighborTuple &neighborTuple);
+  /**
+   * Erases a neighbor tuple.
+   * \param mainAddr The neighbor tuple main address.
+   */
   void EraseNeighborTuple (const Ipv4Address &mainAddr);
+
+  /**
+   * Inserts a neighbor tuple.
+   * \param tuple The neighbor tuple.
+   */
   void InsertNeighborTuple (const NeighborTuple &tuple);
 
   // Two-hop neighbor
+
+  /**
+   * Gets the 2-hop neighbor set.
+   * \returns The 2-hop neighbor set.
+   */
   const TwoHopNeighborSet & GetTwoHopNeighbors () const
   {
     return m_twoHopNeighborSet;
   }
+  /**
+   * Gets the 2-hop neighbor set.
+   * \returns The 2-hop neighbor set.
+   */
   TwoHopNeighborSet & GetTwoHopNeighbors ()
   {
     return m_twoHopNeighborSet;
   }
+
+  /**
+   * Finds a 2-hop neighbor tuple.
+   * \param neighbor The neighbor main address.
+   * \param twoHopNeighbor The 2-hop neighbor main address.
+   * \returns The 2-hop neighbor tuple, if found. Else it returns a null pointer.
+   */
   TwoHopNeighborTuple* FindTwoHopNeighborTuple (const Ipv4Address &neighbor,
                                                 const Ipv4Address &twoHopNeighbor);
+
+  /**
+   * Erases a 2-hop neighbor tuple.
+   * \param tuple The 2-hop neighbor tuple.
+   */
   void EraseTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple);
+  /**
+   * Erases the 2-hop neighbor tuples with the same 1-hop neighbor.
+   * \param neighbor The neighbor address.
+   */
   void EraseTwoHopNeighborTuples (const Ipv4Address &neighbor);
+  /**
+   * Erases the 2-hop neighbor tuples with matching predicates.
+   * \param neighbor The neighbor address.
+   * \param twoHopNeighbor The 2-hop neighbor main address.
+   */
   void EraseTwoHopNeighborTuples (const Ipv4Address &neighbor,
                                   const Ipv4Address &twoHopNeighbor);
+  /**
+   * Inserts a 2-hop neighbor tuple.
+   * \param tuple The 2-hop neighbor tuple.
+   */
   void InsertTwoHopNeighborTuple (const TwoHopNeighborTuple &tuple);
 
   // MPR
+
+  /**
+   * Checks if there's an MPR with a specific address.
+   * \param address The address to test.
+   * \return True if a MPR with the specified address exists.
+   */
   bool FindMprAddress (const Ipv4Address &address);
-  /// MprSet is set by routing protocol after MprCompute
+
+  /**
+   * Sets the MPR set to the one specified.
+   * \param mprSet The new MPR set.
+   */
   void SetMprSet (MprSet mprSet);
-  /// Gets an MPR Set needed by tests
+
+  /**
+   * Gets the MPR set.
+   * \return The MPR set.
+   */
   MprSet GetMprSet () const;
 
   // Duplicate
+
+  /**
+   * Finds a duplicate tuple.
+   * \param address The duplicate tuple address.
+   * \param sequenceNumber The duplicate tuple sequence number.
+   * \returns The duplicate tuple, or a null pointer if no match.
+   */
   DuplicateTuple* FindDuplicateTuple (const Ipv4Address &address,
                                       uint16_t sequenceNumber);
+
+  /**
+   * Erases a duplicate tuple.
+   * \param tuple The tuple to erase.
+   */
   void EraseDuplicateTuple (const DuplicateTuple &tuple);
+  /**
+   * Inserts a duplicate tuple.
+   * \param tuple The tuple to insert.
+   */
   void InsertDuplicateTuple (const DuplicateTuple &tuple);
 
   // Link
+
+  /**
+   * Gets the Link set.
+   * \return The Link set.
+   */
   const LinkSet & GetLinks () const
   {
     return m_linkSet;
   }
+  /**
+   * Finds a link tuple.
+   * \param ifaceAddr The interface address of the link.
+   * \returns The link tuple, or a null pointer if no match.
+   */
   LinkTuple* FindLinkTuple (const Ipv4Address &ifaceAddr);
+  /**
+   * Finds a symmetrical link tuple.
+   * \param ifaceAddr The interface address of the link.
+   * \param time The time at which the link should be considered symmetrical.
+   * \returns The link tuple, or a null pointer if no match.
+   */
   LinkTuple* FindSymLinkTuple (const Ipv4Address &ifaceAddr, Time time);
+  /**
+   * Erases a link tuple.
+   * \param tuple The tuple to erase.
+   */
   void EraseLinkTuple (const LinkTuple &tuple);
+  /**
+   * Inserts a link tuple.
+   * \param tuple The tuple to insert.
+   * \returns A reference to the inserted tuple.
+   */
   LinkTuple& InsertLinkTuple (const LinkTuple &tuple);
 
   // Topology
+
+  /**
+   * Gets the topology set.
+   * \returns The topology set.
+   */
   const TopologySet & GetTopologySet () const
   {
     return m_topologySet;
   }
+  /**
+   * Finds a topology tuple.
+   * \param destAddr The destination address.
+   * \param lastAddr The address of the node previous to the destination.
+   * \returns The topology tuple, or a null pointer if no match.
+   */
   TopologyTuple* FindTopologyTuple (const Ipv4Address &destAddr,
                                     const Ipv4Address &lastAddr);
+  /**
+   * Finds a topology tuple.
+   * \param lastAddr The address of the node previous to the destination.
+   * \param ansn The Advertised Neighbor Sequence Number.
+   * \returns The topology tuple, or a null pointer if no match.
+   */
   TopologyTuple* FindNewerTopologyTuple (const Ipv4Address &lastAddr,
                                          uint16_t ansn);
+  /**
+   * Erases a topology tuple.
+   * \param tuple The tuple to erase.
+   */
   void EraseTopologyTuple (const TopologyTuple &tuple);
+  /**
+   * Erases a topology tuple.
+   * \param lastAddr The address of the node previous to the destination.
+   * \param ansn The Advertised Neighbor Sequence Number.
+   */
   void EraseOlderTopologyTuples (const Ipv4Address &lastAddr,
                                  uint16_t ansn);
+  /**
+   * Inserts a topology tuple.
+   * \param tuple The tuple to insert.
+   */
   void InsertTopologyTuple (const TopologyTuple &tuple);
 
   // Interface association
+
+  /**
+   * Gets the interface association set.
+   * \returns The interface association set.
+   */
   const IfaceAssocSet & GetIfaceAssocSet () const
   {
     return m_ifaceAssocSet;
   }
+  /**
+   * Gets a mutable reference to the interface association set.
+   * \returns The interface association set.
+   */
   IfaceAssocSet & GetIfaceAssocSetMutable ()
   {
     return m_ifaceAssocSet;
   }
+
+  /**
+   * Finds a interface association tuple.
+   * \param ifaceAddr The interface address.
+   * \returns The interface association  tuple, or a null pointer if no match.
+   */
   IfaceAssocTuple* FindIfaceAssocTuple (const Ipv4Address &ifaceAddr);
+  /**
+   * Finds a interface association tuple.
+   * \param ifaceAddr The interface address.
+   * \returns The interface association  tuple, or a null pointer if no match.
+   */
   const IfaceAssocTuple* FindIfaceAssocTuple (const Ipv4Address &ifaceAddr) const;
+  /**
+   * Erases a interface association tuple.
+   * \param tuple The tuple to erase.
+   */
   void EraseIfaceAssocTuple (const IfaceAssocTuple &tuple);
+  /**
+   * Inserts a interface association tuple.
+   * \param tuple The tuple to insert.
+   */
   void InsertIfaceAssocTuple (const IfaceAssocTuple &tuple);
 
   // Host-Network Association
+  /**
+   * Gets the association set known to the node.
+   * \returns The association set known to the node.
+   */
   const AssociationSet & GetAssociationSet () const  // Associations known to the node
   {
     return m_associationSet;
   }
 
+  /**
+   * Gets the association set the node has.
+   * \returns The association set the node has.
+   */
   const Associations & GetAssociations () const  // Set of associations that the node has
   {
     return m_associations;
   }
 
+  /**
+   * Finds an association tuple.
+   * \param gatewayAddr The gateway address.
+   * \param networkAddr The network address.
+   * \param netmask The network mask.
+   * \returns The association  tuple, or a null pointer if no match.
+   */
   AssociationTuple* FindAssociationTuple (const Ipv4Address &gatewayAddr, \
                                           const Ipv4Address &networkAddr, \
                                           const Ipv4Mask &netmask);
+  /**
+   * Erases a known association tuple.
+   * \param tuple The tuple to erase.
+   */
   void EraseAssociationTuple (const AssociationTuple &tuple);
+  /**
+   * Inserts a known association tuple.
+   * \param tuple The tuple to insert.
+   */
   void InsertAssociationTuple (const AssociationTuple &tuple);
+  /**
+   * Erases an association.
+   * \param tuple The tuple to erase.
+   */
   void EraseAssociation (const Association &tuple);
+  /**
+   * Inserts an association tuple.
+   * \param tuple The tuple to insert.
+   */
   void InsertAssociation (const Association &tuple);
 
-  // Returns a vector of all interfaces of a given neighbor, with the
-  // exception of the "main" one.
+  /**
+   * Returns a vector of all interfaces of a given neighbor, with the
+   * exception of the "main" one.
+   * \param neighborMainAddr The neighbor main address
+   * \returns A container of the neighbor addresses (excluding the main one).
+   */
   std::vector<Ipv4Address>
   FindNeighborInterfaces (const Ipv4Address &neighborMainAddr) const;
 
 };
 
-}} // namespace olsr,ns3
+}
+}  // namespace olsr,ns3
 
 #endif /* OLSR_STATE_H */
diff -Naur ns-3.24.1/src/olsr/test/bug780-test.cc ns-3.25/src/olsr/test/bug780-test.cc
--- ns-3.24.1/src/olsr/test/bug780-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/bug780-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,7 +17,7 @@
 
 // OLSR was observed to not converge in simple 3-nodes varying topology.
 // https://www.nsnam.org/bugzilla/show_bug.cgi?id=780
-// tcpdump -r bug780-0-0.pcap -nn -tt icmp | wc  
+// tcpdump -r bug780-0-0.pcap -nn -tt icmp | wc
 // should show about 395 packets; there is a ping outage from time
 // 123-127 due to the mobility.
 
@@ -40,18 +40,16 @@
 #include "ns3/icmpv4.h"
 #include "bug780-test.h"
 
-namespace ns3
-{
-namespace olsr
-{
+namespace ns3 {
+namespace olsr {
 
-Bug780Test::Bug780Test() : 
+Bug780Test::Bug780Test () :
   TestCase ("Test OLSR bug 780"),
   m_time (Seconds (200.0)), m_seq (0), m_recvCount (0)
 {
 }
 
-Bug780Test::~Bug780Test()
+Bug780Test::~Bug780Test ()
 {
 }
 
@@ -162,7 +160,7 @@
       p->RemoveHeader (icmp);
       if (icmp.GetType () == Icmpv4Header::ECHO_REPLY)
         {
-          m_recvCount ++;
+          m_recvCount++;
         }
     }
 }
diff -Naur ns-3.24.1/src/olsr/test/bug780-test.h ns-3.25/src/olsr/test/bug780-test.h
--- ns-3.24.1/src/olsr/test/bug780-test.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/bug780-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,15 +23,13 @@
 #include "ns3/nstime.h"
 #include "ns3/node-container.h"
 
-namespace ns3
-{
-namespace olsr
-{
-  /** See \bugid{780} */
+namespace ns3 {
+namespace olsr {
+/** See \bugid{780} */
 class Bug780Test : public TestCase
 {
 public:
-  Bug780Test (); 
+  Bug780Test ();
   ~Bug780Test ();
 private:
   /// Total simulation time
diff -Naur ns-3.24.1/src/olsr/test/hello-regression-test.cc ns-3.25/src/olsr/test/hello-regression-test.cc
--- ns-3.24.1/src/olsr/test/hello-regression-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/hello-regression-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -37,18 +37,16 @@
 #include "ns3/udp-header.h"
 #include "ns3/olsr-header.h"
 
-namespace ns3
-{
-namespace olsr
-{
+namespace ns3 {
+namespace olsr {
 
-HelloRegressionTest::HelloRegressionTest() : 
+HelloRegressionTest::HelloRegressionTest () :
   TestCase ("Test OLSR Hello messages generation"),
   m_time (Seconds (5)), m_countA (0), m_countB (0)
 {
 }
 
-HelloRegressionTest::~HelloRegressionTest()
+HelloRegressionTest::~HelloRegressionTest ()
 {
 }
 
@@ -133,7 +131,7 @@
     }
 
   std::vector<olsr::MessageHeader::Hello::LinkMessage>::const_iterator iter;
-  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter ++)
+  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter++)
     {
       if (m_countA == 1)
         {
@@ -148,7 +146,7 @@
       NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), "Only one neighbor.");
     }
 
-  m_countA ++;
+  m_countA++;
 }
 
 void
@@ -181,7 +179,7 @@
     }
 
   std::vector<olsr::MessageHeader::Hello::LinkMessage>::const_iterator iter;
-  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter ++)
+  for (iter = hello.linkMessages.begin (); iter != hello.linkMessages.end (); iter++)
     {
       if (m_countA == 1)
         {
@@ -196,7 +194,7 @@
       NS_TEST_EXPECT_MSG_EQ (iter->neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.2"), "Only one neighbor.");
     }
 
-  m_countB ++;
+  m_countB++;
 }
 
 }
diff -Naur ns-3.24.1/src/olsr/test/hello-regression-test.h ns-3.25/src/olsr/test/hello-regression-test.h
--- ns-3.24.1/src/olsr/test/hello-regression-test.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/hello-regression-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -27,17 +27,15 @@
 #include "ns3/ipv4-raw-socket-impl.h"
 #include "ns3/node-container.h"
 
-namespace ns3
-{
-namespace olsr
-{
+namespace ns3 {
+namespace olsr {
 /**
  * \ingroup olsr
  * \brief Trivial (still useful) test of OLSR operation
- * 
- * This test creates 2 stations with point-to-point link and runs OLSR without any extra traffic. 
+ *
+ * This test creates 2 stations with point-to-point link and runs OLSR without any extra traffic.
  * It is expected that only HELLO messages will be sent.
- * 
+ *
  * Expected trace (5 seconds):
    \verbatim
     1       2
@@ -47,12 +45,12 @@
     |<------|   HELLO (Link type: Asymmetric link, Neighbor address: 10.1.1.1) src = 10.1.1.2
     |------>|   HELLO (Link type: Symmetric link, Neighbor address: 10.1.1.2) src = 10.1.1.1
     |<------|   HELLO (Link type: Symmetric link, Neighbor address: 10.1.1.1) src = 10.1.1.2
-   \endverbatim 
+   \endverbatim
  */
 class HelloRegressionTest : public TestCase
 {
 public:
-  HelloRegressionTest (); 
+  HelloRegressionTest ();
   ~HelloRegressionTest ();
 private:
   /// Total simulation time
diff -Naur ns-3.24.1/src/olsr/test/olsr-header-test-suite.cc ns-3.25/src/olsr/test/olsr-header-test-suite.cc
--- ns-3.24.1/src/olsr/test/olsr-header-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/olsr-header-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -24,7 +24,8 @@
 
 using namespace ns3;
 
-class OlsrEmfTestCase : public TestCase {
+class OlsrEmfTestCase : public TestCase
+{
 public:
   OlsrEmfTestCase ();
   virtual void DoRun (void);
@@ -47,7 +48,8 @@
 }
 
 
-class OlsrMidTestCase : public TestCase {
+class OlsrMidTestCase : public TestCase
+{
 public:
   OlsrMidTestCase ();
   virtual void DoRun (void);
@@ -153,7 +155,8 @@
 }
 
 
-class OlsrHelloTestCase : public TestCase {
+class OlsrHelloTestCase : public TestCase
+{
 public:
   OlsrHelloTestCase ();
   virtual void DoRun (void);
@@ -213,7 +216,8 @@
 
 }
 
-class OlsrTcTestCase : public TestCase {
+class OlsrTcTestCase : public TestCase
+{
 public:
   OlsrTcTestCase ();
   virtual void DoRun (void);
@@ -251,7 +255,8 @@
 
 }
 
-class OlsrHnaTestCase : public TestCase {
+class OlsrHnaTestCase : public TestCase
+{
 public:
   OlsrHnaTestCase ();
   virtual void DoRun (void);
@@ -302,7 +307,7 @@
   OlsrTestSuite ();
 } g_olsrTestSuite;
 
-OlsrTestSuite::OlsrTestSuite()
+OlsrTestSuite::OlsrTestSuite ()
   : TestSuite ("routing-olsr-header", UNIT)
 {
   AddTestCase (new OlsrHnaTestCase (), TestCase::QUICK);
diff -Naur ns-3.24.1/src/olsr/test/olsr-routing-protocol-test-suite.cc ns-3.25/src/olsr/test/olsr-routing-protocol-test-suite.cc
--- ns-3.24.1/src/olsr/test/olsr-routing-protocol-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/olsr-routing-protocol-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2004 Francisco J. Ros 
+ * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
  * This program is free software; you can redistribute it and/or modify
@@ -41,13 +41,13 @@
 using namespace olsr;
 
 /// Testcase for MPR computation mechanism
-class OlsrMprTestCase : public TestCase {
+class OlsrMprTestCase : public TestCase
+{
 public:
   OlsrMprTestCase ();
   ~OlsrMprTestCase ();
   /// \brief Run test case
   virtual void DoRun (void);
-  ;
 };
 
 
@@ -63,10 +63,10 @@
 {
   Ptr<RoutingProtocol> protocol = CreateObject<RoutingProtocol> ();
   protocol->m_mainAddress = Ipv4Address ("10.0.0.1");
-  OlsrState & state = protocol->m_state; 
- 
+  OlsrState & state = protocol->m_state;
+
   /*
-   *  1 -- 2 
+   *  1 -- 2
    *  |    |
    *  3 -- 4
    *
@@ -78,7 +78,7 @@
   neigbor.neighborMainAddr = Ipv4Address ("10.0.0.2");
   protocol->m_state.InsertNeighborTuple (neigbor);
   neigbor.neighborMainAddr = Ipv4Address ("10.0.0.3");
-  protocol->m_state.InsertNeighborTuple (neigbor); 
+  protocol->m_state.InsertNeighborTuple (neigbor);
   TwoHopNeighborTuple tuple;
   tuple.expirationTime = Seconds (3600);
   tuple.neighborMainAddr = Ipv4Address ("10.0.0.2");
@@ -91,7 +91,7 @@
   protocol->MprComputation ();
   NS_TEST_EXPECT_MSG_EQ (state.GetMprSet ().size (), 1, "An only address must be chosen.");
   /*
-   *  1 -- 2 -- 5 
+   *  1 -- 2 -- 5
    *  |    |
    *  3 -- 4
    *
@@ -106,7 +106,7 @@
   NS_TEST_EXPECT_MSG_EQ (mpr.size (), 1, "An only address must be chosen.");
   NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.2") != mpr.end ()), true, "Node 1 must select node 2 as MPR");
   /*
-   *  1 -- 2 -- 5 
+   *  1 -- 2 -- 5
    *  |    |
    *  3 -- 4
    *  |
@@ -126,7 +126,7 @@
   /*
    *  7 (OLSR_WILL_ALWAYS)
    *  |
-   *  1 -- 2 -- 5 
+   *  1 -- 2 -- 5
    *  |    |
    *  3 -- 4
    *  |
@@ -145,7 +145,7 @@
   /*
    *                7 <- WILL_ALWAYS
    *                |
-   *      9 -- 8 -- 1 -- 2 -- 5 
+   *      9 -- 8 -- 1 -- 2 -- 5
    *                |    |
    *           ^    3 -- 4
    *           |    |
@@ -173,7 +173,7 @@
   OlsrProtocolTestSuite ();
 } g_olsrProtocolTestSuite;
 
-OlsrProtocolTestSuite::OlsrProtocolTestSuite()
+OlsrProtocolTestSuite::OlsrProtocolTestSuite ()
   : TestSuite ("routing-olsr", UNIT)
 {
   AddTestCase (new OlsrMprTestCase (), TestCase::QUICK);
diff -Naur ns-3.24.1/src/olsr/test/regression-test-suite.cc ns-3.25/src/olsr/test/regression-test-suite.cc
--- ns-3.24.1/src/olsr/test/regression-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/regression-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -28,7 +28,7 @@
 class RegressionTestSuite : public TestSuite
 {
 public:
-  RegressionTestSuite () : TestSuite ("routing-olsr-regression", SYSTEM) 
+  RegressionTestSuite () : TestSuite ("routing-olsr-regression", SYSTEM)
   {
     SetDataDir (NS_TEST_SOURCEDIR);
     AddTestCase (new HelloRegressionTest, TestCase::QUICK);
diff -Naur ns-3.24.1/src/olsr/test/tc-regression-test.cc ns-3.25/src/olsr/test/tc-regression-test.cc
--- ns-3.24.1/src/olsr/test/tc-regression-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/tc-regression-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -38,19 +38,17 @@
 #include "ns3/simple-net-device-helper.h"
 #include "ns3/simple-net-device.h"
 
-namespace ns3
-{
-namespace olsr
-{
+namespace ns3 {
+namespace olsr {
 
-TcRegressionTest::TcRegressionTest() : 
+TcRegressionTest::TcRegressionTest () :
   TestCase ("Test OLSR Topology Control message generation"),
   m_time (Seconds (20)),
   m_countA (0), m_countB (0), m_countC (0)
 {
 }
 
-TcRegressionTest::~TcRegressionTest()
+TcRegressionTest::~TcRegressionTest ()
 {
 }
 
@@ -185,7 +183,7 @@
           NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), int(m_countA) << " - Neighbor.");
         }
     }
-  m_countA ++;
+  m_countA++;
 }
 
 void
@@ -207,8 +205,8 @@
   receivedPacketProbe->RemoveHeader (msgHdr);
   const olsr::MessageHeader::Hello &hello = msgHdr.GetHello ();
 
-  if (m_countB == 0 || m_countB == 2 || m_countB == 5 || m_countB == 6 || m_countB == 8 ||
-      m_countB == 10 || m_countB == 13 || m_countB == 15 || m_countB == 17 || m_countB == 19)
+  if (m_countB == 0 || m_countB == 2 || m_countB == 5 || m_countB == 6 || m_countB == 8
+      || m_countB == 10 || m_countB == 13 || m_countB == 15 || m_countB == 17 || m_countB == 19)
     {
       NS_TEST_EXPECT_MSG_EQ (msgHdr.GetOriginatorAddress (), Ipv4Address ("10.1.1.3"), "Originator address.");
     }
@@ -240,7 +238,7 @@
       NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[0].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.2"), int(m_countC) << " - Neighbor.");
     }
 
-  m_countB ++;
+  m_countB++;
 }
 
 // Note: this is identical to ReceivePktProbeA, but the packet counter needs to be different.
@@ -308,7 +306,7 @@
           NS_TEST_EXPECT_MSG_EQ (hello.linkMessages[1].neighborInterfaceAddresses[0], Ipv4Address ("10.1.1.1"), int(m_countC) << " - Neighbor.");
         }
     }
-  m_countC ++;
+  m_countC++;
 }
 
 }
diff -Naur ns-3.24.1/src/olsr/test/tc-regression-test.h ns-3.25/src/olsr/test/tc-regression-test.h
--- ns-3.24.1/src/olsr/test/tc-regression-test.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/olsr/test/tc-regression-test.h	2016-03-23 21:36:53.000000000 -0700
@@ -27,17 +27,15 @@
 #include "ns3/ipv4-raw-socket-impl.h"
 #include "ns3/node-container.h"
 
-namespace ns3
-{
-namespace olsr
-{
+namespace ns3 {
+namespace olsr {
 /**
  * \ingroup olsr
  * \brief Less trivial test of OLSR Topology Control message generation
- * 
+ *
  * This test simulates 3 Wi-Fi stations with chain topology and runs OLSR without any extra traffic.
  * It is expected that only second station will send TC messages.
- * 
+ *
  * Expected trace (20 seconds, note random b-cast jitter):
    \verbatim
          1       2       3
@@ -72,13 +70,13 @@
   <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
          |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
          |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-   \endverbatim 
+   \endverbatim
  */
 class TcRegressionTest : public TestCase
 {
 public:
-  TcRegressionTest(); 
-  ~TcRegressionTest();
+  TcRegressionTest ();
+  ~TcRegressionTest ();
 private:
   /// Total simulation time
   const Time m_time;
diff -Naur ns-3.24.1/src/openflow/model/openflow-interface.h ns-3.25/src/openflow/model/openflow-interface.h
--- ns-3.24.1/src/openflow/model/openflow-interface.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/openflow/model/openflow-interface.h	2016-03-23 21:36:53.000000000 -0700
@@ -70,8 +70,7 @@
 void set_tp_port (ofpbuf *buffer, sw_flow_key *key, const ofp_action_header *ah);
 void set_mpls_label (ofpbuf *buffer, sw_flow_key *key, const ofp_action_header *ah);
 void set_mpls_exp (ofpbuf *buffer, sw_flow_key *key, const ofp_action_header *ah);
-#include "openflow/private/pt_act.h" // The function below is defined in pt_act.c
-void update_checksums (ofpbuf *buffer, const sw_flow_key *key, uint32_t old_word, uint32_t new_word);
+#include "openflow/private/pt_act.h"
 
 #undef list
 #undef private
diff -Naur ns-3.24.1/src/point-to-point/bindings/callbacks_list.py ns-3.25/src/point-to-point/bindings/callbacks_list.py
--- ns-3.24.1/src/point-to-point/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/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/point-to-point/bindings/modulegen__gcc_ILP32.py ns-3.25/src/point-to-point/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -103,7 +103,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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')
     ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper [class]
@@ -118,6 +118,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]
@@ -164,12 +166,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]
@@ -198,6 +204,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]
@@ -214,10 +224,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]
@@ -228,6 +244,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]
@@ -256,6 +274,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('PointToPointNetDevice', parent=root_module['ns3::NetDevice'])
     ## point-to-point-remote-channel.h (module 'point-to-point'): ns3::PointToPointRemoteChannel [class]
     module.add_class('PointToPointRemoteChannel', parent=root_module['ns3::PointToPointChannel'])
+    ## 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]
@@ -315,6 +341,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()
@@ -353,9 +385,37 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( 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 ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+
+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'])
@@ -400,6 +460,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'])
@@ -420,9 +481,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'])
@@ -435,6 +498,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'])
@@ -443,13 +508,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'])
@@ -463,6 +532,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'])
@@ -474,11 +545,13 @@
     register_Ns3PointToPointChannel_methods(root_module, root_module['ns3::PointToPointChannel'])
     register_Ns3PointToPointNetDevice_methods(root_module, root_module['ns3::PointToPointNetDevice'])
     register_Ns3PointToPointRemoteChannel_methods(root_module, root_module['ns3::PointToPointRemoteChannel'])
+    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'])
@@ -1248,6 +1321,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', 
@@ -1263,6 +1341,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', 
@@ -1439,7 +1522,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', 
@@ -2157,10 +2240,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', 
@@ -2486,6 +2573,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('!=')
@@ -2932,6 +3053,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', 
@@ -3012,18 +3137,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', 
@@ -3064,33 +3204,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
@@ -3250,6 +3402,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([])
@@ -3286,6 +3450,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([])
@@ -3842,6 +4018,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([])
@@ -4023,6 +4240,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([])
@@ -4079,6 +4329,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', 
@@ -4260,6 +4588,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([])
@@ -4534,7 +4895,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')], 
@@ -4661,6 +5022,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]
@@ -4740,6 +5187,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', 
@@ -5247,7 +5699,7 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::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]
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::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')], 
@@ -5332,6 +5784,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5356,6 +5813,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')])
@@ -5523,6 +6001,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([])
@@ -5716,6 +6227,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):
@@ -5731,6 +6243,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/point-to-point/bindings/modulegen__gcc_LP64.py ns-3.25/src/point-to-point/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/point-to-point/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -103,7 +103,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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')
     ## point-to-point-helper.h (module 'point-to-point'): ns3::PointToPointHelper [class]
@@ -118,6 +118,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]
@@ -164,12 +166,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]
@@ -198,6 +204,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]
@@ -214,10 +224,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]
@@ -228,6 +244,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]
@@ -256,6 +274,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('PointToPointNetDevice', parent=root_module['ns3::NetDevice'])
     ## point-to-point-remote-channel.h (module 'point-to-point'): ns3::PointToPointRemoteChannel [class]
     module.add_class('PointToPointRemoteChannel', parent=root_module['ns3::PointToPointChannel'])
+    ## 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]
@@ -315,6 +341,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()
@@ -353,9 +385,37 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( 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 ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+
+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'])
@@ -400,6 +460,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'])
@@ -420,9 +481,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'])
@@ -435,6 +498,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'])
@@ -443,13 +508,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'])
@@ -463,6 +532,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'])
@@ -474,11 +545,13 @@
     register_Ns3PointToPointChannel_methods(root_module, root_module['ns3::PointToPointChannel'])
     register_Ns3PointToPointNetDevice_methods(root_module, root_module['ns3::PointToPointNetDevice'])
     register_Ns3PointToPointRemoteChannel_methods(root_module, root_module['ns3::PointToPointRemoteChannel'])
+    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'])
@@ -1248,6 +1321,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', 
@@ -1263,6 +1341,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', 
@@ -1439,7 +1522,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', 
@@ -2157,10 +2240,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', 
@@ -2486,6 +2573,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('!=')
@@ -2932,6 +3053,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', 
@@ -3012,18 +3137,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', 
@@ -3064,33 +3204,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
@@ -3250,6 +3402,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([])
@@ -3286,6 +3450,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([])
@@ -3842,6 +4018,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([])
@@ -4023,6 +4240,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([])
@@ -4079,6 +4329,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', 
@@ -4260,6 +4588,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([])
@@ -4534,7 +4895,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')], 
@@ -4661,6 +5022,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]
@@ -4740,6 +5187,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', 
@@ -5247,7 +5699,7 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
-    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::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]
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::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')], 
@@ -5332,6 +5784,11 @@
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'p')], 
                    visibility='protected')
+    ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
     ## point-to-point-net-device.h (module 'point-to-point'): void ns3::PointToPointNetDevice::DoDispose() [member function]
     cls.add_method('DoDispose', 
                    'void', 
@@ -5356,6 +5813,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')])
@@ -5523,6 +6001,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([])
@@ -5716,6 +6227,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):
@@ -5731,6 +6243,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/point-to-point/doc/point-to-point.rst ns-3.25/src/point-to-point/doc/point-to-point.rst
--- ns-3.24.1/src/point-to-point/doc/point-to-point.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/doc/point-to-point.rst	2016-03-23 21:36:53.000000000 -0700
@@ -63,8 +63,7 @@
 The PointToPointChannel provides following Attributes:
 
 
-* Delay:  An ns3::Time specifying the speed of light transmission delay for the
-  channel.
+* Delay:  An ns3::Time specifying the propagation delay for the channel.
 
 Using the PointToPointNetDevice
 *******************************
diff -Naur ns-3.24.1/src/point-to-point/model/point-to-point-channel.cc ns-3.25/src/point-to-point/model/point-to-point-channel.cc
--- ns-3.24.1/src/point-to-point/model/point-to-point-channel.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/model/point-to-point-channel.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,7 @@
     .SetParent<Channel> ()
     .SetGroupName ("PointToPoint")
     .AddConstructor<PointToPointChannel> ()
-    .AddAttribute ("Delay", "Transmission delay through the channel",
+    .AddAttribute ("Delay", "Propagation delay through the channel",
                    TimeValue (Seconds (0)),
                    MakeTimeAccessor (&PointToPointChannel::m_delay),
                    MakeTimeChecker ())
diff -Naur ns-3.24.1/src/point-to-point/model/point-to-point-net-device.cc ns-3.25/src/point-to-point/model/point-to-point-net-device.cc
--- ns-3.24.1/src/point-to-point/model/point-to-point-net-device.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/model/point-to-point-net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -207,6 +207,16 @@
 }
 
 void
+PointToPointNetDevice::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  // The traffic control layer, if installed, has aggregated a
+  // NetDeviceQueueInterface object to this device
+  m_queueInterface = GetObject<NetDeviceQueueInterface> ();
+  NetDevice::DoInitialize ();
+}
+
+void
 PointToPointNetDevice::DoDispose ()
 {
   NS_LOG_FUNCTION (this);
@@ -214,6 +224,8 @@
   m_channel = 0;
   m_receiveErrorModel = 0;
   m_currentPkt = 0;
+  m_queue = 0;
+  m_queueInterface = 0;
   NetDevice::DoDispose ();
 }
 
@@ -280,18 +292,34 @@
   m_phyTxEndTrace (m_currentPkt);
   m_currentPkt = 0;
 
-  Ptr<Packet> p = m_queue->Dequeue ();
-  if (p == 0)
+  Ptr<NetDeviceQueue> txq;
+  if (m_queueInterface)
+  {
+    txq = m_queueInterface->GetTxQueue (0);
+  }
+
+  Ptr<QueueItem> item = m_queue->Dequeue ();
+  if (item == 0)
     {
-      //
-      // No packet was on the queue, so we just exit.
-      //
+      NS_LOG_LOGIC ("No pending packets in device queue after tx complete");
+      if (txq)
+      {
+        txq->Wake ();
+      }
       return;
     }
 
   //
-  // Got another packet off of the queue, so start the transmit process agin.
+  // Got another packet off of the queue, so start the transmit process again.
+  // If the queue was stopped, start it again. Note that we cannot wake the upper
+  // layers because otherwise a packet is sent to the device while the machine
+  // state is busy, thus causing the assert in TransmitStart to fail.
   //
+  if (txq && txq->IsStopped ())
+    {
+      txq->Start ();
+    }
+  Ptr<Packet> p = item->GetPacket ();
   m_snifferTrace (p);
   m_promiscSnifferTrace (p);
   TransmitStart (p);
@@ -510,6 +538,14 @@
   const Address &dest, 
   uint16_t protocolNumber)
 {
+  Ptr<NetDeviceQueue> txq;
+  if (m_queueInterface)
+  {
+    txq = m_queueInterface->GetTxQueue (0);
+  }
+
+  NS_ASSERT_MSG (!txq || !txq->IsStopped (), "Send should not be called when the device is stopped");
+
   NS_LOG_FUNCTION (this << packet << dest << protocolNumber);
   NS_LOG_LOGIC ("p=" << packet << ", dest=" << &dest);
   NS_LOG_LOGIC ("UID is " << packet->GetUid ());
@@ -535,14 +571,14 @@
   //
   // We should enqueue and dequeue the packet to hit the tracing hooks.
   //
-  if (m_queue->Enqueue (packet))
+  if (m_queue->Enqueue (Create<QueueItem> (packet)))
     {
       //
       // If the channel is ready for transition we send the packet right now
       // 
       if (m_txMachineState == READY)
         {
-          packet = m_queue->Dequeue ();
+          packet = m_queue->Dequeue ()->GetPacket ();
           m_snifferTrace (packet);
           m_promiscSnifferTrace (packet);
           return TransmitStart (packet);
@@ -550,8 +586,13 @@
       return true;
     }
 
-  // Enqueue may fail (overflow)
+  // Enqueue may fail (overflow). Stop the tx queue, so that the upper layers
+  // do not send packets until there is room in the queue again.
   m_macTxDropTrace (packet);
+  if (txq)
+  {
+    txq->Stop ();
+  }
   return false;
 }
 
diff -Naur ns-3.24.1/src/point-to-point/model/point-to-point-net-device.h ns-3.25/src/point-to-point/model/point-to-point-net-device.h
--- ns-3.24.1/src/point-to-point/model/point-to-point-net-device.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/model/point-to-point-net-device.h	2016-03-23 21:36:53.000000000 -0700
@@ -198,6 +198,8 @@
    */
   void DoMpiReceive (Ptr<Packet> p);
 
+  virtual void DoInitialize (void);
+
 private:
 
   /**
@@ -435,6 +437,7 @@
   TracedCallback<Ptr<const Packet> > m_promiscSnifferTrace;
 
   Ptr<Node> m_node;         //!< Node owning this NetDevice
+  Ptr<NetDeviceQueueInterface> m_queueInterface;   //!< NetDevice queue interface
   Mac48Address m_address;   //!< Mac48Address of this NetDevice
   NetDevice::ReceiveCallback m_rxCallback;   //!< Receive callback
   NetDevice::PromiscReceiveCallback m_promiscCallback;  //!< Receive callback
diff -Naur ns-3.24.1/src/point-to-point/model/point-to-point-remote-channel.cc ns-3.25/src/point-to-point/model/point-to-point-remote-channel.cc
--- ns-3.24.1/src/point-to-point/model/point-to-point-remote-channel.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/model/point-to-point-remote-channel.cc	2016-03-23 21:36:53.000000000 -0700
@@ -45,6 +45,7 @@
 }
 
 PointToPointRemoteChannel::PointToPointRemoteChannel ()
+  : PointToPointChannel ()
 {
 }
 
diff -Naur ns-3.24.1/src/point-to-point/test/point-to-point-test.cc ns-3.25/src/point-to-point/test/point-to-point-test.cc
--- ns-3.24.1/src/point-to-point/test/point-to-point-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point/test/point-to-point-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -86,6 +86,11 @@
   a->AddDevice (devA);
   b->AddDevice (devB);
 
+  Ptr<NetDeviceQueueInterface> ifaceA = CreateObject<NetDeviceQueueInterface> ();
+  devA->AggregateObject (ifaceA);
+  Ptr<NetDeviceQueueInterface> ifaceB = CreateObject<NetDeviceQueueInterface> ();
+  devB->AggregateObject (ifaceB);
+
   Simulator::Schedule (Seconds (1.0), &PointToPointTest::SendOnePacket, this, devA);
 
   Simulator::Run ();
diff -Naur ns-3.24.1/src/point-to-point-layout/bindings/callbacks_list.py ns-3.25/src/point-to-point-layout/bindings/callbacks_list.py
--- ns-3.24.1/src/point-to-point-layout/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point-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/point-to-point-layout/bindings/modulegen__gcc_ILP32.py ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -131,7 +131,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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]
@@ -184,6 +184,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]
@@ -208,12 +210,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]
@@ -222,6 +228,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]
@@ -304,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]
@@ -316,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]
@@ -327,6 +341,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
@@ -466,9 +481,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'])
@@ -507,12 +524,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'])
@@ -1452,6 +1472,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', 
@@ -1467,6 +1492,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', 
@@ -1593,10 +1623,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', 
@@ -1781,7 +1811,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', 
@@ -2008,10 +2038,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', 
@@ -2668,10 +2698,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', 
@@ -3838,11 +3872,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', 
@@ -3902,6 +3946,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', 
@@ -4040,6 +4088,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', 
@@ -4166,6 +4218,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([])
@@ -4202,6 +4266,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([])
@@ -4293,6 +4369,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', 
@@ -4318,6 +4399,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', 
@@ -5352,6 +5448,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 >', 
@@ -5367,6 +5468,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', 
@@ -5382,6 +5488,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', 
@@ -5432,6 +5548,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]
@@ -5574,6 +5695,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 >', 
@@ -5589,6 +5715,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', 
@@ -5616,7 +5747,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', 
@@ -5675,6 +5812,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]
@@ -5957,6 +6099,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 >', 
@@ -5967,6 +6114,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', 
@@ -5987,6 +6144,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', 
@@ -5997,6 +6164,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', 
@@ -6113,16 +6285,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 >', 
@@ -6146,7 +6335,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', 
@@ -6295,6 +6485,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', 
@@ -6456,7 +6672,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')], 
@@ -6583,6 +6799,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]
@@ -6662,6 +6964,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', 
@@ -6948,6 +7255,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/point-to-point-layout/bindings/modulegen__gcc_LP64.py ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/point-to-point-layout/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -131,7 +131,7 @@
     ## trace-helper.h (module 'network'): ns3::PcapHelper [class]
     module.add_class('PcapHelper', import_from_module='ns.network')
     ## trace-helper.h (module 'network'): ns3::PcapHelper [enumeration]
-    module.add_enum('', ['DLT_NULL', 'DLT_EN10MB', 'DLT_PPP', 'DLT_RAW', 'DLT_IEEE802_11', 'DLT_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]
@@ -184,6 +184,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]
@@ -208,12 +210,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]
@@ -222,6 +228,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]
@@ -304,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]
@@ -316,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]
@@ -327,6 +341,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
@@ -466,9 +481,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'])
@@ -507,12 +524,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'])
@@ -1452,6 +1472,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', 
@@ -1467,6 +1492,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', 
@@ -1593,10 +1623,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', 
@@ -1781,7 +1811,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', 
@@ -2008,10 +2038,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', 
@@ -2668,10 +2698,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', 
@@ -3838,11 +3872,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', 
@@ -3902,6 +3946,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', 
@@ -4040,6 +4088,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', 
@@ -4166,6 +4218,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([])
@@ -4202,6 +4266,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([])
@@ -4293,6 +4369,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', 
@@ -4318,6 +4399,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', 
@@ -5352,6 +5448,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 >', 
@@ -5367,6 +5468,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', 
@@ -5382,6 +5488,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', 
@@ -5432,6 +5548,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]
@@ -5574,6 +5695,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 >', 
@@ -5589,6 +5715,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', 
@@ -5616,7 +5747,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', 
@@ -5675,6 +5812,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]
@@ -5957,6 +6099,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 >', 
@@ -5967,6 +6114,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', 
@@ -5987,6 +6144,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', 
@@ -5997,6 +6164,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', 
@@ -6113,16 +6285,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 >', 
@@ -6146,7 +6335,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', 
@@ -6295,6 +6485,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', 
@@ -6456,7 +6672,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')], 
@@ -6583,6 +6799,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]
@@ -6662,6 +6964,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', 
@@ -6948,6 +7255,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/propagation/doc/propagation.rst ns-3.25/src/propagation/doc/propagation.rst
--- ns-3.24.1/src/propagation/doc/propagation.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/propagation/doc/propagation.rst	2016-03-23 21:36:53.000000000 -0700
@@ -267,21 +267,27 @@
 NakagamiPropagationLossModel
 ============================
 
-This propagation loss model implements Nakagami-m fast fading propagation loss model.
+This propagation loss model implements the Nakagami-m fast fading
+model, which accounts for the variations in signal strength due to multipath
+fading. The model does not account for the path loss due to the
+distance traveled by the signal, hence for typical simulation usage it
+is recommended to consider using it in combination with other models
+that take into account this aspect. 
 
 The Nakagami-m distribution is applied to the power level. The probability density function is defined as
 
 .. math::
 
-  p(x; m, \omega) = \frac{2 m^m}{\Gamma(m) \omega^m} x^{2m - 1} e^{-\frac{m}{\omega} x^2} = 2 x \cdot p_{\text{Gamma}}(x^2, m, \frac{m}{\omega})
+  p(x; m, \omega) = \frac{2 m^m}{\Gamma(m) \omega^m} x^{2m - 1} e^{-\frac{m}{\omega} x^2} )
   
 with :math:`m` the fading depth parameter and :math:`\omega` the average received power.
 
 It is implemented by either a :cpp:class:`GammaRandomVariable` or a :cpp:class:`ErlangRandomVariable`
 random variable.
 
-Like in :cpp:class:ThreeLogDistancePropagationLossModel`, the :math:`m` parameter is varied
-over three distance fields:
+The implementation of the model allows to specify different values of
+the :math:`m` parameter (and hence different fast fading profiles)
+for three different distance ranges:
 
 .. math::
 
diff -Naur ns-3.24.1/src/propagation/model/propagation-loss-model.h ns-3.25/src/propagation/model/propagation-loss-model.h
--- ns-3.24.1/src/propagation/model/propagation-loss-model.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/propagation/model/propagation-loss-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -629,17 +629,24 @@
  * \ingroup propagation
  *
  * \brief Nakagami-m fast fading propagation loss model.
+ * 
+ * This propagation loss model implements the Nakagami-m fast fading
+ * model, which accounts for the variations in signal strength due to multipath
+ * fading. The model does not account for the path loss due to the
+ * distance traveled by the signal, hence for typical simulation usage it
+ * is recommended to consider using it in combination with other models
+ * that take into account this aspect. 
  *
  * The Nakagami-m distribution is applied to the power level. The probability
  * density function is defined as
- * \f[ p(x; m, \omega) = \frac{2 m^m}{\Gamma(m) \omega^m} x^{2m - 1} e^{-\frac{m}{\omega} x^2} = 2 x \cdot p_{\text{Gamma}}(x^2, m, \frac{m}{\omega}) \f]
+ * \f[ p(x; m, \omega) = \frac{2 m^m}{\Gamma(m) \omega^m} x^{2m - 1} e^{-\frac{m}{\omega} x^2}  \f]
  * with \f$ m \f$ the fading depth parameter and \f$ \omega \f$ the average received power.
  *
  * It is implemented by either a ns3::GammaRandomVariable or a 
  * ns3::ErlangRandomVariable random variable.
  *
- * Like in ns3::ThreeLogDistancePropagationLossModel, the m parameter is varied
- * over three distance fields:
+ * The implementation of the model allows to specify different values of the m parameter (and hence different fading profiles)
+ * for three different distance ranges:
  * \f[ \underbrace{0 \cdots\cdots}_{m_0} \underbrace{d_1 \cdots\cdots}_{m_1} \underbrace{d_2 \cdots\cdots}_{m_2} \infty \f]
  *
  * For m = 1 the Nakagami-m distribution equals the Rayleigh distribution. Thus
diff -Naur ns-3.24.1/src/sixlowpan/bindings/callbacks_list.py ns-3.25/src/sixlowpan/bindings/callbacks_list.py
--- ns-3.24.1/src/sixlowpan/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/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/sixlowpan/bindings/modulegen__gcc_ILP32.py ns-3.25/src/sixlowpan/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -126,6 +126,8 @@
     module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## 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]
@@ -148,10 +150,14 @@
     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::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'))
     ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1 [class]
@@ -256,6 +262,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> >'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -268,6 +278,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> >'])
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice [class]
     module.add_class('SixLowPanNetDevice', parent=root_module['ns3::NetDevice'])
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::DropReason [enumeration]
@@ -396,8 +408,10 @@
     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__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_Ns3SixLowPanFrag1_methods(root_module, root_module['ns3::SixLowPanFrag1'])
     register_Ns3SixLowPanFragN_methods(root_module, root_module['ns3::SixLowPanFragN'])
@@ -440,12 +454,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_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3SixLowPanNetDevice_methods(root_module, root_module['ns3::SixLowPanNetDevice'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1061,6 +1078,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', 
@@ -1076,6 +1098,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', 
@@ -1252,7 +1279,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', 
@@ -2343,11 +2370,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', 
@@ -2407,6 +2444,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', 
@@ -2654,6 +2695,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([])
@@ -2678,6 +2731,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([])
@@ -4459,7 +4524,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')], 
@@ -4586,6 +4651,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]
@@ -4943,10 +5094,31 @@
                    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_Ns3SixLowPanNetDevice_methods(root_module, cls):
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::SixLowPanNetDevice() [constructor]
     cls.add_constructor([])
-    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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]
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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/sixlowpan/bindings/modulegen__gcc_LP64.py ns-3.25/src/sixlowpan/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -126,6 +126,8 @@
     module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
     ## 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]
@@ -148,10 +150,14 @@
     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::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'))
     ## sixlowpan-header.h (module 'sixlowpan'): ns3::SixLowPanFrag1 [class]
@@ -256,6 +262,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> >'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
@@ -268,6 +278,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> >'])
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice [class]
     module.add_class('SixLowPanNetDevice', parent=root_module['ns3::NetDevice'])
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::DropReason [enumeration]
@@ -396,8 +408,10 @@
     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__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_Ns3SixLowPanFrag1_methods(root_module, root_module['ns3::SixLowPanFrag1'])
     register_Ns3SixLowPanFragN_methods(root_module, root_module['ns3::SixLowPanFragN'])
@@ -440,12 +454,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_Ns3NormalRandomVariable_methods(root_module, root_module['ns3::NormalRandomVariable'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3SixLowPanNetDevice_methods(root_module, root_module['ns3::SixLowPanNetDevice'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1061,6 +1078,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', 
@@ -1076,6 +1098,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', 
@@ -1252,7 +1279,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', 
@@ -2343,11 +2370,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', 
@@ -2407,6 +2444,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', 
@@ -2654,6 +2695,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([])
@@ -2678,6 +2731,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([])
@@ -4459,7 +4524,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')], 
@@ -4586,6 +4651,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]
@@ -4943,10 +5094,31 @@
                    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_Ns3SixLowPanNetDevice_methods(root_module, cls):
     ## sixlowpan-net-device.h (module 'sixlowpan'): ns3::SixLowPanNetDevice::SixLowPanNetDevice() [constructor]
     cls.add_constructor([])
-    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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]
+    ## sixlowpan-net-device.h (module 'sixlowpan'): void ns3::SixLowPanNetDevice::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/sixlowpan/doc/sixlowpan.rst ns-3.25/src/sixlowpan/doc/sixlowpan.rst
--- ns-3.24.1/src/sixlowpan/doc/sixlowpan.rst	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/doc/sixlowpan.rst	2016-03-23 21:36:53.000000000 -0700
@@ -62,8 +62,8 @@
 The CompressionThreshold attribute is similar to Contiki's SICSLOWPAN_CONF_MIN_MAC_PAYLOAD
 option. If a compressed packet size is less than the threshold, the uncompressed version is
 used (plus one byte for the correct dispatch header).
-This option is useful only when a MAC with specific requirement for minimum frame size is 
-used (e.g., ContikiMAC).
+This option is useful when a MAC requires a minimum frame size (e.g., ContikiMAC) and the 
+compression would violate the requirement.
 
 The last two attributes are needed to use the module with a NetDevice other than 802.15.4, as
 neither IANA or IEEE did reserve an EtherType for 6LoWPAN. As a consequence there might be a
diff -Naur ns-3.24.1/src/sixlowpan/examples/example-ping-lr-wpan.cc ns-3.25/src/sixlowpan/examples/example-ping-lr-wpan.cc
--- ns-3.24.1/src/sixlowpan/examples/example-ping-lr-wpan.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/examples/example-ping-lr-wpan.cc	2016-03-23 21:36:53.000000000 -0700
@@ -22,7 +22,7 @@
 #include <fstream>
 #include "ns3/core-module.h"
 #include "ns3/internet-module.h"
-#include "ns3/applications-module.h"
+#include "ns3/internet-apps-module.h"
 #include "ns3/ipv6-static-routing-helper.h"
 #include "ns3/mobility-module.h"
 #include "ns3/spectrum-module.h"
diff -Naur ns-3.24.1/src/sixlowpan/examples/example-sixlowpan.cc ns-3.25/src/sixlowpan/examples/example-sixlowpan.cc
--- ns-3.24.1/src/sixlowpan/examples/example-sixlowpan.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/examples/example-sixlowpan.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-static-routing-helper.h"
 
 #include "ns3/ipv6-routing-table-entry.h"
diff -Naur ns-3.24.1/src/sixlowpan/examples/wscript ns-3.25/src/sixlowpan/examples/wscript
--- ns-3.24.1/src/sixlowpan/examples/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -5,9 +5,9 @@
         return;
 
     obj = bld.create_ns3_program('example-sixlowpan',
-                                 ['network', 'sixlowpan', 'internet', 'csma', 'applications'])
+                                 ['network', 'sixlowpan', 'internet', 'csma', 'internet-apps'])
     obj.source = 'example-sixlowpan.cc'
     
     obj = bld.create_ns3_program('example-ping-lr-wpan',
-                                 ['network', 'sixlowpan', 'internet', 'lr-wpan', 'applications'])
+                                 ['network', 'sixlowpan', 'internet', 'lr-wpan', 'internet-apps'])
     obj.source = 'example-ping-lr-wpan.cc'
diff -Naur ns-3.24.1/src/sixlowpan/model/sixlowpan-net-device.cc ns-3.25/src/sixlowpan/model/sixlowpan-net-device.cc
--- ns-3.24.1/src/sixlowpan/model/sixlowpan-net-device.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/model/sixlowpan-net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -437,13 +437,25 @@
       protocolNumber = m_etherType;
     }
 
-  if (m_useIphc)
+  if (origPacketSize > m_compressionThreshold)
     {
-      origHdrSize += CompressLowPanIphc (packet, m_netDevice->GetAddress (), dest);
+      if (m_useIphc)
+        {
+          NS_LOG_LOGIC ("Compressing packet using IPHC");
+          origHdrSize += CompressLowPanIphc (packet, m_netDevice->GetAddress (), dest);
+        }
+      else
+        {
+          NS_LOG_LOGIC ("Compressing packet using HC1");
+          origHdrSize += CompressLowPanHc1 (packet, m_netDevice->GetAddress (), dest);
+        }
     }
   else
     {
-      origHdrSize += CompressLowPanHc1 (packet, m_netDevice->GetAddress (), dest);
+      NS_LOG_LOGIC ("Compressed packet too short, using uncompressed one");
+      packet = origPacket;
+      SixLowPanIpv6 ipv6UncompressedHdr;
+      packet->AddHeader (ipv6UncompressedHdr);
     }
 
   if ( packet->GetSize () > m_netDevice->GetMtu () )
@@ -471,14 +483,6 @@
     }
   else
     {
-      if (packet->GetSize () < m_compressionThreshold)
-        {
-          NS_LOG_LOGIC ("Compressed packet too short, using uncompressed one");
-          packet = origPacket;
-          SixLowPanIpv6 ipv6UncompressedHdr;
-          packet->AddHeader (ipv6UncompressedHdr);
-        }
-
       m_txTrace (packet, m_node->GetObject<SixLowPanNetDevice> (), GetIfIndex ());
       if (doSendFrom)
         {
@@ -1406,7 +1410,7 @@
 
   uint32_t blobSize;
   uint8_t blobData[260];
-  blobSize = encoding.CopyBlob (blobData + 2, 260);
+  blobSize = encoding.CopyBlob (blobData + 2, 260-2);
   uint8_t paddingSize = 0;
 
   uint8_t actualEncodedHeaderType = encoding.GetEid ();
@@ -1525,6 +1529,10 @@
           blobData [0] = encoding.GetNextHeader ();
         }
       blobData [1] = 0;
+
+      blob.AddAtStart (blobSize + 2);
+      blob.Begin ().Write (blobData, blobSize + 2);
+
       fragHeader.Deserialize (blob.Begin ());
       packet->AddHeader (fragHeader);
       break;
diff -Naur ns-3.24.1/src/sixlowpan/test/sixlowpan-fragmentation-test.cc ns-3.25/src/sixlowpan/test/sixlowpan-fragmentation-test.cc
--- ns-3.24.1/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -35,14 +35,8 @@
 #include "ns3/inet-socket-address.h"
 #include "ns3/boolean.h"
 
-#include "ns3/ipv6-static-routing.h"
-#include "ns3/ipv6-list-routing.h"
-#include "ns3/inet6-socket-address.h"
 #include "ns3/sixlowpan-net-device.h"
-
-#include "ns3/udp-l4-protocol.h"
-
-#include "ns3/ipv6-l3-protocol.h"
+#include "ns3/internet-stack-helper.h"
 #include "ns3/icmpv6-l4-protocol.h"
 
 #include <string>
@@ -51,42 +45,12 @@
 
 using namespace ns3;
 
-class UdpSocketImpl;
-
-static void
-AddInternetStack (Ptr<Node> node)
-{
-  //IPV6
-  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
-
-  //Routing for Ipv6
-  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
-  ipv6->SetRoutingProtocol (ipv6Routing);
-  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
-  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
-  node->AggregateObject (ipv6);
-
-  //ICMPv6
-  Ptr<Icmpv6L4Protocol> icmp6 = CreateObject<Icmpv6L4Protocol> ();
-  node->AggregateObject (icmp6);
-
-  //Ipv6 Extensions
-  ipv6->RegisterExtensions ();
-  ipv6->RegisterOptions ();
-
-  //UDP
-  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  node->AggregateObject (udp);
-}
-
-
 class SixlowpanFragmentationTest : public TestCase
 {
   Ptr<Packet> m_sentPacketClient;
   Ptr<Packet> m_receivedPacketClient;
   Ptr<Packet> m_receivedPacketServer;
 
-
   Ptr<Socket> m_socketServer;
   Ptr<Socket> m_socketClient;
   uint32_t m_dataSize;
@@ -122,6 +86,9 @@
   m_socketServer = 0;
   m_data = 0;
   m_dataSize = 0;
+  m_size = 0;
+  m_icmpType = 0;
+  m_icmpCode = 0;
 }
 
 SixlowpanFragmentationTest::~SixlowpanFragmentationTest ()
@@ -256,12 +223,13 @@
 SixlowpanFragmentationTest::DoRun (void)
 {
   // Create topology
-
+  InternetStackHelper internet;
+  internet.SetIpv4StackInstall (false);
   Packet::EnablePrinting ();
 
   // Receiver Node
   Ptr<Node> serverNode = CreateObject<Node> ();
-  AddInternetStack (serverNode);
+  internet.Install (serverNode);
   Ptr<SimpleNetDevice> serverDev;
   Ptr<BinaryErrorSixlowModel> serverDevErrorModel = CreateObject<BinaryErrorSixlowModel> ();
   {
@@ -292,7 +260,7 @@
 
   // Sender Node
   Ptr<Node> clientNode = CreateObject<Node> ();
-  AddInternetStack (clientNode);
+  internet.Install (clientNode);
   Ptr<SimpleNetDevice> clientDev;
   Ptr<BinaryErrorSixlowModel> clientDevErrorModel = CreateObject<BinaryErrorSixlowModel> ();
   {
diff -Naur ns-3.24.1/src/sixlowpan/test/sixlowpan-hc1-test.cc ns-3.25/src/sixlowpan/test/sixlowpan-hc1-test.cc
--- ns-3.24.1/src/sixlowpan/test/sixlowpan-hc1-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/test/sixlowpan-hc1-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,12 +31,7 @@
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/inet6-socket-address.h"
-
-#include "ns3/ipv6-l3-protocol.h"
-#include "ns3/icmpv6-l4-protocol.h"
-#include "ns3/udp-l4-protocol.h"
-#include "ns3/ipv6-list-routing.h"
-#include "ns3/ipv6-static-routing.h"
+#include "ns3/internet-stack-helper.h"
 
 #include "ns3/sixlowpan-net-device.h"
 
@@ -45,29 +40,6 @@
 
 using namespace ns3;
 
-static void
-AddInternetStack6 (Ptr<Node> node)
-{
-  //IPV6
-  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
-  //Routing for Ipv6
-  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
-  ipv6->SetRoutingProtocol (ipv6Routing);
-  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
-  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
-  node->AggregateObject (ipv6);
-  //ICMP
-  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
-  node->AggregateObject (icmp);
-  //Ipv6 Extensions
-  ipv6->RegisterExtensions ();
-  ipv6->RegisterOptions ();
-  //UDP
-  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  node->AggregateObject (udp);
-}
-
-
 class SixlowpanHc1ImplTest : public TestCase
 {
   Ptr<Packet> m_receivedPacket;
@@ -127,10 +99,12 @@
 SixlowpanHc1ImplTest::DoRun (void)
 {
   // Create topology
+  InternetStackHelper internet;
+  internet.SetIpv4StackInstall (false);
 
   // Receiver Node
   Ptr<Node> rxNode = CreateObject<Node> ();
-  AddInternetStack6 (rxNode);
+  internet.Install (rxNode);
   Ptr<SimpleNetDevice> rxDev;
   { // first interface
     rxDev = CreateObject<SimpleNetDevice> ();
@@ -153,7 +127,7 @@
 
   // Sender Node
   Ptr<Node> txNode = CreateObject<Node> ();
-  AddInternetStack6 (txNode);
+  internet.Install (txNode);
   Ptr<SimpleNetDevice> txDev;
   {
     txDev = CreateObject<SimpleNetDevice> ();
diff -Naur ns-3.24.1/src/sixlowpan/test/sixlowpan-iphc-test.cc ns-3.25/src/sixlowpan/test/sixlowpan-iphc-test.cc
--- ns-3.24.1/src/sixlowpan/test/sixlowpan-iphc-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/sixlowpan/test/sixlowpan-iphc-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,12 +31,7 @@
 #include "ns3/log.h"
 #include "ns3/node.h"
 #include "ns3/inet6-socket-address.h"
-
-#include "ns3/ipv6-l3-protocol.h"
-#include "ns3/icmpv6-l4-protocol.h"
-#include "ns3/udp-l4-protocol.h"
-#include "ns3/ipv6-list-routing.h"
-#include "ns3/ipv6-static-routing.h"
+#include "ns3/internet-stack-helper.h"
 
 #include "ns3/sixlowpan-net-device.h"
 
@@ -45,29 +40,6 @@
 
 using namespace ns3;
 
-static void
-AddInternetStack6 (Ptr<Node> node)
-{
-  //IPV6
-  Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> ();
-  //Routing for Ipv6
-  Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> ();
-  ipv6->SetRoutingProtocol (ipv6Routing);
-  Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> ();
-  ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0);
-  node->AggregateObject (ipv6);
-  //ICMP
-  Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> ();
-  node->AggregateObject (icmp);
-  //Ipv6 Extensions
-  ipv6->RegisterExtensions ();
-  ipv6->RegisterOptions ();
-  //UDP
-  Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
-  node->AggregateObject (udp);
-}
-
-
 class SixlowpanIphcImplTest : public TestCase
 {
   Ptr<Packet> m_receivedPacket;
@@ -127,10 +99,12 @@
 SixlowpanIphcImplTest::DoRun (void)
 {
   // Create topology
+  InternetStackHelper internet;
+  internet.SetIpv4StackInstall (false);
 
   // Receiver Node
   Ptr<Node> rxNode = CreateObject<Node> ();
-  AddInternetStack6 (rxNode);
+  internet.Install (rxNode);
   Ptr<SimpleNetDevice> rxDev;
   { // first interface
     rxDev = CreateObject<SimpleNetDevice> ();
@@ -152,7 +126,7 @@
 
   // Sender Node
   Ptr<Node> txNode = CreateObject<Node> ();
-  AddInternetStack6 (txNode);
+  internet.Install (txNode);
   Ptr<SimpleNetDevice> txDev;
   {
     txDev = CreateObject<SimpleNetDevice> ();
diff -Naur ns-3.24.1/src/spectrum/bindings/callbacks_list.py ns-3.25/src/spectrum/bindings/callbacks_list.py
--- ns-3.24.1/src/spectrum/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/bindings/callbacks_list.py	2016-03-23 21:36:52.000000000 -0700
@@ -6,4 +6,5 @@
     ['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/spectrum/bindings/modulegen__gcc_ILP32.py ns-3.25/src/spectrum/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/spectrum/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:52.000000000 -0700
@@ -130,6 +130,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'])
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper [class]
     module.add_class('TvSpectrumTransmitterHelper')
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper::Region [enumeration]
@@ -152,8 +154,6 @@
     module.add_class('Vector3D', import_from_module='ns.core')
     ## waveform-generator-helper.h (module 'spectrum'): ns3::WaveformGeneratorHelper [class]
     module.add_class('WaveformGeneratorHelper')
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory [class]
-    module.add_class('WifiSpectrumValue5MhzFactory', allow_subclassing=True)
     ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper [class]
     module.add_class('WifiSpectrumValueHelper', allow_subclassing=True)
     ## empty.h (module 'core'): ns3::empty [class]
@@ -200,10 +200,14 @@
     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::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::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::SpectrumConverter', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumConverter>'], parent=root_module['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]
@@ -256,6 +260,8 @@
     module.add_class('WaveformGenerator', parent=root_module['ns3::SpectrumPhy'])
     ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
     module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory [class]
+    module.add_class('WifiSpectrumValue5MhzFactory', parent=root_module['ns3::WifiSpectrumValueHelper'])
     ## 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]
@@ -270,6 +276,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]
@@ -290,10 +300,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'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -314,6 +330,8 @@
     module.add_enum('State', ['IDLE', 'TX', 'RX'], outer_class=root_module['ns3::HalfDuplexIdealPhy'])
     ## half-duplex-ideal-phy-signal-parameters.h (module 'spectrum'): ns3::HalfDuplexIdealPhySignalParameters [struct]
     module.add_class('HalfDuplexIdealPhySignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
+    ## 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]
@@ -356,6 +374,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]
@@ -372,6 +394,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> >'])
     ## spectrum-error-model.h (module 'spectrum'): ns3::ShannonSpectrumErrorModel [class]
     module.add_class('ShannonSpectrumErrorModel', parent=root_module['ns3::SpectrumErrorModel'])
     ## spectrum-analyzer.h (module 'spectrum'): ns3::SpectrumAnalyzer [class]
@@ -384,6 +408,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'])
     ## vector.h (module 'core'): ns3::Vector2DChecker [class]
     module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector2DValue [class]
@@ -478,6 +504,12 @@
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(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()
@@ -516,14 +548,42 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+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_Ns3AdhocAlohaNoackIdealPhyHelper_methods(root_module, root_module['ns3::AdhocAlohaNoackIdealPhyHelper'])
@@ -572,6 +632,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_Ns3TvSpectrumTransmitterHelper_methods(root_module, root_module['ns3::TvSpectrumTransmitterHelper'])
     register_Ns3TxSpectrumModelInfo_methods(root_module, root_module['ns3::TxSpectrumModelInfo'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -580,7 +641,6 @@
     register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
     register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WaveformGeneratorHelper_methods(root_module, root_module['ns3::WaveformGeneratorHelper'])
-    register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, root_module['ns3::WifiSpectrumValue5MhzFactory'])
     register_Ns3WifiSpectrumValueHelper_methods(root_module, root_module['ns3::WifiSpectrumValueHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
@@ -602,8 +662,10 @@
     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__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__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >'])
     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> >'])
@@ -627,6 +689,7 @@
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3WaveformGenerator_methods(root_module, root_module['ns3::WaveformGenerator'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, root_module['ns3::WifiSpectrumValue5MhzFactory'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AlohaNoackMacHeader_methods(root_module, root_module['ns3::AlohaNoackMacHeader'])
@@ -634,6 +697,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'])
@@ -644,8 +709,11 @@
     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_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -655,6 +723,7 @@
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     register_Ns3HalfDuplexIdealPhy_methods(root_module, root_module['ns3::HalfDuplexIdealPhy'])
     register_Ns3HalfDuplexIdealPhySignalParameters_methods(root_module, root_module['ns3::HalfDuplexIdealPhySignalParameters'])
+    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'])
@@ -675,6 +744,8 @@
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     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_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NonCommunicatingNetDevice_methods(root_module, root_module['ns3::NonCommunicatingNetDevice'])
@@ -683,12 +754,14 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3ShannonSpectrumErrorModel_methods(root_module, root_module['ns3::ShannonSpectrumErrorModel'])
     register_Ns3SpectrumAnalyzer_methods(root_module, root_module['ns3::SpectrumAnalyzer'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
     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_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
@@ -1426,6 +1499,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', 
@@ -1441,6 +1519,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', 
@@ -1617,7 +1700,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', 
@@ -2649,6 +2732,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_Ns3TvSpectrumTransmitterHelper_methods(root_module, cls):
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper::TvSpectrumTransmitterHelper(ns3::TvSpectrumTransmitterHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TvSpectrumTransmitterHelper const &', 'arg0')])
@@ -2980,28 +3097,6 @@
                    [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
     return
 
-def register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, cls):
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory() [constructor]
-    cls.add_constructor([])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory(ns3::WifiSpectrumValue5MhzFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiSpectrumValue5MhzFactory const &', 'arg0')])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateConstant(double psd) [member function]
-    cls.add_method('CreateConstant', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('double', 'psd')], 
-                   is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateRfFilter(uint32_t channel) [member function]
-    cls.add_method('CreateRfFilter', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('uint32_t', 'channel')], 
-                   is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
-    cls.add_method('CreateTxPowerSpectralDensity', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('double', 'txPower'), param('uint32_t', 'channel')], 
-                   is_virtual=True)
-    return
-
 def register_Ns3WifiSpectrumValueHelper_methods(root_module, cls):
     ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper() [constructor]
     cls.add_constructor([])
@@ -3287,18 +3382,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', 
@@ -3339,33 +3449,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
@@ -3587,6 +3709,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([])
@@ -3611,6 +3745,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__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4583,6 +4729,28 @@
                    is_virtual=True)
     return
 
+def register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, cls):
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory(ns3::WifiSpectrumValue5MhzFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumValue5MhzFactory const &', 'arg0')])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateConstant(double psd) [member function]
+    cls.add_method('CreateConstant', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'psd')], 
+                   is_virtual=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateRfFilter(uint32_t channel) [member function]
+    cls.add_method('CreateRfFilter', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'channel')], 
+                   is_virtual=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+    cls.add_method('CreateTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'txPower'), param('uint32_t', 'channel')], 
+                   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', 
@@ -4817,6 +4985,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([])
@@ -5055,6 +5264,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([])
@@ -5111,6 +5353,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', 
@@ -5452,6 +5772,39 @@
     cls.add_instance_attribute('data', 'ns3::Ptr< ns3::Packet >', is_const=False)
     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([])
@@ -6048,6 +6401,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]
@@ -6127,6 +6566,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', 
@@ -6638,6 +7082,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_Ns3ShannonSpectrumErrorModel_methods(root_module, cls):
     ## spectrum-error-model.h (module 'spectrum'): ns3::ShannonSpectrumErrorModel::ShannonSpectrumErrorModel() [constructor]
     cls.add_constructor([])
@@ -6858,6 +7323,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_Ns3Vector2DChecker_methods(root_module, cls):
     ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
     cls.add_constructor([])
@@ -7419,6 +7917,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7437,6 +7936,9 @@
 def register_functions_ns3_addressUtils(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/spectrum/bindings/modulegen__gcc_LP64.py ns-3.25/src/spectrum/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/spectrum/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:52.000000000 -0700
@@ -130,6 +130,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'])
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper [class]
     module.add_class('TvSpectrumTransmitterHelper')
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper::Region [enumeration]
@@ -152,8 +154,6 @@
     module.add_class('Vector3D', import_from_module='ns.core')
     ## waveform-generator-helper.h (module 'spectrum'): ns3::WaveformGeneratorHelper [class]
     module.add_class('WaveformGeneratorHelper')
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory [class]
-    module.add_class('WifiSpectrumValue5MhzFactory', allow_subclassing=True)
     ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper [class]
     module.add_class('WifiSpectrumValueHelper', allow_subclassing=True)
     ## empty.h (module 'core'): ns3::empty [class]
@@ -200,10 +200,14 @@
     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::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::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::SpectrumConverter', 'ns3::empty', 'ns3::DefaultDeleter<ns3::SpectrumConverter>'], parent=root_module['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]
@@ -256,6 +260,8 @@
     module.add_class('WaveformGenerator', parent=root_module['ns3::SpectrumPhy'])
     ## random-variable-stream.h (module 'core'): ns3::WeibullRandomVariable [class]
     module.add_class('WeibullRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory [class]
+    module.add_class('WifiSpectrumValue5MhzFactory', parent=root_module['ns3::WifiSpectrumValueHelper'])
     ## 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]
@@ -270,6 +276,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]
@@ -290,10 +300,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'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -314,6 +330,8 @@
     module.add_enum('State', ['IDLE', 'TX', 'RX'], outer_class=root_module['ns3::HalfDuplexIdealPhy'])
     ## half-duplex-ideal-phy-signal-parameters.h (module 'spectrum'): ns3::HalfDuplexIdealPhySignalParameters [struct]
     module.add_class('HalfDuplexIdealPhySignalParameters', parent=root_module['ns3::SpectrumSignalParameters'])
+    ## 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]
@@ -356,6 +374,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]
@@ -372,6 +394,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> >'])
     ## spectrum-error-model.h (module 'spectrum'): ns3::ShannonSpectrumErrorModel [class]
     module.add_class('ShannonSpectrumErrorModel', parent=root_module['ns3::SpectrumErrorModel'])
     ## spectrum-analyzer.h (module 'spectrum'): ns3::SpectrumAnalyzer [class]
@@ -384,6 +408,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'])
     ## vector.h (module 'core'): ns3::Vector2DChecker [class]
     module.add_class('Vector2DChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## vector.h (module 'core'): ns3::Vector2DValue [class]
@@ -478,6 +504,12 @@
     nested_module = module.add_cpp_namespace('addressUtils')
     register_types_ns3_addressUtils(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()
@@ -516,14 +548,42 @@
 def register_types_ns3_TracedValueCallback(module):
     root_module = module.get_root()
     
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *', u'ns3::TracedValueCallback::Int8')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) **', u'ns3::TracedValueCallback::Int8*')
+    typehandlers.add_type_alias(u'void ( * ) ( int8_t, int8_t ) *&', u'ns3::TracedValueCallback::Int8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
     typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *', u'ns3::TracedValueCallback::Uint16')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) **', u'ns3::TracedValueCallback::Uint16*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint16_t, uint16_t ) *&', u'ns3::TracedValueCallback::Uint16&')
 
 def register_types_ns3_addressUtils(module):
     root_module = module.get_root()
     
 
+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_Ns3AdhocAlohaNoackIdealPhyHelper_methods(root_module, root_module['ns3::AdhocAlohaNoackIdealPhyHelper'])
@@ -572,6 +632,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_Ns3TvSpectrumTransmitterHelper_methods(root_module, root_module['ns3::TvSpectrumTransmitterHelper'])
     register_Ns3TxSpectrumModelInfo_methods(root_module, root_module['ns3::TxSpectrumModelInfo'])
     register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
@@ -580,7 +641,6 @@
     register_Ns3Vector2D_methods(root_module, root_module['ns3::Vector2D'])
     register_Ns3Vector3D_methods(root_module, root_module['ns3::Vector3D'])
     register_Ns3WaveformGeneratorHelper_methods(root_module, root_module['ns3::WaveformGeneratorHelper'])
-    register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, root_module['ns3::WifiSpectrumValue5MhzFactory'])
     register_Ns3WifiSpectrumValueHelper_methods(root_module, root_module['ns3::WifiSpectrumValueHelper'])
     register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
     register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
@@ -602,8 +662,10 @@
     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__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__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >'])
     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> >'])
@@ -627,6 +689,7 @@
     register_Ns3UniformRandomVariable_methods(root_module, root_module['ns3::UniformRandomVariable'])
     register_Ns3WaveformGenerator_methods(root_module, root_module['ns3::WaveformGenerator'])
     register_Ns3WeibullRandomVariable_methods(root_module, root_module['ns3::WeibullRandomVariable'])
+    register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, root_module['ns3::WifiSpectrumValue5MhzFactory'])
     register_Ns3ZetaRandomVariable_methods(root_module, root_module['ns3::ZetaRandomVariable'])
     register_Ns3ZipfRandomVariable_methods(root_module, root_module['ns3::ZipfRandomVariable'])
     register_Ns3AlohaNoackMacHeader_methods(root_module, root_module['ns3::AlohaNoackMacHeader'])
@@ -634,6 +697,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'])
@@ -644,8 +709,11 @@
     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_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -655,6 +723,7 @@
     register_Ns3GammaRandomVariable_methods(root_module, root_module['ns3::GammaRandomVariable'])
     register_Ns3HalfDuplexIdealPhy_methods(root_module, root_module['ns3::HalfDuplexIdealPhy'])
     register_Ns3HalfDuplexIdealPhySignalParameters_methods(root_module, root_module['ns3::HalfDuplexIdealPhySignalParameters'])
+    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'])
@@ -675,6 +744,8 @@
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     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_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
     register_Ns3NonCommunicatingNetDevice_methods(root_module, root_module['ns3::NonCommunicatingNetDevice'])
@@ -683,12 +754,14 @@
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3ShannonSpectrumErrorModel_methods(root_module, root_module['ns3::ShannonSpectrumErrorModel'])
     register_Ns3SpectrumAnalyzer_methods(root_module, root_module['ns3::SpectrumAnalyzer'])
     register_Ns3SpectrumChannel_methods(root_module, root_module['ns3::SpectrumChannel'])
     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_Ns3Vector2DChecker_methods(root_module, root_module['ns3::Vector2DChecker'])
     register_Ns3Vector2DValue_methods(root_module, root_module['ns3::Vector2DValue'])
     register_Ns3Vector3DChecker_methods(root_module, root_module['ns3::Vector3DChecker'])
@@ -1426,6 +1499,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', 
@@ -1441,6 +1519,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', 
@@ -1617,7 +1700,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', 
@@ -2649,6 +2732,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_Ns3TvSpectrumTransmitterHelper_methods(root_module, cls):
     ## tv-spectrum-transmitter-helper.h (module 'spectrum'): ns3::TvSpectrumTransmitterHelper::TvSpectrumTransmitterHelper(ns3::TvSpectrumTransmitterHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TvSpectrumTransmitterHelper const &', 'arg0')])
@@ -2980,28 +3097,6 @@
                    [param('ns3::Ptr< ns3::SpectrumValue >', 'txPsd')])
     return
 
-def register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, cls):
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory() [constructor]
-    cls.add_constructor([])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory(ns3::WifiSpectrumValue5MhzFactory const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::WifiSpectrumValue5MhzFactory const &', 'arg0')])
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateConstant(double psd) [member function]
-    cls.add_method('CreateConstant', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('double', 'psd')], 
-                   is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateRfFilter(uint32_t channel) [member function]
-    cls.add_method('CreateRfFilter', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('uint32_t', 'channel')], 
-                   is_virtual=True)
-    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
-    cls.add_method('CreateTxPowerSpectralDensity', 
-                   'ns3::Ptr< ns3::SpectrumValue >', 
-                   [param('double', 'txPower'), param('uint32_t', 'channel')], 
-                   is_virtual=True)
-    return
-
 def register_Ns3WifiSpectrumValueHelper_methods(root_module, cls):
     ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValueHelper::WifiSpectrumValueHelper() [constructor]
     cls.add_constructor([])
@@ -3287,18 +3382,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', 
@@ -3339,33 +3449,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
@@ -3587,6 +3709,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([])
@@ -3611,6 +3745,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__Ns3SpectrumConverter_Ns3Empty_Ns3DefaultDeleter__lt__ns3SpectrumConverter__gt___methods(root_module, cls):
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::SpectrumConverter, ns3::empty, ns3::DefaultDeleter<ns3::SpectrumConverter> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
@@ -4583,6 +4729,28 @@
                    is_virtual=True)
     return
 
+def register_Ns3WifiSpectrumValue5MhzFactory_methods(root_module, cls):
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory() [constructor]
+    cls.add_constructor([])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::WifiSpectrumValue5MhzFactory::WifiSpectrumValue5MhzFactory(ns3::WifiSpectrumValue5MhzFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::WifiSpectrumValue5MhzFactory const &', 'arg0')])
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateConstant(double psd) [member function]
+    cls.add_method('CreateConstant', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'psd')], 
+                   is_virtual=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateRfFilter(uint32_t channel) [member function]
+    cls.add_method('CreateRfFilter', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('uint32_t', 'channel')], 
+                   is_virtual=True)
+    ## wifi-spectrum-value-helper.h (module 'spectrum'): ns3::Ptr<ns3::SpectrumValue> ns3::WifiSpectrumValue5MhzFactory::CreateTxPowerSpectralDensity(double txPower, uint32_t channel) [member function]
+    cls.add_method('CreateTxPowerSpectralDensity', 
+                   'ns3::Ptr< ns3::SpectrumValue >', 
+                   [param('double', 'txPower'), param('uint32_t', 'channel')], 
+                   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', 
@@ -4817,6 +4985,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([])
@@ -5055,6 +5264,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([])
@@ -5111,6 +5353,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', 
@@ -5452,6 +5772,39 @@
     cls.add_instance_attribute('data', 'ns3::Ptr< ns3::Packet >', is_const=False)
     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([])
@@ -6048,6 +6401,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]
@@ -6127,6 +6566,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', 
@@ -6638,6 +7082,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_Ns3ShannonSpectrumErrorModel_methods(root_module, cls):
     ## spectrum-error-model.h (module 'spectrum'): ns3::ShannonSpectrumErrorModel::ShannonSpectrumErrorModel() [constructor]
     cls.add_constructor([])
@@ -6858,6 +7323,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_Ns3Vector2DChecker_methods(root_module, cls):
     ## vector.h (module 'core'): ns3::Vector2DChecker::Vector2DChecker() [constructor]
     cls.add_constructor([])
@@ -7419,6 +7917,7 @@
     register_functions_ns3_Hash(module.get_submodule('Hash'), root_module)
     register_functions_ns3_TracedValueCallback(module.get_submodule('TracedValueCallback'), root_module)
     register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
+    register_functions_ns3_internal(module.get_submodule('internal'), root_module)
     return
 
 def register_functions_ns3_FatalImpl(module, root_module):
@@ -7437,6 +7936,9 @@
 def register_functions_ns3_addressUtils(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/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc ns-3.25/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc
--- ns-3.24.1/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2016-03-23 21:36:52.000000000 -0700
@@ -61,6 +61,8 @@
 
 
 /**
+ * \ingroup spectrum
+ *
  * Store the last pathloss value for each TX-RX pair. This is an
  * example of how the PathlossTrace (provided by some SpectrumChannel
  * implementations) work. 
@@ -87,7 +89,7 @@
   void Print ();
 
 private:
-  std::map<uint32_t, std::map<uint32_t, double> > m_pathlossMap;
+  std::map<uint32_t, std::map<uint32_t, double> > m_pathlossMap; //!< Path loss map
 };
 
 void
diff -Naur ns-3.24.1/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h ns-3.25/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h
--- ns-3.24.1/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -138,13 +138,13 @@
 
 
 protected:
-  ObjectFactory m_phy;
-  ObjectFactory m_device;
-  ObjectFactory m_queue;
-  ObjectFactory m_antenna;
-  Ptr<SpectrumChannel> m_channel;
-  Ptr<SpectrumValue> m_txPsd;
-  Ptr<SpectrumValue> m_noisePsd;
+  ObjectFactory m_phy;      //!< Object factory for the phy objects
+  ObjectFactory m_device;   //!< Object factory for the NetDevice objects
+  ObjectFactory m_queue;    //!< Object factory for the Queue objects
+  ObjectFactory m_antenna;  //!< Object factory for the Antenna objects
+  Ptr<SpectrumChannel> m_channel; //!< Channel
+  Ptr<SpectrumValue> m_txPsd;     //!< Tx power spectral density
+  Ptr<SpectrumValue> m_noisePsd;  //!< Noise power spectral density
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/helper/spectrum-analyzer-helper.cc ns-3.25/src/spectrum/helper/spectrum-analyzer-helper.cc
--- ns-3.24.1/src/spectrum/helper/spectrum-analyzer-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/spectrum-analyzer-helper.cc	2016-03-23 21:36:52.000000000 -0700
@@ -39,6 +39,12 @@
 
 NS_LOG_COMPONENT_DEFINE ("SpectrumAnalyzerHelper");
 
+/**
+ * \ingroup spectrum
+ * \brief Writes a report of the Average Power Spectral Density
+ * \param streamWrapper the wrapper to the output stream
+ * \param avgPowerSpectralDensity Average Power Spectral Density
+ */
 static void
 WriteAveragePowerSpectralDensityReport (Ptr<OutputStreamWrapper> streamWrapper,
                                         Ptr<const SpectrumValue> avgPowerSpectralDensity)
diff -Naur ns-3.24.1/src/spectrum/helper/spectrum-analyzer-helper.h ns-3.25/src/spectrum/helper/spectrum-analyzer-helper.h
--- ns-3.24.1/src/spectrum/helper/spectrum-analyzer-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/spectrum-analyzer-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -39,7 +39,7 @@
 
 /**
  * \ingroup spectrum
- *
+ * \brief Class to allow the Spectrum Analysis
  */
 class SpectrumAnalyzerHelper
 {
@@ -48,14 +48,14 @@
   ~SpectrumAnalyzerHelper ();
 
   /**
-   * set the SpectrumChannel that will be used by SpectrumPhy instances created by this helper
+   * Set the SpectrumChannel that will be used by SpectrumPhy instances created by this helper
    *
    * @param channel
    */
   void SetChannel (Ptr<SpectrumChannel> channel);
 
   /**
-   * set the SpectrumChannel that will be used by SpectrumPhy instances created by this helper
+   * Set the SpectrumChannel that will be used by SpectrumPhy instances created by this helper
    *
    * @param channelName
    */
@@ -141,13 +141,13 @@
 
 
 private:
-  ObjectFactory m_phy;
-  ObjectFactory m_device;
-  ObjectFactory m_antenna;
-
-  Ptr<SpectrumChannel> m_channel;
-  Ptr<SpectrumModel> m_rxSpectrumModel;
-  std::string m_prefix;
+  ObjectFactory m_phy;      //!< Object factory for the phy objects
+  ObjectFactory m_device;   //!< Object factory for the NetDevice objects
+  ObjectFactory m_antenna;  //!< Object factory for the Antenna objects
+
+  Ptr<SpectrumChannel> m_channel; //!< Channel
+  Ptr<SpectrumModel> m_rxSpectrumModel; //!< Spectrum model
+  std::string m_prefix; //!< Prefix for the output files
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/helper/spectrum-helper.h ns-3.25/src/spectrum/helper/spectrum-helper.h
--- ns-3.24.1/src/spectrum/helper/spectrum-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/spectrum-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -39,11 +39,19 @@
 
 /**
  * \ingroup spectrum
- *
+ * \brief Setup a SpectrumChannel
  */
 class SpectrumChannelHelper
 {
 public:
+  /**
+   * \brief Setup a default SpectrumChannel. The Default mode is:
+   * Channel: "ns3::SingleModelSpectrumChannel",
+   * PropagationDelay: "ns3::ConstantSpeedPropagationDelayModel", and
+   * SpectrumPropagationLoss: "ns3::FriisSpectrumPropagationLossModel".
+   *
+   * \returns a Default-configured SpectrumChannelHelper
+   */
   static SpectrumChannelHelper Default ();
 
   /**
@@ -190,10 +198,10 @@
   Ptr<SpectrumChannel> Create (void) const;
 
 private:
-  Ptr<SpectrumPropagationLossModel> m_spectrumPropagationLossModel;
-  Ptr<PropagationLossModel> m_propagationLossModel;
-  ObjectFactory m_propagationDelay;
-  ObjectFactory m_channel;
+  Ptr<SpectrumPropagationLossModel> m_spectrumPropagationLossModel; //!< Spectrum propagation loss model
+  Ptr<PropagationLossModel> m_propagationLossModel; //!< Propagation loss model
+  ObjectFactory m_propagationDelay; //!< Propagation delay
+  ObjectFactory m_channel; //!< Channel
 };
 
 
@@ -201,7 +209,7 @@
 /**
  * \ingroup spectrum
  *
- * create and configure several SpectrumPhy instances and connect them to a channel.
+ * Create and configure several SpectrumPhy instances and connect them to a channel.
  */
 class SpectrumPhyHelper
 {
@@ -269,8 +277,8 @@
 
 
 private:
-  ObjectFactory m_phy;
-  Ptr<SpectrumChannel> m_channel;
+  ObjectFactory m_phy;      //!< Object factory for the phy objects
+  Ptr<SpectrumChannel> m_channel; //!< Channel
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/helper/tv-spectrum-transmitter-helper.cc ns-3.25/src/spectrum/helper/tv-spectrum-transmitter-helper.cc
--- ns-3.24.1/src/spectrum/helper/tv-spectrum-transmitter-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/tv-spectrum-transmitter-helper.cc	2016-03-23 21:36:52.000000000 -0700
@@ -34,8 +34,9 @@
 
 NS_LOG_COMPONENT_DEFINE ("TvSpectrumTransmitterHelper");
 
-// NORTH AMERICA: 84 elements (index 0 - 83); valid channels = 2 - 83
+/// NORTH AMERICA: 84 elements (index 0 - 83); valid channels = 2 - 83
 const int northAmericaArrayLength = 84;
+/// NORTH AMERICA start frequencies
 const double northAmericaStartFrequencies[84] = {0, 0, 54e6, 60e6, 66e6, 76e6, 
   82e6, 174e6, 180e6, 186e6, 192e6, 198e6, 204e6, 210e6, 470e6, 476e6, 482e6, 
   488e6, 494e6, 500e6, 506e6, 512e6, 518e6, 524e6, 530e6, 536e6, 542e6, 548e6, 
@@ -45,6 +46,7 @@
   752e6, 758e6, 764e6, 770e6, 776e6, 782e6, 788e6, 794e6, 800e6, 806e6, 812e6, 
   818e6, 824e6, 830e6, 836e6, 842e6, 848e6, 854e6, 860e6, 866e6, 872e6, 878e6, 
   884e6};
+/// NORTH AMERICA end frequencies
 const double northAmericaEndFrequencies[84] = {0, 0, 60e6, 66e6, 72e6, 82e6, 
   88e6, 180e6, 186e6, 192e6, 198e6, 204e6, 210e6, 216e6, 476e6, 482e6, 488e6, 
   494e6, 500e6, 506e6, 512e6, 518e6, 524e6, 530e6, 536e6, 542e6, 548e6, 554e6, 
@@ -55,8 +57,9 @@
   824e6, 830e6, 836e6, 842e6, 848e6, 854e6, 860e6, 866e6, 872e6, 878e6, 884e6, 
   890e6};
 
-// EUROPE: 70 elements (index 0 - 69); valid channels = 5 - 12, 21 - 69
+/// EUROPE: 70 elements (index 0 - 69); valid channels = 5 - 12, 21 - 69
 const int europeArrayLength = 70;
+/// EUROPE start frequencies
 const double europeStartFrequencies[70] = {0, 0, 0, 0, 0, 174e6, 181e6, 188e6, 
   195e6, 202e6, 209e6, 216e6, 223e6, 0, 0, 0, 0, 0, 0, 0, 0, 470e6, 478e6, 
   486e6, 494e6, 502e6, 510e6, 518e6, 526e6, 534e6, 542e6, 550e6, 558e6, 566e6, 
@@ -64,6 +67,7 @@
   662e6, 670e6, 678e6, 686e6, 694e6, 702e6, 710e6, 718e6, 726e6, 734e6, 742e6, 
   750e6, 758e6, 766e6, 774e6, 782e6, 790e6, 798e6, 806e6, 814e6, 822e6, 830e6, 
   838e6, 846e6, 854e6};
+/// EUROPE end frequencies
 const double europeEndFrequencies[70] = {0, 0, 0, 0, 0, 181e6, 188e6, 195e6, 
   202e6, 209e6, 216e6, 223e6, 230e6, 0, 0, 0, 0, 0, 0, 0, 0, 478e6, 486e6, 
   494e6, 502e6, 510e6, 518e6, 526e6, 534e6, 542e6, 550e6, 558e6, 566e6, 574e6, 
@@ -72,8 +76,9 @@
   758e6, 766e6, 774e6, 782e6, 790e6, 798e6, 806e6, 814e6, 822e6, 830e6, 838e6, 
   846e6, 854e6, 862e6};
 
-// JAPAN: 63 elements (index 0 - 62); valid channels = 1 - 62
+/// JAPAN: 63 elements (index 0 - 62); valid channels = 1 - 62
 const int japanArrayLength = 63;
+/// JAPAN start frequencies
 const double japanStartFrequencies[63] = {0, 90e6, 96e6, 102e6, 170e6, 176e6, 
   182e6, 188e6, 192e6, 198e6, 204e6, 210e6, 216e6, 470e6, 476e6, 482e6, 488e6, 
   494e6, 500e6, 506e6, 512e6, 518e6, 524e6, 530e6, 536e6, 542e6, 548e6, 554e6, 
@@ -81,6 +86,7 @@
   626e6, 632e6, 638e6, 644e6, 650e6, 656e6, 662e6, 668e6, 674e6, 680e6, 686e6, 
   692e6, 698e6, 704e6, 710e6, 716e6, 722e6, 728e6, 734e6, 740e6, 746e6, 752e6, 
   758e6, 764e6};
+/// JAPAN end frequencies
 const double japanEndFrequencies[63] = {0, 96e6, 102e6, 108e6, 176e6, 182e6, 
   188e6, 194e6, 198e6, 204e6, 210e6, 216e6, 222e6, 476e6, 482e6, 488e6, 494e6, 
   500e6, 506e6, 512e6, 518e6, 524e6, 530e6, 536e6, 542e6, 548e6, 554e6, 560e6, 
diff -Naur ns-3.24.1/src/spectrum/helper/tv-spectrum-transmitter-helper.h ns-3.25/src/spectrum/helper/tv-spectrum-transmitter-helper.h
--- ns-3.24.1/src/spectrum/helper/tv-spectrum-transmitter-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/tv-spectrum-transmitter-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -35,6 +35,8 @@
 #include <ns3/tv-spectrum-transmitter.h>
 #include "ns3/object-factory.h"
 
+class TvHelperDistributionTestCase;
+
 namespace ns3
 {
 
@@ -49,22 +51,25 @@
  * and location.
  *
  * Here is an example of how to use this class:
- *
- * TvSpectrumTransmitterHelper tvTransHelper;
- * tvTransHelper.SetChannel (channel); // provided that user has a Ptr<SpectrumChannel> ready.
- * tvTransHelper.SetAttribute ("StartFrequency", DoubleValue (524e6));
- * tvTransHelper.SetAttribute ("ChannelBandwidth", DoubleValue (6e6));
- * tvTransHelper.SetAttribute ("StartingTime", TimeValue (Seconds (0)));
- * tvTransHelper.SetAttribute ("TransmitDuration", TimeValue (Seconds (0.2)));
- * tvTransHelper.SetAttribute ("BasePsd", DoubleValue (22.22)); 
- * tvTransHelper.SetAttribute ("TvType", EnumValue (TvSpectrumTransmitter::TVTYPE_8VSB));
- * tvTransHelper.SetAttribute ("Antenna", StringValue ("ns3::IsotropicAntennaModel"));
- * tvTransHelper.Install (tvTransmitterNode); //provided that user has a NodeContainer ready.
+ * \code
+   TvSpectrumTransmitterHelper tvTransHelper;
+   tvTransHelper.SetChannel (channel); // provided that user has a Ptr<SpectrumChannel> ready.
+   tvTransHelper.SetAttribute ("StartFrequency", DoubleValue (524e6));
+   tvTransHelper.SetAttribute ("ChannelBandwidth", DoubleValue (6e6));
+   tvTransHelper.SetAttribute ("StartingTime", TimeValue (Seconds (0)));
+   tvTransHelper.SetAttribute ("TransmitDuration", TimeValue (Seconds (0.2)));
+   tvTransHelper.SetAttribute ("BasePsd", DoubleValue (22.22));
+   tvTransHelper.SetAttribute ("TvType", EnumValue (TvSpectrumTransmitter::TVTYPE_8VSB));
+   tvTransHelper.SetAttribute ("Antenna", StringValue ("ns3::IsotropicAntennaModel"));
+   tvTransHelper.Install (tvTransmitterNode); // provided that user has a NodeContainer ready.
+   \endcode
  */
 class TvSpectrumTransmitterHelper
 {
 
 public:
+  friend class ::TvHelperDistributionTestCase;
+
   /**
    * geographical region that TV transmitters are being set up in
    */
@@ -204,7 +209,7 @@
   /**
    * Assigns the stream number for the uniform random number generator to use
    *
-   * @param stream first stream index to use
+   * @param streamNum first stream index to use
    * @return the number of stream indices assigned by this helper
    */
   int64_t AssignStreams (int64_t streamNum);
diff -Naur ns-3.24.1/src/spectrum/helper/waveform-generator-helper.h ns-3.25/src/spectrum/helper/waveform-generator-helper.h
--- ns-3.24.1/src/spectrum/helper/waveform-generator-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/helper/waveform-generator-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -40,6 +40,7 @@
 /**
  * \ingroup spectrum
  *
+ * Create a Waveform generator, which can be used to inject specific noise in the channel.
  */
 class WaveformGeneratorHelper
 {
@@ -134,11 +135,11 @@
 
 
 protected:
-  ObjectFactory m_phy;
-  ObjectFactory m_device;
-  ObjectFactory m_antenna;
-  Ptr<SpectrumChannel> m_channel;
-  Ptr<SpectrumValue> m_txPsd;
+  ObjectFactory m_phy;      //!< Object factory for the phy objects
+  ObjectFactory m_device;   //!< Object factory for the NetDevice objects
+  ObjectFactory m_antenna;  //!< Object factory for the Antenna objects
+  Ptr<SpectrumChannel> m_channel; //!< Channel
+  Ptr<SpectrumValue> m_txPsd;     //!< Tx power spectral density
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/aloha-noack-mac-header.h ns-3.25/src/spectrum/model/aloha-noack-mac-header.h
--- ns-3.24.1/src/spectrum/model/aloha-noack-mac-header.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/aloha-noack-mac-header.h	2016-03-23 21:36:52.000000000 -0700
@@ -30,11 +30,16 @@
 
 /**
  * \ingroup spectrum
+ *  Header for the AlohaNoack NetDevice
  *
  */
 class AlohaNoackMacHeader : public Header
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
   virtual TypeId GetInstanceTypeId (void) const;
   virtual uint32_t GetSerializedSize (void) const;
@@ -42,14 +47,31 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
   virtual void Print (std::ostream &os) const;
 
+  /**
+   * Set the source address
+   * \param source the source address
+   */
   void SetSource (Mac48Address source);
+  /**
+   * Set the destination address
+   * \param destination the destination address
+   */
   void SetDestination (Mac48Address destination);
+
+  /**
+   * Get the source address
+   * \returns the source address
+   */
   Mac48Address GetSource () const;
+  /**
+   * Get the destination address
+   * \returns the destination address
+   */
   Mac48Address GetDestination () const;
 
 private:
-  Mac48Address m_source;
-  Mac48Address m_destination;
+  Mac48Address m_source;      //!< source address
+  Mac48Address m_destination; //!< destination address
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/aloha-noack-net-device.cc ns-3.25/src/spectrum/model/aloha-noack-net-device.cc
--- ns-3.24.1/src/spectrum/model/aloha-noack-net-device.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/aloha-noack-net-device.cc	2016-03-23 21:36:52.000000000 -0700
@@ -35,6 +35,12 @@
 
 NS_LOG_COMPONENT_DEFINE ("AlohaNoackNetDevice");
 
+/**
+ * \brief Output stream operator
+ * \param os output stream
+ * \param state the state to print
+ * \return an output stream
+ */
 std::ostream& operator<< (std::ostream& os, AlohaNoackNetDevice::State state)
 {
   switch (state)
@@ -372,7 +378,7 @@
       else
         {
           NS_LOG_LOGIC ("enqueueing new packet");
-          if (m_queue->Enqueue (packet) == false)
+          if (m_queue->Enqueue (Create<QueueItem> (packet)) == false)
             {
               m_macTxDropTrace (packet);
               sendOk = false;
@@ -383,7 +389,7 @@
     {
       NS_LOG_LOGIC ("deferring TX, enqueueing new packet");
       NS_ASSERT (m_queue);
-      if (m_queue->Enqueue (packet) == false)
+      if (m_queue->Enqueue (Create<QueueItem> (packet)) == false)
         {
           m_macTxDropTrace (packet);
           sendOk = false;
@@ -428,8 +434,9 @@
   NS_ASSERT (m_queue);
   if (m_queue->IsEmpty () == false)
     {
-      m_currentPkt = m_queue->Dequeue ();
-      NS_ASSERT (m_currentPkt);
+      Ptr<QueueItem> item = m_queue->Dequeue ();
+      NS_ASSERT (item);
+      m_currentPkt = item->GetPacket ();
       NS_LOG_LOGIC ("scheduling transmission now");
       Simulator::ScheduleNow (&AlohaNoackNetDevice::StartTransmission, this);
     }
diff -Naur ns-3.24.1/src/spectrum/model/aloha-noack-net-device.h ns-3.25/src/spectrum/model/aloha-noack-net-device.h
--- ns-3.24.1/src/spectrum/model/aloha-noack-net-device.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/aloha-noack-net-device.h	2016-03-23 21:36:52.000000000 -0700
@@ -59,11 +59,20 @@
 class AlohaNoackNetDevice : public NetDevice
 {
 public:
+  /**
+   * State of the NetDevice
+   */
   enum State
   {
-    IDLE, TX, RX
+    IDLE, //!< Idle state
+    TX,   //!< Transmitting state
+    RX    //!< Receiving state
   };
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   AlohaNoackNetDevice ();
@@ -174,37 +183,35 @@
   virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
   virtual bool SupportsSendFrom (void) const;
 
-
-
-
-
 private:
+  /**
+   * Notification of Guard Interval end.
+   */
   void NotifyGuardIntervalEnd ();
   virtual void DoDispose (void);
 
   /**
    * start the transmission of a packet by contacting the PHY layer
-   *
    */
   void StartTransmission ();
 
 
-  Ptr<Queue> m_queue;
+  Ptr<Queue> m_queue; //!< packet queue
 
-  TracedCallback<Ptr<const Packet> > m_macTxTrace;
-  TracedCallback<Ptr<const Packet> > m_macTxDropTrace;
-  TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace;
-  TracedCallback<Ptr<const Packet> > m_macRxTrace;
+  TracedCallback<Ptr<const Packet> > m_macTxTrace;        //!< Tx trace
+  TracedCallback<Ptr<const Packet> > m_macTxDropTrace;    //!< Tx Drop trace
+  TracedCallback<Ptr<const Packet> > m_macPromiscRxTrace; //!< Promiscuous Rx trace
+  TracedCallback<Ptr<const Packet> > m_macRxTrace;        //!< Rx trace
 
-  Ptr<Node>    m_node;
-  Ptr<Channel> m_channel;
+  Ptr<Node>    m_node;    //!< Node owning this NetDevice
+  Ptr<Channel> m_channel; //!< Channel
 
-  Mac48Address m_address;
+  Mac48Address m_address; //!< MAC address
 
-  NetDevice::ReceiveCallback m_rxCallback;
-  NetDevice::PromiscReceiveCallback m_promiscRxCallback;
+  NetDevice::ReceiveCallback m_rxCallback;                //!< Rx callback
+  NetDevice::PromiscReceiveCallback m_promiscRxCallback;  //!< Promiscuous Rx callback
 
-  GenericPhyTxStartCallback m_phyMacTxStartCallback;
+  GenericPhyTxStartCallback m_phyMacTxStartCallback;      //!< Tx Start callback
 
   /**
    * List of callbacks to fire if the link changes state (up or down).
@@ -212,16 +219,13 @@
   TracedCallback<> m_linkChangeCallbacks;
 
 
-  uint32_t m_ifIndex;
-  mutable uint32_t m_mtu;
-  bool m_linkUp;
-
-
-  State m_state;
-
-  Ptr<Packet> m_currentPkt;
-
-  Ptr<Object> m_phy;
+  uint32_t m_ifIndex;     //!< Interface index
+  mutable uint32_t m_mtu; //!< NetDevice MTU
+  bool m_linkUp;          //!< true if the link is up
+
+  State m_state;          //!< State of the NetDevice
+  Ptr<Packet> m_currentPkt;  //!< Current packet
+  Ptr<Object> m_phy;      //!< PHY object
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/constant-spectrum-propagation-loss.h ns-3.25/src/spectrum/model/constant-spectrum-propagation-loss.h
--- ns-3.24.1/src/spectrum/model/constant-spectrum-propagation-loss.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/constant-spectrum-propagation-loss.h	2016-03-23 21:36:52.000000000 -0700
@@ -25,25 +25,40 @@
 
 namespace ns3 {
 
-
+/**
+ * \ingroup spectrum
+ *
+ * A Constant (fixed) propagation loss. The loss is not dependent on the distance.
+ */
 class ConstantSpectrumPropagationLossModel : public SpectrumPropagationLossModel
 {
 public:
   ConstantSpectrumPropagationLossModel ();
   ~ConstantSpectrumPropagationLossModel ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
   virtual Ptr<SpectrumValue> DoCalcRxPowerSpectralDensity (Ptr<const SpectrumValue> txPsd,
                                                            Ptr<const MobilityModel> a,
                                                            Ptr<const MobilityModel> b) const;
-
+  /**
+   * Set the propagation loss
+   * \param lossDb the propagation loss [dB]
+   */
   void SetLossDb (double lossDb);
+  /**
+   * Get the propagation loss
+   * \returns the propagation loss [dB]
+   */
   double GetLossDb () const;
 
 protected:
-  double m_lossDb;
-  double m_lossLinear;
+  double m_lossDb;      //!< Propagation loss [dB]
+  double m_lossLinear;  //!< Propagation loss (linear)
 private:
 };
 
diff -Naur ns-3.24.1/src/spectrum/model/friis-spectrum-propagation-loss.h ns-3.25/src/spectrum/model/friis-spectrum-propagation-loss.h
--- ns-3.24.1/src/spectrum/model/friis-spectrum-propagation-loss.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/friis-spectrum-propagation-loss.h	2016-03-23 21:36:52.000000000 -0700
@@ -32,7 +32,15 @@
 
 /**
  * \ingroup spectrum
+ * \brief Friis spectrum propagation loss model
  *
+ * The propagation loss is calculated according to a simplified version of Friis'
+ * formula in which antenna gains are unitary:
+ *
+ * \f$ L = \frac{4 \pi * d * f}{C^2}\f$
+ *
+ * where C = 3e8 m/s is the light speed in the vacuum. The intended
+ * use is to calculate Prx = Ptx * G
  */
 class FriisSpectrumPropagationLossModel : public SpectrumPropagationLossModel
 {
@@ -41,6 +49,10 @@
   FriisSpectrumPropagationLossModel ();
   ~FriisSpectrumPropagationLossModel ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
 
@@ -51,14 +63,7 @@
 
   /**
    * Return the propagation loss L according to a simplified version of Friis'
-   * formula in which antenna gains are unitary:
-   *
-   *      (4 * pi * d * f) ^ 2
-   * L = ----------------------
-   *               C^2
-   *
-   * where C = 3e8 m/s is the light speed in the vacuum. The intended
-   * use is to calculate Prx = Ptx * G
+   * formula in which antenna gains are unitary
    *
    * @param f frequency in Hz
    * @param d distance in m
@@ -66,10 +71,6 @@
    * @return if Prx < Ptx then return Prx; else return Ptx
    */
   double CalculateLoss (double f, double d) const;
-
-protected:
-  double m_propagationSpeed;
-
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.25/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.24.1/src/spectrum/model/half-duplex-ideal-phy.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/half-duplex-ideal-phy.cc	2016-03-23 21:36:52.000000000 -0700
@@ -71,6 +71,12 @@
   SpectrumPhy::DoDispose ();
 }
 
+/**
+ * \brief Output stream operator
+ * \param os output stream
+ * \param s the state to print
+ * \return an output stream
+ */
 std::ostream& operator<< (std::ostream& os, HalfDuplexIdealPhy::State s)
 {
   switch (s)
diff -Naur ns-3.24.1/src/spectrum/model/half-duplex-ideal-phy.h ns-3.25/src/spectrum/model/half-duplex-ideal-phy.h
--- ns-3.24.1/src/spectrum/model/half-duplex-ideal-phy.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/half-duplex-ideal-phy.h	2016-03-23 21:36:52.000000000 -0700
@@ -84,13 +84,18 @@
 
   /**
    *  PHY states
-   *
    */
   enum State
   {
-    IDLE, TX, RX
+    IDLE, //!< Idle state
+    TX,   //!< Transmitting state
+    RX    //!< Receiving state
   };
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   // inherited from SpectrumPhy
@@ -105,17 +110,17 @@
 
 
   /**
-   * set the Power Spectral Density of outgoing signals in power units
+   * \brief Set the Power Spectral Density of outgoing signals in power units
    * (Watt, Pascal...) per Hz.
    *
-   * @param txPsd
+   * @param txPsd Tx Power Spectral Density
    */
   void SetTxPowerSpectralDensity (Ptr<SpectrumValue> txPsd);
 
   /**
-   *
-   * @param noisePsd the Noise Power Spectral Density in power units
+   * \brief Set the Noise Power Spectral Density in power units
    * (Watt, Pascal...) per Hz.
+   * @param noisePsd the Noise Power Spectral Density
    */
   void SetNoisePowerSpectralDensity (Ptr<const SpectrumValue> noisePsd);
 
@@ -132,29 +137,30 @@
   bool StartTx (Ptr<Packet> p);
 
   /**
-   * set the PHY rate to be used by this PHY.
+   * Set the PHY rate to be used by this PHY.
    *
-   * @param rate
+   * @param rate DataRate
    */
   void SetRate (DataRate rate);
 
   /**
+   * Get the PHY rate to be used by this PHY.
    *
    * @return the PHY rate used by this PHY.
    */
   DataRate GetRate () const;
 
   /**
-   * set the callback for the end of a TX, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * Set the callback for the end of a TX, as part of the
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
   void SetGenericPhyTxEndCallback (GenericPhyTxEndCallback c);
 
   /**
-   * set the callback for the start of RX, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * Set the callback for the start of RX, as part of the
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -162,7 +168,7 @@
 
   /**
    * set the callback for the end of a RX in error, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -170,7 +176,7 @@
 
   /**
    * set the callback for the successful end of a RX, as part of the
-   * interconnections betweenthe PHY and the MAC
+   * interconnections between the PHY and the MAC
    *
    * @param c the callback
    */
@@ -186,52 +192,56 @@
 private:
   virtual void DoDispose (void);
 
+  /**
+   * Change the PHY state
+   * \param newState new state
+   */
   void ChangeState (State newState);
+  /**
+   * End the current Tx
+   */
   void EndTx ();
+  /**
+   * About current Rx
+   */
   void AbortRx ();
+  /**
+   * End current Rx
+   */
   void EndRx ();
 
-  EventId m_endRxEventId;
+  EventId m_endRxEventId; //!< End Rx event
 
-  Ptr<MobilityModel> m_mobility;
-  Ptr<AntennaModel> m_antenna;
-  Ptr<NetDevice> m_netDevice;
-  Ptr<SpectrumChannel> m_channel;
-
-  Ptr<SpectrumValue> m_txPsd;
-  Ptr<const SpectrumValue> m_rxPsd;
-  Ptr<Packet> m_txPacket;
-  Ptr<Packet> m_rxPacket;
-
-  DataRate m_rate;
-
-  State m_state;
-
-  TracedCallback<Ptr<const Packet> > m_phyTxStartTrace;
-  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxStartTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxAbortTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxEndOkTrace;
-  TracedCallback<Ptr<const Packet> > m_phyRxEndErrorTrace;
-
-  GenericPhyTxEndCallback        m_phyMacTxEndCallback;
-  GenericPhyRxStartCallback      m_phyMacRxStartCallback;
-  GenericPhyRxEndErrorCallback   m_phyMacRxEndErrorCallback;
-  GenericPhyRxEndOkCallback      m_phyMacRxEndOkCallback;
+  Ptr<MobilityModel> m_mobility;  //!< Mobility model
+  Ptr<AntennaModel> m_antenna;    //!< Antenna model
+  Ptr<NetDevice> m_netDevice;     //!< NetDevice connected to theis phy
+  Ptr<SpectrumChannel> m_channel; //!< Channel
+
+  Ptr<SpectrumValue> m_txPsd;       //!< Tx power spectral density
+  Ptr<const SpectrumValue> m_rxPsd; //!< Rx power spectral density
+  Ptr<Packet> m_txPacket; //!< Tx packet
+  Ptr<Packet> m_rxPacket; //!< Rx packet
+
+  DataRate m_rate;  //!< Datarate
+  State m_state;    //!< PHY state
+
+  TracedCallback<Ptr<const Packet> > m_phyTxStartTrace; //!< Trace - Tx start
+  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;   //!< Trace - Tx end
+  TracedCallback<Ptr<const Packet> > m_phyRxStartTrace; //!< Trace - Rx start
+  TracedCallback<Ptr<const Packet> > m_phyRxAbortTrace; //!< Trace - Rx abort
+  TracedCallback<Ptr<const Packet> > m_phyRxEndOkTrace; //!< Trace - Tx end (ok)
+  TracedCallback<Ptr<const Packet> > m_phyRxEndErrorTrace;  //!< Trace - Rx end (error)
+
+  GenericPhyTxEndCallback        m_phyMacTxEndCallback;       //!< Callback - Tx end
+  GenericPhyRxStartCallback      m_phyMacRxStartCallback;     //!< Callback - Rx start
+  GenericPhyRxEndErrorCallback   m_phyMacRxEndErrorCallback;  //!< Callback - Rx error
+  GenericPhyRxEndOkCallback      m_phyMacRxEndOkCallback;     //!< Callback - Rx end
 
-  SpectrumInterference m_interference;
+  SpectrumInterference m_interference; //!< Received interference
 
 };
 
-
-
-
-
-
 }
 
 
-
-
-
 #endif /* HALF_DUPLEX_IDEAL_PHY_H */
diff -Naur ns-3.24.1/src/spectrum/model/microwave-oven-spectrum-value-helper.cc ns-3.25/src/spectrum/model/microwave-oven-spectrum-value-helper.cc
--- ns-3.24.1/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2016-03-23 21:36:52.000000000 -0700
@@ -25,10 +25,15 @@
 
 NS_LOG_COMPONENT_DEFINE ("MicrowaveOvenSpectrumValue");
 
+/// Spectrum model for the 5MHz model (model #2)
 static Ptr<SpectrumModel> g_MicrowaveOvenSpectrumModel5Mhz;
+/// Spectrum model for the 6MHz model (model #1)
 static Ptr<SpectrumModel> g_MicrowaveOvenSpectrumModel6Mhz;
 
-
+/**
+ * \ingroup spectrum
+ * Init a static class containing the MWO #2 model (5Mhz)
+ */
 static class MicrowaveOvenSpectrumModel5MhzInitializer
 {
 public:
@@ -47,10 +52,14 @@
     NS_LOG_LOGIC ("bands.size () :" << bands.size ());
     g_MicrowaveOvenSpectrumModel5Mhz = Create<SpectrumModel> (bands);
   }
-} g_MicrowaveOvenSpectrumModel5MhzInitializerInstance;
+} g_MicrowaveOvenSpectrumModel5MhzInitializerInstance; //!< MWO model #2
 
 
 
+/**
+ * \ingroup spectrum
+ * Init a static class containing the MWO #1 model (6Mhz)
+ */
 static class MicrowaveOvenSpectrumModel6MhzInitializer
 {
 public:
@@ -69,7 +78,7 @@
     NS_LOG_LOGIC ("bands.size () :" << bands.size ());
     g_MicrowaveOvenSpectrumModel6Mhz = Create<SpectrumModel> (bands);
   }
-} g_MicrowaveOvenSpectrumModel6MhzInitializerInstance;
+} g_MicrowaveOvenSpectrumModel6MhzInitializerInstance; //!< MWO model #1
 
 
 
diff -Naur ns-3.24.1/src/spectrum/model/multi-model-spectrum-channel.cc ns-3.25/src/spectrum/model/multi-model-spectrum-channel.cc
--- ns-3.24.1/src/spectrum/model/multi-model-spectrum-channel.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/multi-model-spectrum-channel.cc	2016-03-23 21:36:52.000000000 -0700
@@ -46,6 +46,12 @@
 NS_OBJECT_ENSURE_REGISTERED (MultiModelSpectrumChannel);
 
 
+/**
+ * \brief Output stream operator
+ * \param lhs output stream
+ * \param rhs the TxSpectrumModelInfoMap to print
+ * \return an output stream
+ */
 std::ostream& operator<< (std::ostream& lhs, TxSpectrumModelInfoMap_t& rhs)
 {
   for (TxSpectrumModelInfoMap_t::iterator it = rhs.begin ();
diff -Naur ns-3.24.1/src/spectrum/model/multi-model-spectrum-channel.h ns-3.25/src/spectrum/model/multi-model-spectrum-channel.h
--- ns-3.24.1/src/spectrum/model/multi-model-spectrum-channel.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/multi-model-spectrum-channel.h	2016-03-23 21:36:52.000000000 -0700
@@ -33,43 +33,63 @@
 namespace ns3 {
 
 
+/**
+ * \ingroup spectrum
+ * Container: SpectrumModelUid_t, SpectrumConverter
+ */
 typedef std::map<SpectrumModelUid_t, SpectrumConverter> SpectrumConverterMap_t;
 
-
 /**
  * \ingroup spectrum
- *
+ * The Tx spectrum model information. This class is used to convert
+ * one spectrum model into another one.
  */
 class TxSpectrumModelInfo
 {
 public:
+  /**
+   * Constructor.
+   * \param txSpectrumModel the Tx Spectrum model.
+   */
   TxSpectrumModelInfo (Ptr<const SpectrumModel> txSpectrumModel);
 
-  Ptr<const SpectrumModel> m_txSpectrumModel;
-  SpectrumConverterMap_t m_spectrumConverterMap;
+  Ptr<const SpectrumModel> m_txSpectrumModel;     //!< Tx Spectrum model.
+  SpectrumConverterMap_t m_spectrumConverterMap;  //!< Spectrum converter.
 };
 
+
+/**
+ * \ingroup spectrum
+ * Container: SpectrumModelUid_t, TxSpectrumModelInfo
+ */
 typedef std::map<SpectrumModelUid_t, TxSpectrumModelInfo> TxSpectrumModelInfoMap_t;
 
 
 /**
  * \ingroup spectrum
- *
+ * The Rx spectrum model information. This class is used to convert
+ * one spectrum model into another one.
  */
 class RxSpectrumModelInfo
 {
 public:
+  /**
+   * Constructor.
+   * \param rxSpectrumModel the Rx Spectrum model.
+   */
   RxSpectrumModelInfo (Ptr<const SpectrumModel> rxSpectrumModel);
 
-  Ptr<const SpectrumModel> m_rxSpectrumModel;
-  std::set<Ptr<SpectrumPhy> > m_rxPhySet;
+  Ptr<const SpectrumModel> m_rxSpectrumModel;  //!< Rx Spectrum model.
+  std::set<Ptr<SpectrumPhy> > m_rxPhySet;      //!< Container of the Rx Spectrum phy objects.
 };
 
+/**
+ * \ingroup spectrum
+ * Container: SpectrumModelUid_t, RxSpectrumModelInfo
+ */
 typedef std::map<SpectrumModelUid_t, RxSpectrumModelInfo> RxSpectrumModelInfoMap_t;
 
 
-
-
 /**
  * \ingroup spectrum
  *
@@ -89,6 +109,10 @@
 public:
   MultiModelSpectrumChannel ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   // inherited from SpectrumChannel
@@ -103,58 +127,55 @@
   virtual uint32_t GetNDevices (void) const;
   virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
 
+  /**
+   * Get the frequency-dependent propagation loss model.
+   * \returns a pointer to the propagation loss model.
+   */
   virtual Ptr<SpectrumPropagationLossModel> GetSpectrumPropagationLossModel (void);
 
 
 protected:
   void DoDispose ();
 
-
-
 private:
   /**
-   * this method checks if m_rxSpectrumModelInfoMap contains an entry
+   * This method checks if m_rxSpectrumModelInfoMap contains an entry
    * for the given TX SpectrumModel. If such entry exists, it returns
    * an interator pointing to it. If not, it creates a new entry in
    * m_txSpectrumMpodelInfoMap, and returns an iterator to it.
    *
-   * @param txSpectrumModel the TX SpectrumModel  being considered
+   * @param txSpectrumModel The TX SpectrumModel  being considered
    *
-   * @return an iterator pointing to the corresponding entry in m_txSpectrumModelInfoMap
+   * @return An iterator pointing to the corresponding entry in m_txSpectrumModelInfoMap
    */
   TxSpectrumModelInfoMap_t::const_iterator FindAndEventuallyAddTxSpectrumModel (Ptr<const SpectrumModel> txSpectrumModel);
 
   /**
-   * used internally to reschedule transmission after the propagation delay
+   * Used internally to reschedule transmission after the propagation delay.
    *
-   * @param params
-   * @param receiver
+   * @param params The signal paramters.
+   * @param receiver A pointer to the receiver SpectrumPhy.
    */
   virtual void StartRx (Ptr<SpectrumSignalParameters> params, Ptr<SpectrumPhy> receiver);
 
-
-
   /**
-   * propagation delay model to be used with this channel
-   *
+   * Propagation delay model to be used with this channel.
    */
   Ptr<PropagationDelayModel> m_propagationDelay;
 
   /**
-    * single-frequency propagation loss model to be used with this channel
-    *
-    */
+   * Single-frequency propagation loss model to be used with this channel.
+   */
   Ptr<PropagationLossModel> m_propagationLoss;
 
   /**
-   * frequency-dependent propagation loss model to be used with this channel
-   *
+   * Frequency-dependent propagation loss model to be used with this channel.
    */
   Ptr<SpectrumPropagationLossModel> m_spectrumPropagationLoss;
 
 
   /**
-   * data structure holding, for each TX SpectrumModel,  all the
+   * Data structure holding, for each TX SpectrumModel,  all the
    * converters to any RX SpectrumModel, and all the corresponding
    * SpectrumPhy instances.
    *
@@ -163,14 +184,21 @@
 
 
   /**
-   * data structure holding, for each RX spectrum model, all the
+   * Data structure holding, for each RX spectrum model, all the
    * corresponding SpectrumPhy instances.
-   *
    */
   RxSpectrumModelInfoMap_t m_rxSpectrumModelInfoMap;
 
+  /**
+   * Number of devices connected to the channel.
+   */
   uint32_t m_numDevices;
 
+  /**
+   * Maximum loss [dB].
+   *
+   * Any device above this loss is considered out of range.
+   */
   double m_maxLossDb;
 
   /**
diff -Naur ns-3.24.1/src/spectrum/model/non-communicating-net-device.h ns-3.25/src/spectrum/model/non-communicating-net-device.h
--- ns-3.24.1/src/spectrum/model/non-communicating-net-device.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/non-communicating-net-device.h	2016-03-23 21:36:52.000000000 -0700
@@ -54,6 +54,10 @@
 class NonCommunicatingNetDevice : public NetDevice
 {
 public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   NonCommunicatingNetDevice ();
@@ -123,12 +127,10 @@
 private:
   virtual void DoDispose (void);
 
-  Ptr<Node>    m_node;
-  Ptr<Channel> m_channel;
-
-  uint32_t m_ifIndex;
-
-  Ptr<Object> m_phy;
+  Ptr<Node>    m_node;    //!< node this NetDevice is associated to
+  Ptr<Channel> m_channel; //!< Channel used by the NetDevice
+  uint32_t m_ifIndex;     //!< Interface index
+  Ptr<Object> m_phy;      //!< Phy object
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/single-model-spectrum-channel.h ns-3.25/src/spectrum/model/single-model-spectrum-channel.h
--- ns-3.24.1/src/spectrum/model/single-model-spectrum-channel.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/single-model-spectrum-channel.h	2016-03-23 21:36:52.000000000 -0700
@@ -43,9 +43,12 @@
 public:
   SingleModelSpectrumChannel ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
-
   // inherited from SpectrumChannel
   virtual void AddPropagationLossModel (Ptr<PropagationLossModel> loss);
   virtual void AddSpectrumPropagationLossModel (Ptr<SpectrumPropagationLossModel> loss);
@@ -58,16 +61,20 @@
   virtual uint32_t GetNDevices (void) const;
   virtual Ptr<NetDevice> GetDevice (uint32_t i) const;
 
-
+  /// Container: SpectrumPhy objects
   typedef std::vector<Ptr<SpectrumPhy> > PhyList;
 
+  /**
+   * Get the frequency-dependent propagation loss model.
+   * \returns a pointer to the propagation loss model.
+   */
   virtual Ptr<SpectrumPropagationLossModel> GetSpectrumPropagationLossModel (void);
 
 private:
   virtual void DoDispose ();
 
   /**
-   * used internally to reschedule transmission after the propagation delay
+   * Used internally to reschedule transmission after the propagation delay.
    *
    * @param params
    * @param receiver
@@ -75,38 +82,38 @@
   void StartRx (Ptr<SpectrumSignalParameters> params, Ptr<SpectrumPhy> receiver);
 
   /**
-   * list of SpectrumPhy instances attached to
-   * the channel
+   * List of SpectrumPhy instances attached to the channel.
    */
   PhyList m_phyList;
 
   /**
-   * SpectrumModel that this channel instance
-   * is supporting
+   * SpectrumModel that this channel instance is supporting.
    */
   Ptr<const SpectrumModel> m_spectrumModel;
 
 
   /**
-   * propagation delay model to be used with this channel
-   *
+   * Propagation delay model to be used with this channel.
    */
   Ptr<PropagationDelayModel> m_propagationDelay;
 
 
   /**
-    * single-frequency propagation loss model to be used with this channel
-    *
-    */
+   * Single-frequency propagation loss model to be used with this channel.
+   */
   Ptr<PropagationLossModel> m_propagationLoss;
 
   /**
-   * frequency-dependent propagation loss model to be used with this channel
-   *
+   * Frequency-dependent propagation loss model to be used with this channel.
    */
   Ptr<SpectrumPropagationLossModel> m_spectrumPropagationLoss;
 
 
+  /**
+   * Maximum loss [dB].
+   *
+   * Any device above this loss is considered out of range.
+   */
   double m_maxLossDb;
 
   /**
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-analyzer.cc ns-3.25/src/spectrum/model/spectrum-analyzer.cc
--- ns-3.24.1/src/spectrum/model/spectrum-analyzer.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-analyzer.cc	2016-03-23 21:36:52.000000000 -0700
@@ -74,7 +74,7 @@
     .SetGroupName ("Spectrum")
     .AddConstructor<SpectrumAnalyzer> ()
     .AddAttribute ("Resolution",
-                   "The lengh of the time interval over which the "
+                   "The length of the time interval over which the "
                    "power spectral density of incoming signals is averaged",
                    TimeValue (MilliSeconds (1)),
                    MakeTimeAccessor (&SpectrumAnalyzer::m_resolution),
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-analyzer.h ns-3.25/src/spectrum/model/spectrum-analyzer.h
--- ns-3.24.1/src/spectrum/model/spectrum-analyzer.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-analyzer.h	2016-03-23 21:36:52.000000000 -0700
@@ -38,7 +38,7 @@
 /**
  * \ingroup spectrum
  *
- * Simple SpectrumPhy implemetation that averages the spectrum power
+ * Simple SpectrumPhy implementation that averages the spectrum power
  * density of incoming transmissions to produce a spectrogram.
  *
  *
@@ -52,9 +52,13 @@
   SpectrumAnalyzer ();
   virtual ~SpectrumAnalyzer ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
-// inherited from SpectrumPhy
+  // inherited from SpectrumPhy
   void SetChannel (Ptr<SpectrumChannel> c);
   void SetMobility (Ptr<MobilityModel> m);
   void SetDevice (Ptr<NetDevice> d);
@@ -68,12 +72,12 @@
   /**
    * Set the spectrum model used by the SpectrumAnalyzer to represent incoming signals
    *
-   * @param m
+   * @param m the Rx Spectrum model
    */
   void SetRxSpectrumModel (Ptr<SpectrumModel> m);
 
   /** 
-   * set the AntennaModel to be used
+   * Set the AntennaModel to be used
    * 
    * \param a the Antenna Model
    */
@@ -96,25 +100,40 @@
   void DoDispose ();
 
 private:
-  Ptr<MobilityModel> m_mobility;
-  Ptr<AntennaModel> m_antenna;
-  Ptr<NetDevice> m_netDevice;
-  Ptr<SpectrumChannel> m_channel;
+  Ptr<MobilityModel> m_mobility;    //!< Pointer to the mobility model
+  Ptr<AntennaModel> m_antenna;      //!< Pointer to the Antenna model
+  Ptr<NetDevice> m_netDevice;       //!< Pointer to the NetDevice using this object
+  Ptr<SpectrumChannel> m_channel;   //!< Pointer to the channel to be analyzed
 
+  /**
+   * Generates a report of the data collected so far.
+   *
+   * This function is called periodically.
+   */
   virtual void GenerateReport ();
 
+  /**
+   * Adds a signal to the data collected.
+   */
   void AddSignal (Ptr<const SpectrumValue> psd);
+  /**
+   * Removes a signal to the data collected.
+   */
   void SubtractSignal  (Ptr<const SpectrumValue> psd);
+  /**
+   * Updates the data about the received Energy
+   */
   void UpdateEnergyReceivedSoFar ();
 
-  Ptr<SpectrumModel> m_spectrumModel;
-  Ptr<SpectrumValue> m_sumPowerSpectralDensity;
-  Ptr<SpectrumValue> m_energySpectralDensity;
-  double m_noisePowerSpectralDensity;
-  Time m_resolution;
-  Time m_lastChangeTime;
-  bool m_active;
+  Ptr<SpectrumModel> m_spectrumModel;             //!< Spectrum model
+  Ptr<SpectrumValue> m_sumPowerSpectralDensity;   //!< Sum of the received PSD
+  Ptr<SpectrumValue> m_energySpectralDensity;     //!< Energy spectral density
+  double m_noisePowerSpectralDensity;             //!< Noise power spectral density
+  Time m_resolution;                              //!< Time resolution
+  Time m_lastChangeTime;                          //!< When the last update happened
+  bool m_active;                                  //!< True if the analyzer is active
 
+  /// TracedCallback - average power spectral density report.
   TracedCallback<Ptr<const SpectrumValue> > m_averagePowerSpectralDensityReportTrace;
 
 };
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-channel.h ns-3.25/src/spectrum/model/spectrum-channel.h
--- ns-3.24.1/src/spectrum/model/spectrum-channel.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-channel.h	2016-03-23 21:36:52.000000000 -0700
@@ -47,11 +47,15 @@
 {
 public:
   virtual ~SpectrumChannel ();
-  static TypeId GetTypeId (void);
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
 
   /**
-   * set the single-frequency propagation loss model to be used
+   * Set the single-frequency propagation loss model to be used
    * \warning only models that do not depend on the TX power should be used.
    *
    * \param loss a pointer to the propagation loss model to be used.
@@ -59,13 +63,13 @@
   virtual void AddPropagationLossModel (Ptr<PropagationLossModel> loss) = 0;
 
   /**
-   * set the frequency-dependent propagation loss model to be used
+   * Set the frequency-dependent propagation loss model to be used
    * \param loss a pointer to the propagation loss model to be used.
    */
   virtual void AddSpectrumPropagationLossModel (Ptr<SpectrumPropagationLossModel> loss) = 0;
 
   /**
-   * set the  propagation delay model to be used
+   * Set the  propagation delay model to be used
    * \param delay Ptr to the propagation delay model to be used.
    */
   virtual void SetPropagationDelayModel (Ptr<PropagationDelayModel> delay) = 0;
@@ -79,7 +83,7 @@
   virtual void StartTx (Ptr<SpectrumSignalParameters> params) = 0;
 
   /**
-   * @brief add a SpectrumPhy to a channel, so it can receive packets
+   * @brief Add a SpectrumPhy to a channel, so it can receive packets
    *
    * This method is used to attach a SpectrumPhy instance to a
    * SpectrumChannel instance, so that the SpectrumPhy can receive
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-converter.h ns-3.25/src/spectrum/model/spectrum-converter.h
--- ns-3.24.1/src/spectrum/model/spectrum-converter.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-converter.h	2016-03-23 21:36:52.000000000 -0700
@@ -78,9 +78,9 @@
    */
   double GetCoefficient (const BandInfo& from, const BandInfo& to) const;
 
-  std::vector<std::vector<double> > m_conversionMatrix; // /< matrix of conversion coefficients
-  Ptr<const SpectrumModel> m_fromSpectrumModel;  // /<  the SpectrumModel this SpectrumConverter instance can convert from
-  Ptr<const SpectrumModel> m_toSpectrumModel;    // /<  the SpectrumModel this SpectrumConverter instance can convert to
+  std::vector<std::vector<double> > m_conversionMatrix; //!< matrix of conversion coefficients
+  Ptr<const SpectrumModel> m_fromSpectrumModel;  //!<  the SpectrumModel this SpectrumConverter instance can convert from
+  Ptr<const SpectrumModel> m_toSpectrumModel;    //!<  the SpectrumModel this SpectrumConverter instance can convert to
 
 };
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-error-model.cc ns-3.25/src/spectrum/model/spectrum-error-model.cc
--- ns-3.24.1/src/spectrum/model/spectrum-error-model.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-error-model.cc	2016-03-23 21:36:52.000000000 -0700
@@ -44,6 +44,9 @@
 {
 }
 
+
+NS_OBJECT_ENSURE_REGISTERED (ShannonSpectrumErrorModel);
+
 /* static */
 TypeId
 ShannonSpectrumErrorModel::GetTypeId ()
@@ -55,6 +58,7 @@
     ;
   return tid;
 }
+
 void
 ShannonSpectrumErrorModel::DoDispose ()
 {
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-error-model.h ns-3.25/src/spectrum/model/spectrum-error-model.h
--- ns-3.24.1/src/spectrum/model/spectrum-error-model.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-error-model.h	2016-03-23 21:36:52.000000000 -0700
@@ -46,8 +46,24 @@
    */
   static TypeId GetTypeId ();
   virtual ~SpectrumErrorModel ();
+
+  /**
+   * Start a packet reception
+   * \param p the packet
+   */
   virtual void StartRx (Ptr<const Packet> p) = 0;
+
+  /**
+   * Evaluates a chunk
+   * \param sinr the SpectrumValue experienced by the Chunk
+   * \param duration the Chunk length
+   */
   virtual void EvaluateChunk (const SpectrumValue& sinr, Time duration) = 0;
+
+  /**
+   * Checks if the packet being received is correct
+   * \returns true if the packet is correct.
+   */
   virtual bool IsRxCorrect () = 0;
 };
 
@@ -77,8 +93,8 @@
   bool IsRxCorrect ();
 
 private:
-  uint32_t m_bytes;
-  uint32_t m_deliverableBytes;
+  uint32_t m_bytes;             //!< Length of the packet being received
+  uint32_t m_deliverableBytes;  //!< Bytes that can be received according to the Shnanon's formula
 
 };
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-interference.h ns-3.25/src/spectrum/model/spectrum-interference.h
--- ns-3.24.1/src/spectrum/model/spectrum-interference.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-interference.h	2016-03-23 21:36:52.000000000 -0700
@@ -56,14 +56,14 @@
   static TypeId GetTypeId (void);
   
   /**
-   * set the SpectrumErrorModel to be used.
+   * Set the SpectrumErrorModel to be used.
    *
-   * @param e
+   * @param e the error model
    */
   void SetErrorModel (Ptr<SpectrumErrorModel> e);
 
   /**
-   * notify that the PHY is starting a RX attempt
+   * Notify that the PHY is starting a RX attempt
    *
    * @param p the packet corresponding to the signal being RX
    * @param rxPsd the power spectral density of the signal being RX
@@ -71,12 +71,12 @@
   void StartRx (Ptr<const Packet> p, Ptr<const SpectrumValue> rxPsd);
 
   /**
-   * notify that the PHY has aborted RX
+   * Notify that the PHY has aborted RX
    */
   void AbortRx ();
 
   /**
-   * notify that the RX attempt has ended. The receiving PHY must call
+   * Notify that the RX attempt has ended. The receiving PHY must call
    * this method upon RX end in order to:
    * 1) know if RX was successful or not
    * 2) free up resources that might eventually be used for the
@@ -90,17 +90,17 @@
 
 
   /**
-   * notify that a new signal is being perceived in the medium. This
+   * Notify that a new signal is being perceived in the medium. This
    * method is to be called for all incoming signal, regardless of
-   * wether they're useful signals or interferers.
+   * whether they're useful signals or interferers.
    *
    * @param spd the power spectral density of the new signal
    * @param duration the duration of the new signal
    */
   void AddSignal (Ptr<const SpectrumValue> spd, const Time duration);
 
-
   /**
+   * Set the Noise Power Spectral Density
    *
    * @param noisePsd the Noise Power Spectral Density in power units
    * (Watt, Pascal...) per Hz.
@@ -112,30 +112,40 @@
   void DoDispose ();
 
 private:
+
+  /**
+   * Evaluate a Chunk, depending on the Rx status and the last update time
+   */
   void ConditionallyEvaluateChunk ();
+  /**
+   * Adds a signal perceived in the medium.
+   * @param spd the power spectral density of the new signal
+   */
   void DoAddSignal  (Ptr<const SpectrumValue> spd);
+  /**
+    * Removes a signal perceived in the medium.
+    * @param spd the power spectral density of the new signal
+    */
   void DoSubtractSignal  (Ptr<const SpectrumValue> spd);
 
+  bool m_receiving; //!< True if in Rx status
 
+  /**
+   * Stores the power spectral density of the signal whose RX is being attempted
+   */
+  Ptr<const SpectrumValue> m_rxSignal;
 
-  bool m_receiving;
-
-  Ptr<const SpectrumValue> m_rxSignal; /**< stores the power spectral density of
-                                  * the signal whose RX is being
-                                  * attempted
-                                  */
-
-  Ptr<SpectrumValue> m_allSignals; /**< stores the spectral
-                                    * power density of the sum of incoming signals;
-                                    * does not include noise, includes the SPD of the signal being RX
-                                    */
+  /**
+   * Stores the spectral power density of the sum of incoming signals;
+   * does not include noise, includes the SPD of the signal being RX
+   */
+  Ptr<SpectrumValue> m_allSignals;
 
-  Ptr<const SpectrumValue> m_noise;
+  Ptr<const SpectrumValue> m_noise; //!< Noise spectral power density
 
-  Time m_lastChangeTime;     /**< the time of the last change in
-                                m_TotalPower */
+  Time m_lastChangeTime;     //!< the time of the last change in m_TotalPower
 
-  Ptr<SpectrumErrorModel> m_errorModel;
+  Ptr<SpectrumErrorModel> m_errorModel; //!< Error model
 
 
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-model.h ns-3.25/src/spectrum/model/spectrum-model.h
--- ns-3.24.1/src/spectrum/model/spectrum-model.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-model.h	2016-03-23 21:36:52.000000000 -0700
@@ -44,13 +44,16 @@
  */
 struct BandInfo
 {
-  double fl; ///< lower limit of subband
-  double fc; ///< center frequency
-  double fh; ///< upper limit of subband
+  double fl; //!< lower limit of subband
+  double fc; //!< center frequency
+  double fh; //!< upper limit of subband
 };
 
 
+/// Container of BandInfo
 typedef std::vector<BandInfo> Bands;
+
+/// Uid for SpectrumModels
 typedef uint32_t SpectrumModelUid_t;
 
 /**
@@ -63,6 +66,12 @@
 class SpectrumModel : public SimpleRefCount<SpectrumModel>
 {
 public:
+  /**
+   * Comparison operator. Returns true if the two SpectumModels are identical
+   * \param lhs left operand
+   * \param rhs right operand
+   * \returns true if the two operands are identical
+   */
   friend bool operator== (const SpectrumModel& lhs, const SpectrumModel& rhs);
 
   /**
@@ -102,15 +111,19 @@
    */
   SpectrumModelUid_t GetUid () const;
 
-
+  /**
+   * Const Iterator to the model Bands container start.
+   */
   Bands::const_iterator Begin () const;
+  /**
+   * Const Iterator to the model Bands container end.
+   */
   Bands::const_iterator End () const;
 
 private:
-  Bands m_bands;         ///< actual definition of frequency bands
-                         /// within this SpectrumModel
-  SpectrumModelUid_t m_uid;        ///< unique id for a given set of frequencies
-  static SpectrumModelUid_t m_uidCount;    ///< counter to assign m_uids
+  Bands m_bands;         //!< Actual definition of frequency bands within this SpectrumModel
+  SpectrumModelUid_t m_uid;        //!< unique id for a given set of frequencies
+  static SpectrumModelUid_t m_uidCount;    //!< counter to assign m_uids
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-phy.h ns-3.25/src/spectrum/model/spectrum-phy.h
--- ns-3.24.1/src/spectrum/model/spectrum-phy.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-phy.h	2016-03-23 21:36:52.000000000 -0700
@@ -49,17 +49,21 @@
   SpectrumPhy ();
   virtual ~SpectrumPhy ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   /**
-   * set the associated NetDevice instance
+   * Set the associated NetDevice instance
    *
    * @param d the NetDevice instance
    */
   virtual void SetDevice (Ptr<NetDevice> d) = 0;
 
   /**
-   * get the associated NetDevice instance
+   * Get the associated NetDevice instance
    *
    * @return a Ptr to the associated NetDevice instance
    */
@@ -73,7 +77,7 @@
   virtual void SetMobility (Ptr<MobilityModel> m) = 0;
 
   /**
-   * get the associated MobilityModel instance
+   * Get the associated MobilityModel instance
    *
    * @return a Ptr to the associated MobilityModel instance
    */
@@ -95,7 +99,7 @@
   virtual Ptr<const SpectrumModel> GetRxSpectrumModel () const = 0;
 
   /**
-   * get the AntennaModel used by the NetDevice for reception
+   * Get the AntennaModel used by the NetDevice for reception
    *
    * @return a Ptr to the AntennaModel used by the NetDevice for reception
    */
@@ -109,7 +113,18 @@
   virtual void StartRx (Ptr<SpectrumSignalParameters> params) = 0;
 
 private:
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
   SpectrumPhy (SpectrumPhy const &);
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
   SpectrumPhy& operator= (SpectrumPhy const &);
 };
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-propagation-loss-model.h ns-3.25/src/spectrum/model/spectrum-propagation-loss-model.h
--- ns-3.24.1/src/spectrum/model/spectrum-propagation-loss-model.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-propagation-loss-model.h	2016-03-23 21:36:52.000000000 -0700
@@ -47,11 +47,14 @@
   SpectrumPropagationLossModel ();
   virtual ~SpectrumPropagationLossModel ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId ();
 
-
   /**
-   * used to chain various instances of SpectrumPropagationLossModel
+   * Used to chain various instances of SpectrumPropagationLossModel
    *
    * @param next
    */
@@ -63,12 +66,12 @@
    * @param txPsd the SpectrumValue representing the power spectral
    * density of the transmission. Watt units are to be used for radio
    * communications, and Pascal units for acoustic communications
-   * (e.g. underwater).
+   * (e.g., underwater).
    *
    * @param a sender mobility
    * @param b receiver mobility
    *
-   * @return set of values vs frequency representing the received
+   * @return set of values Vs frequency representing the received
    * power in the same units used for the txPower parameter.
    */
   Ptr<SpectrumValue> CalcRxPowerSpectralDensity (Ptr<const SpectrumValue> txPsd,
@@ -82,20 +85,19 @@
 private:
   /**
    *
-   *
-   * @param txPsd set of values vs frequency representing the
+   * @param txPsd set of values Vs frequency representing the
    * transmission power. See SpectrumChannel for details.
    * @param a sender mobility
    * @param b receiver mobility
    *
-   * @return set of values vs frequency representing the received
+   * @return set of values Vs frequency representing the received
    * power in the same units used for the txPower parameter.
    */
   virtual Ptr<SpectrumValue> DoCalcRxPowerSpectralDensity (Ptr<const SpectrumValue> txPsd,
                                                            Ptr<const MobilityModel> a,
                                                            Ptr<const MobilityModel> b) const = 0;
 
-  Ptr<SpectrumPropagationLossModel> m_next;
+  Ptr<SpectrumPropagationLossModel> m_next; //!< SpectrumPropagationLossModel chained to this one.
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-signal-parameters.h ns-3.25/src/spectrum/model/spectrum-signal-parameters.h
--- ns-3.24.1/src/spectrum/model/spectrum-signal-parameters.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-signal-parameters.h	2016-03-23 21:36:52.000000000 -0700
@@ -35,6 +35,8 @@
 class AntennaModel;
 
 /**
+ * \ingroup spectrum
+ *
  * This struct provides the generic signal representation to be used by
  * all wireless technologies. Any specific wireless technology is
  * allowed to define additional signal parameters by inheriting from this
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-value.cc ns-3.25/src/spectrum/model/spectrum-value.cc
--- ns-3.24.1/src/spectrum/model/spectrum-value.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-value.cc	2016-03-23 21:36:52.000000000 -0700
@@ -416,6 +416,12 @@
 }
 
 
+/**
+ * \brief Output stream operator
+ * \param os output stream
+ * \param pvf the SpectrumValue to print
+ * \return an output stream
+ */
 std::ostream&
 operator << (std::ostream& os, const SpectrumValue& pvf)
 {
diff -Naur ns-3.24.1/src/spectrum/model/spectrum-value.h ns-3.25/src/spectrum/model/spectrum-value.h
--- ns-3.24.1/src/spectrum/model/spectrum-value.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/spectrum-value.h	2016-03-23 21:36:52.000000000 -0700
@@ -30,6 +30,7 @@
 namespace ns3 {
 
 
+/// Container for element values
 typedef std::vector<double> Values;
 
 /**
@@ -283,7 +284,7 @@
   /**
    * unary plus operator
    *
-   *
+   * @param rhs Right Hand Side of the operator
    * @return the value of *this
    */
   friend SpectrumValue operator+ (const SpectrumValue& rhs);
@@ -291,7 +292,7 @@
   /**
    * unary minus operator
    *
-   *
+   * @param rhs Right Hand Side of the operator
    * @return the value of - *this
    */
   friend SpectrumValue operator- (const SpectrumValue& rhs);
@@ -452,7 +453,6 @@
 
   /**
    *
-   *
    * @param lhs the base
    * @param rhs the exponent
    *
@@ -515,33 +515,94 @@
 
 
 private:
+  /**
+   * Add a SpectrumValue (element to element addition)
+   * \param x SpectrumValue
+   */
   void Add (const SpectrumValue& x);
+  /**
+   * Add a flat value to all the current elements
+   * \param s flat value
+   */
   void Add (double s);
+  /**
+   * Subtracts a SpectrumValue (element by element subtraction)
+   * \param x SpectrumValue
+   */
   void Subtract (const SpectrumValue& x);
+  /**
+   * Subtracts a flat value to all the current elements
+   * \param s flat value
+   */
   void Subtract (double s);
+  /**
+   * Multiplies for a SpectrumValue (element to element multiplication)
+   * \param x SpectrumValue
+   */
   void Multiply (const SpectrumValue& x);
+  /**
+   * Multiplies for a flat value to all the current elements
+   * \param s flat value
+   */
   void Multiply (double s);
+  /**
+   * Divides by a SpectrumValue (element to element division)
+   * \param x SpectrumValue
+   */
   void Divide (const SpectrumValue& x);
+  /**
+   * Divides by a flat value to all the current elements
+   * \param s flat value
+   */
   void Divide (double s);
+  /**
+   * Change the values sign
+   */
   void ChangeSign ();
+  /**
+   * Shift the values to the left
+   */
   void ShiftLeft (int n);
+  /**
+   * Shift the values to the right
+   */
   void ShiftRight (int n);
+  /**
+   * Modifies each element so that it each element is raised to the exponent
+   *
+   * \param exp the exponent
+   */
   void Pow (double exp);
+  /**
+   * Modifies each element so that it is
+   * the base raised to each element value
+   *
+   * \param base the base
+   */
   void Exp (double base);
+  /**
+   * Applies a Log10 to each the elements
+   */
   void Log10 ();
+  /**
+   * Applies a Log2 to each the elements
+   */
   void Log2 ();
+  /**
+   * Applies a Log to each the elements
+   */
   void Log ();
 
-  Ptr<const SpectrumModel> m_spectrumModel;
+  Ptr<const SpectrumModel> m_spectrumModel; //!< The spectrum model
 
 
-/**
- * Set of values which implement the codomain of the functions in
- * the Function Space defined by SpectrumValue. There is no restriction
- * on what these values represent (a transmission power density, a
- * propagation loss, etc.).
- *
- */
+  /**
+   * Set of values which implement the codomain of the functions in
+   * the Function Space defined by SpectrumValue. There is no restriction
+   * on what these values represent (a transmission power density, a
+   * propagation loss, etc.).
+   *
+   */
   Values m_values;
 
 
diff -Naur ns-3.24.1/src/spectrum/model/tv-spectrum-transmitter.cc ns-3.25/src/spectrum/model/tv-spectrum-transmitter.cc
--- ns-3.24.1/src/spectrum/model/tv-spectrum-transmitter.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/tv-spectrum-transmitter.cc	2016-03-23 21:36:52.000000000 -0700
@@ -185,12 +185,17 @@
   return m_channel;
 }
 
-// Used as key for map containing created spectrum models
+/// Used as key for map containing created spectrum models
 struct TvSpectrumModelId
 {
+  /**
+   * Constructor
+   * \param stFreq Start frequency [Hz]
+   * \param bwidth Bandwidth [Hz]
+   */
   TvSpectrumModelId (double stFreq, double bwidth);
-  double startFrequency;
-  double bandwidth;
+  double startFrequency;  //!< Start frequency [Hz]
+  double bandwidth;       //!< Bandwidth [Hz]
 };
 
 TvSpectrumModelId::TvSpectrumModelId (double stFreq, double bwidth)
@@ -199,6 +204,13 @@
 {
 }
 
+/**
+ * Minus-than operator
+ * \param a left operand
+ * \param b right operand
+ * \returns true if the left operand has a lower starting frequency
+ *          or a smaller bandwidth (if both have the same starting freq.)
+ */
 bool
 operator < (const TvSpectrumModelId& a, const TvSpectrumModelId& b)
 {
@@ -206,7 +218,7 @@
            ( (a.startFrequency == b.startFrequency) && (a.bandwidth < b.bandwidth) ) );
 }
 
-// Stores created spectrum models
+/// Stores created spectrum models
 static std::map<TvSpectrumModelId, Ptr<SpectrumModel> > g_tvSpectrumModelMap;
 
 /** 
diff -Naur ns-3.24.1/src/spectrum/model/tv-spectrum-transmitter.h ns-3.25/src/spectrum/model/tv-spectrum-transmitter.h
--- ns-3.24.1/src/spectrum/model/tv-spectrum-transmitter.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/tv-spectrum-transmitter.h	2016-03-23 21:36:52.000000000 -0700
@@ -57,8 +57,8 @@
     TVTYPE_COFDM
   };
   
-  TvSpectrumTransmitter (); //!< Default constructor
-  virtual ~TvSpectrumTransmitter (); //!< Destructor
+  TvSpectrumTransmitter ();
+  virtual ~TvSpectrumTransmitter ();
   
   /**
    * Register this type.
diff -Naur ns-3.24.1/src/spectrum/model/waveform-generator.h ns-3.25/src/spectrum/model/waveform-generator.h
--- ns-3.24.1/src/spectrum/model/waveform-generator.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/waveform-generator.h	2016-03-23 21:36:52.000000000 -0700
@@ -57,6 +57,10 @@
   WaveformGenerator ();
   virtual ~WaveformGenerator ();
 
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
   static TypeId GetTypeId (void);
 
   // inherited from SpectrumPhy
@@ -129,21 +133,24 @@
 private:
   virtual void DoDispose (void);
 
-  Ptr<MobilityModel> m_mobility;
-  Ptr<AntennaModel> m_antenna;
-  Ptr<NetDevice> m_netDevice;
-  Ptr<SpectrumChannel> m_channel;
+  Ptr<MobilityModel> m_mobility;  //!< Mobility model
+  Ptr<AntennaModel> m_antenna;    //!< Antenna model
+  Ptr<NetDevice> m_netDevice;     //!< Owning NetDevice
+  Ptr<SpectrumChannel> m_channel; //!< Channel
 
+  /**
+   * Generates a waveform
+   */
   virtual void GenerateWaveform ();
 
-  Ptr<SpectrumValue> m_txPowerSpectralDensity;
-  Time   m_period;
-  double m_dutyCycle;
-  Time m_startTime;
-  EventId m_nextWave;
+  Ptr<SpectrumValue> m_txPowerSpectralDensity; //!< Tx PSD
+  Time   m_period;    //!< Period
+  double m_dutyCycle; //!< Duty Cycle (should be in [0,1])
+  Time m_startTime;   //!< Start time
+  EventId m_nextWave; //!< Next waveform generation event
 
-  TracedCallback<Ptr<const Packet> > m_phyTxStartTrace;
-  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;
+  TracedCallback<Ptr<const Packet> > m_phyTxStartTrace; //!< TracedCallback: Tx start
+  TracedCallback<Ptr<const Packet> > m_phyTxEndTrace;   //!< TracedCallback: Tx end
 };
 
 
diff -Naur ns-3.24.1/src/spectrum/model/wifi-spectrum-value-helper.cc ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.cc
--- ns-3.24.1/src/spectrum/model/wifi-spectrum-value-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.cc	2016-03-23 21:36:52.000000000 -0700
@@ -23,7 +23,7 @@
 
 namespace ns3 {
 
-
+/// The Wi-Fi spectrum model
 static Ptr<SpectrumModel> g_WifiSpectrumModel5Mhz;
 
 WifiSpectrumValueHelper::~WifiSpectrumValueHelper ()
@@ -34,6 +34,9 @@
 {
 }
 
+/**
+ * Static class to initialize the values for the Wi-Fi spectrum model
+ */
 static class WifiSpectrumModel5MhzInitializer
 {
 public:
@@ -50,7 +53,7 @@
       }
     g_WifiSpectrumModel5Mhz = Create<SpectrumModel> (bands);
   }
-} g_WifiSpectrumModel5MhzInitializerInstance;
+} g_WifiSpectrumModel5MhzInitializerInstance; //!< initialization instance for WifiSpectrumModel5Mhz
 
 
 
diff -Naur ns-3.24.1/src/spectrum/model/wifi-spectrum-value-helper.h ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.h
--- ns-3.24.1/src/spectrum/model/wifi-spectrum-value-helper.h	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/model/wifi-spectrum-value-helper.h	2016-03-23 21:36:52.000000000 -0700
@@ -31,40 +31,43 @@
 /**
  * \ingroup spectrum
  *
- * this abstract class defines the interface for interacting with all WifiSpectrumValue implementations.
+ * This abstract class defines the interface for interacting with all WifiSpectrumValue implementations.
  *
  */
 class WifiSpectrumValueHelper
 {
 public:
   virtual ~WifiSpectrumValueHelper ();
-  /*
+  /**
+   * Creates a SpectrumValue instance which
+   * has a constant value for all frequencies
    *
-   * @param value the constant value
+   * @param psd the constant value
    *
-   * @return a Ptr to a newly created SpectrumValue instance which
-   * has a constant value for all frequencies
+   * @return a Ptr to a newly created SpectrumValue
    */
   virtual Ptr<SpectrumValue> CreateConstant (double psd) = 0;
 
-  /*
+  /**
+   * Creates a SpectrumValue instance which
+   * represents the TX Power Spectral Density  of a wifi device
+   * corresponding to the provided parameters
    *
    * @param txPower the total TX power in W
    * @param channel the number of the channel
    *
-   * @return a Ptr to a newly created SpectrumValue instance which
-   * represents the TX Power Spectral Density  of a wifi device
-   * corresponding to the provided parameters
+   * @return a Ptr to a newly created SpectrumValue
    */
   virtual Ptr<SpectrumValue> CreateTxPowerSpectralDensity (double txPower, uint32_t channel) = 0;
 
-  /*
+  /**
+   * Creates a pectrumValue instance which
+   * represents the frequency response of the RF filter which is used
+   * by a wifi device to receive signals when tuned to a particular channel
    *
    * @param channel the number of the channel
    *
-   * @return a Ptr to a newly created SpectrumValue instance which
-   * represents the frequency response of the RF filter which is used
-   * by a wifi device to receive signals when tuned to a particular channel
+   * @return a Ptr to a newly created SpectrumValue
    */
   virtual Ptr<SpectrumValue> CreateRfFilter (uint32_t channel) = 0;
 
@@ -79,11 +82,11 @@
  * 5 MHz spectrum resolution.
  *
  */
-class WifiSpectrumValue5MhzFactory
+class WifiSpectrumValue5MhzFactory : public WifiSpectrumValueHelper
 {
 public:
   virtual ~WifiSpectrumValue5MhzFactory ();
-  // inherited from WifiSpectrumValue
+  // inherited from WifiSpectrumValueHelper
   virtual Ptr<SpectrumValue> CreateConstant (double psd);
   virtual Ptr<SpectrumValue> CreateTxPowerSpectralDensity (double txPower, uint32_t channel);
   virtual Ptr<SpectrumValue> CreateRfFilter (uint32_t channel);
diff -Naur ns-3.24.1/src/spectrum/test/tv-helper-distribution-test.cc ns-3.25/src/spectrum/test/tv-helper-distribution-test.cc
--- ns-3.24.1/src/spectrum/test/tv-helper-distribution-test.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/spectrum/test/tv-helper-distribution-test.cc	2016-03-23 21:36:52.000000000 -0700
@@ -18,8 +18,6 @@
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
 
-#define private public //to make private method testable
-
 #include <ns3/test.h>
 #include <ns3/log.h>
 #include <ns3/tv-spectrum-transmitter-helper.h>
diff -Naur ns-3.24.1/src/tap-bridge/bindings/callbacks_list.py ns-3.25/src/tap-bridge/bindings/callbacks_list.py
--- ns-3.24.1/src/tap-bridge/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -4,4 +4,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', '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/tap-bridge/bindings/modulegen__gcc_ILP32.py ns-3.25/src/tap-bridge/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -138,10 +138,14 @@
     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::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]
@@ -204,6 +208,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]
@@ -214,6 +222,8 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## 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-bridge.h (module 'tap-bridge'): ns3::TapBridge [class]
     module.add_class('TapBridge', parent=root_module['ns3::NetDevice'])
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridge::Mode [enumeration]
@@ -342,8 +352,10 @@
     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__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'])
@@ -372,11 +384,14 @@
     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_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TapBridge_methods(root_module, root_module['ns3::TapBridge'])
     register_Ns3TapBridgeFdReader_methods(root_module, root_module['ns3::TapBridgeFdReader'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
@@ -1031,6 +1046,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', 
@@ -1046,6 +1066,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', 
@@ -1222,7 +1247,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', 
@@ -2450,6 +2475,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([])
@@ -2474,6 +2511,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([])
@@ -3367,6 +3416,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]
@@ -3446,6 +3581,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', 
@@ -3719,6 +3859,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_Ns3TapBridge_methods(root_module, cls):
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridge::TapBridge(ns3::TapBridge const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapBridge const &', 'arg0')])
diff -Naur ns-3.24.1/src/tap-bridge/bindings/modulegen__gcc_LP64.py ns-3.25/src/tap-bridge/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -138,10 +138,14 @@
     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::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]
@@ -204,6 +208,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]
@@ -214,6 +222,8 @@
     module.add_class('ObjectFactoryValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
     ## packet.h (module 'network'): ns3::Packet [class]
     module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## 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-bridge.h (module 'tap-bridge'): ns3::TapBridge [class]
     module.add_class('TapBridge', parent=root_module['ns3::NetDevice'])
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridge::Mode [enumeration]
@@ -342,8 +352,10 @@
     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__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'])
@@ -372,11 +384,14 @@
     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_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TapBridge_methods(root_module, root_module['ns3::TapBridge'])
     register_Ns3TapBridgeFdReader_methods(root_module, root_module['ns3::TapBridgeFdReader'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
@@ -1031,6 +1046,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', 
@@ -1046,6 +1066,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', 
@@ -1222,7 +1247,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', 
@@ -2450,6 +2475,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([])
@@ -2474,6 +2511,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([])
@@ -3367,6 +3416,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]
@@ -3446,6 +3581,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', 
@@ -3719,6 +3859,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_Ns3TapBridge_methods(root_module, cls):
     ## tap-bridge.h (module 'tap-bridge'): ns3::TapBridge::TapBridge(ns3::TapBridge const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::TapBridge const &', 'arg0')])
diff -Naur ns-3.24.1/src/tap-bridge/examples/tap-wifi-dumbbell.cc ns-3.25/src/tap-bridge/examples/tap-wifi-dumbbell.cc
--- ns-3.24.1/src/tap-bridge/examples/tap-wifi-dumbbell.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/examples/tap-wifi-dumbbell.cc	2016-03-23 21:36:53.000000000 -0700
@@ -140,8 +140,8 @@
   wifiPhy.SetChannel (wifiChannel.Create ());
 
   Ssid ssid = Ssid ("left");
-  WifiHelper wifi = WifiHelper::Default ();
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiHelper wifi;
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ArfWifiManager");
 
   wifiMac.SetType ("ns3::ApWifiMac",
diff -Naur ns-3.24.1/src/tap-bridge/examples/tap-wifi-virtual-machine.cc ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.cc
--- ns-3.24.1/src/tap-bridge/examples/tap-wifi-virtual-machine.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.cc	2016-03-23 21:36:53.000000000 -0700
@@ -104,14 +104,14 @@
   //
   // We're going to use 802.11 A so set up a wifi helper to reflect that.
   //
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211a);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue ("OfdmRate54Mbps"));
 
   //
   // No reason for pesky access points, so we'll use an ad-hoc network.
   //
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
 
   //
diff -Naur ns-3.24.1/src/tap-bridge/examples/tap-wifi-virtual-machine.py ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.py
--- ns-3.24.1/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2016-03-23 21:36:53.000000000 -0700
@@ -44,14 +44,14 @@
     #
     # We're going to use 802.11 A so set up a wifi helper to reflect that.
     #
-    wifi = ns.wifi.WifiHelper.Default()
+    wifi = ns.wifi.WifiHelper()
     wifi.SetStandard (ns.wifi.WIFI_PHY_STANDARD_80211a);
     wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", ns.core.StringValue ("OfdmRate54Mbps"));
 
     #
     # No reason for pesky access points, so we'll use an ad-hoc network.
     #
-    wifiMac = ns.wifi.NqosWifiMacHelper.Default()
+    wifiMac = ns.wifi.WifiMacHelper
     wifiMac.SetType ("ns3::AdhocWifiMac");
 
     #
diff -Naur ns-3.24.1/src/test/adaptive-red-queue-disc-test-suite.cc ns-3.25/src/test/adaptive-red-queue-disc-test-suite.cc
--- ns-3.24.1/src/test/adaptive-red-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/test/adaptive-red-queue-disc-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,492 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 NITK Surathkal
+ *
+ * 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: Mohit P. Tahiliani (tahiliani@nitk.edu.in)
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/red-queue-disc.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/uinteger.h"
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/ipv4-queue-disc-item.h"
+
+#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/point-to-point-layout-module.h"
+#include "ns3/traffic-control-module.h"
+
+using namespace ns3;
+
+// Tests to verify the working of *automatically set* parameters in ARED
+class AutoRedQueueDiscTestCase : public TestCase
+{
+public:
+  AutoRedQueueDiscTestCase ();
+  virtual void DoRun (void);
+private:
+  void Enqueue (Ptr<RedQueueDisc> queue, uint32_t size, uint32_t nPkt);
+  void RunAutoRedDiscTest (StringValue mode);
+};
+
+AutoRedQueueDiscTestCase::AutoRedQueueDiscTestCase ()
+  : TestCase ("Sanity check on automatically set parameters of ARED")
+{
+}
+
+void
+AutoRedQueueDiscTestCase::RunAutoRedDiscTest (StringValue mode)
+{
+  uint32_t pktSize = 0;
+  uint32_t modeSize = 1;                // 1 for packets; pktSize for bytes
+  Ptr<RedQueueDisc> queue = CreateObject<RedQueueDisc> ();
+
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+
+  Ipv4Header ipHeader;
+  Address dest;
+
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      pktSize = 500;
+      modeSize = pktSize + ipHeader.GetSerializedSize ();
+    }
+
+  double minTh = 70 * modeSize;
+  double maxTh = 150 * modeSize;
+  uint32_t qSize = 300 * modeSize;
+
+  // test 1: Verify automatic setting of QW. [QW = 0.0 with default LinkBandwidth]
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 2: Verify automatic setting of QW. [QW = 0.0 with lesser LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LinkBandwidth", DataRateValue (DataRate ("0.015Mbps"))), true,
+                         "Verify that we can actually set the attribute LinkBandwidth");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 44, "There should be 44 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 45, "There should be 45 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 3: Verify automatic setting of QW. [QW = -1.0 with default LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (-1.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 4: Verify automatic setting of QW. [QW = -1.0 with lesser LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (-1.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LinkBandwidth", DataRateValue (DataRate ("0.015Mbps"))), true,
+                         "Verify that we can actually set the attribute LinkBandwidth");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 32, "There should be 32 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 33, "There should be 33 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 5: Verify automatic setting of QW. [QW = -2.0 with default LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (-2.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 29, "There should be 29 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 30, "There should be 30 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 6: Verify automatic setting of QW. [QW = -2.0 with lesser LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (-2.0)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LinkBandwidth", DataRateValue (DataRate ("0.015Mbps"))), true,
+                         "Verify that we can actually set the attribute LinkBandwidth");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 44, "There should be 44 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 46, "There should be 46 dropped packets  due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 7: Verify automatic setting of minTh and maxTh. [minTh = maxTh = 0.0, with default LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MeanPktSize", UintegerValue (modeSize)), true,
+                             "Verify that we can actually set the attribute MeanPktSize");
+    }
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 20, "There should be 20 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 113, "There should be 113 dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 21, "There should be 21 dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 113, "There should be 113 dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+
+
+  // test 8: Verify automatic setting of minTh and maxTh. [minTh = maxTh = 0.0, with higher LinkBandwidth]
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (0.0)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LinkBandwidth", DataRateValue (DataRate ("150Mbps"))), true,
+                         "Verify that we can actually set the attribute LinkBandwidth");
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MeanPktSize", UintegerValue (modeSize)), true,
+                             "Verify that we can actually set the attribute MeanPktSize");
+    }
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should be zero dropped packets due to probability mark");
+      NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should be zero dropped packets due to hard mark");
+      NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should be zero dropped packets due to queue full");
+    }
+}
+
+void
+AutoRedQueueDiscTestCase::Enqueue (Ptr<RedQueueDisc> queue, uint32_t size, uint32_t nPkt)
+{
+  Ipv4Header ipHeader;
+  Address dest;
+  for (uint32_t i = 0; i < nPkt; i++)
+    {
+      queue->Enqueue (Create<Ipv4QueueDiscItem> (Create<Packet> (size), dest, 0, ipHeader));
+    }
+}
+
+void
+AutoRedQueueDiscTestCase::DoRun (void)
+{
+  RunAutoRedDiscTest (StringValue ("QUEUE_MODE_PACKETS"));
+  RunAutoRedDiscTest (StringValue ("QUEUE_MODE_BYTES"));
+  Simulator::Destroy ();
+}
+
+
+// Tests to verify the working of *adaptive* parameter in ARED
+class AdaptiveRedQueueDiscTestCase : public TestCase
+{
+public:
+  AdaptiveRedQueueDiscTestCase ();
+  virtual void DoRun (void);
+private:
+  void RunAdaptiveRedDiscTest (StringValue mode);
+};
+
+AdaptiveRedQueueDiscTestCase::AdaptiveRedQueueDiscTestCase ()
+  : TestCase ("Sanity check on adaptive parameter of ARED")
+{
+}
+
+void
+AdaptiveRedQueueDiscTestCase::RunAdaptiveRedDiscTest (StringValue mode)
+{
+  uint32_t    pktSize = 500;
+  uint32_t    modeSize = 1;             // 1 for packets; pktSize for bytes
+  uint32_t    nLeaf = 3;
+
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (pktSize));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue ("10Mbps"));
+
+  Ptr<RedQueueDisc> queue = CreateObject<RedQueueDisc> ();
+
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+
+  Ipv4Header ipHeader;
+
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      modeSize = pktSize + ipHeader.GetSerializedSize ();
+    }
+
+  uint32_t    qSize = 100 * modeSize;
+
+  Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+  Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10.0));
+  Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (qSize));
+  Config::SetDefault ("ns3::RedQueueDisc::MeanPktSize", UintegerValue (pktSize + ipHeader.GetSerializedSize ()));
+
+  // Create the point-to-point link helpers
+  PointToPointHelper bottleNeckLink;
+  bottleNeckLink.SetDeviceAttribute  ("DataRate", StringValue ("1.5Mbps"));
+  bottleNeckLink.SetChannelAttribute ("Delay", StringValue ("20ms"));
+
+  PointToPointHelper pointToPointLeaf;
+  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
+  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
+
+  PointToPointDumbbellHelper d (nLeaf, pointToPointLeaf,
+                                nLeaf, pointToPointLeaf,
+                                bottleNeckLink);
+
+  // Install Stack
+  InternetStackHelper stack;
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+      stack.Install (d.GetLeft (i));
+    }
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      stack.Install (d.GetRight (i));
+    }
+
+  stack.Install (d.GetLeft ());
+  stack.Install (d.GetRight ());
+  TrafficControlHelper tchBottleneck;
+  tchBottleneck.SetRootQueueDisc ("ns3::RedQueueDisc");
+  tchBottleneck.Install (d.GetLeft ()->GetDevice (0));
+  tchBottleneck.Install (d.GetRight ()->GetDevice (0));
+
+  // Assign IP Addresses
+  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
+
+  // Install on/off app on all right side nodes
+  OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());
+  clientHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  clientHelper.SetAttribute ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), 5001));
+  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
+  ApplicationContainer sinkApps;
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+      sinkApps.Add (packetSinkHelper.Install (d.GetLeft (i)));
+    }
+  sinkApps.Start (Seconds (0.0));
+  sinkApps.Stop (Seconds (30.0));
+
+  ApplicationContainer clientApps;
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      // Create an on/off app sending packets to the left side
+      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), 5001));
+      clientHelper.SetAttribute ("Remote", remoteAddress);
+      clientApps.Add (clientHelper.Install (d.GetRight (i)));
+    }
+  clientApps.Start (Seconds (1.0)); // Start 1 second after sink
+  clientApps.Stop (Seconds (15.0)); // Stop before the sink
+
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  Simulator::Run ();
+
+  uint32_t totalRxBytesCounter = 0;
+  for (uint32_t i = 0; i < sinkApps.GetN (); i++)
+    {
+      Ptr <Application> app = sinkApps.Get (i);
+      Ptr <PacketSink> pktSink = DynamicCast <PacketSink> (app);
+      totalRxBytesCounter += pktSink->GetTotalRx ();
+    }
+
+  if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_TEST_EXPECT_MSG_EQ (totalRxBytesCounter, 2605000, "Total received bytes should be 2605000");
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_TEST_EXPECT_MSG_EQ (totalRxBytesCounter, 2557000, "Total received bytes should be 2557000");
+    }
+
+  Simulator::Destroy ();
+}
+
+void
+AdaptiveRedQueueDiscTestCase::DoRun (void)
+{
+  RunAdaptiveRedDiscTest (StringValue ("QUEUE_MODE_PACKETS"));
+  RunAdaptiveRedDiscTest (StringValue ("QUEUE_MODE_BYTES"));
+  Simulator::Destroy ();
+}
+
+static class AredQueueDiscTestSuite : public TestSuite
+{
+public:
+  AredQueueDiscTestSuite ()
+    : TestSuite ("adaptive-red-queue-disc", UNIT)
+  {
+    AddTestCase (new AutoRedQueueDiscTestCase (), TestCase::QUICK);         // Tests for automatically set parameters of ARED
+    AddTestCase (new AdaptiveRedQueueDiscTestCase (), TestCase::QUICK);     // Tests for adaptive parameter of ARED
+  }
+} g_aredQueueDiscTestSuite;
diff -Naur ns-3.24.1/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc ns-3.25/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc
--- ns-3.24.1/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,6 +31,7 @@
 #include "ns3/ipv4-address-helper.h"
 #include "ns3/packet-sink-helper.h"
 #include "ns3/tcp-socket-factory.h"
+#include "ns3/traffic-control-helper.h"
 #include "ns3/simulator.h"
 
 using namespace ns3;
@@ -55,7 +56,7 @@
 // The topology is just two nodes communicating over a point-to-point network.
 // The point-to-point network is chosen because it is simple and allows us to
 // easily generate pcap traces we can use to separately verify that the ns-3
-// implementation is responding correctly.  Once the oopration is verified, we
+// implementation is responding correctly.  Once the operation is verified, we
 // enter a list of responses that capture the response succinctly.
 //
 //         node 0                 node 1
@@ -231,13 +232,16 @@
   event.m_newCwnd = newCwnd;
 
   m_responses.Add (event);
+
+  NS_LOG_DEBUG ("Cwnd change event " << m_responses.GetN () << " at " << Now ().As (Time::S) << " " << oldCwnd << " " << newCwnd);
 }
 
 void
 Ns3TcpCwndTestCase1::DoRun (void)
 {
+  NS_LOG_DEBUG ("Starting test case 1");
   //
-  // Just create two nodes.  One (node zero) will be the node with the TCP
+  // Create two nodes.  One (node zero) will be the node with the TCP
   // under test which is the ns-3 TCP implementation.  The other node (node
   // one) will be the node with the reference implementation we use to drive
   // the tests.
@@ -254,9 +258,6 @@
   pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
   pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
 
-  //
-  // Install the point-to-point devices on both nodes and connec them up.
-  //
   NetDeviceContainer devices;
   devices = pointToPoint.Install (nodes);
 
@@ -296,20 +297,9 @@
   sinkApps.Stop (Seconds (1.1));
 
   //
-  // We want to look at changes in the ns-3 TCP congestion window.  The 
-  // congestion window is flow clontrol imposed by the sender, so we need
-  // to crank up a flow from the ns-3 TCP node to the NSC TCP node and hook the
-  // CongestionWindow attribute on the socket.  Normally one would use an on-off
-  // application to generate a flow, but this has a couple of problems.  First,
-  // the socket of the on-off application is not created until Application Start
-  // time, so we wouldn't be able to hook the socket now at configuration time.
-  // Second, even if we could arrange a call after start time, the socket is not 
-  // public.
-  //
-  // So, we can cook up a simple version of the on-off application that does what
-  // we want.  On the plus side we don't need all of the complexity of the on-off
-  // application.  On the minus side, we don't have a helper, so we have to get
-  // a little more involved in the details, but this is trivial.
+  // This test uses a custom application that provides a direct handle to
+  // the socket (the socket of applications such as the OnOffApplication
+  // is not created until Application Start time, and is not easily accessible).
   //
   // So first, we create a socket and do the trace connect on it; then we pass this
   // socket into the constructor of our simple application which we then install
@@ -319,6 +309,10 @@
   ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", MakeCallback (&Ns3TcpCwndTestCase1::CwndChange, this));
 
   Ptr<SimpleSource> app = CreateObject<SimpleSource> ();
+  // 1040 is size of packet objects used to write data to the socket (note:
+  // the actual TCP segment size will be 536 bytes).  10 is the number
+  // of packets, so we write 10 * 1040 bytes.  This requires 20 segments
+  // of payload size 536, with the last one being a partially full segment
   app->Setup (ns3TcpSocket, sinkAddress, 1040, 10, DataRate ("5Mbps"));
   nodes.Get (0)->AddApplication (app);
   app->SetStartTime (Seconds (1.));
@@ -333,7 +327,7 @@
   // program.  So we provide the ability to generate a pcap trace of the 
   // test execution for your perusal.
   //
-  // Once the validation test is determined to be running exactly as exptected,
+  // Once the validation test is determined to be running exactly as expected,
   // the set of congestion window changes is collected and hard coded into the 
   // test results which will then be checked during the actual execution of the
   // test.
@@ -357,13 +351,11 @@
   // transmits its bits
   //
   // From inspecting the results, we know that we should see N_EVENTS congestion
-  // window change events.  The window should expand N_EVENTS - 1 times (each
-  // time by MSS bytes) until it gets to its largest value.  Then the application
-  // sending stops and the window should be slammed shut, with the last event 
-  // reflecting the change from LARGEST_CWND back to MSS
+  // window change events (each time by MSS bytes) until reaching the largest
+  // value when the client closes.
   //
   const uint32_t MSS = 536;
-  const uint32_t N_EVENTS = 21;
+  const uint32_t N_EVENTS = 20;
 
   CwndEvent event;
 
@@ -435,13 +427,15 @@
   event.m_newCwnd = newCwnd;
 
   m_responses.Add (event);
+  NS_LOG_DEBUG ("Cwnd change event " << m_responses.GetN () << " at " << Now ().As (Time::S) << " " << oldCwnd << " " << newCwnd);
 }
 
 void
 Ns3TcpCwndTestCase2::DoRun (void)
 { 
+  NS_LOG_DEBUG ("Starting test case 2");
   // Set up some default values for the simulation.
-  Config::SetDefault ("ns3::DropTailQueue::MaxPackets", UintegerValue (4));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (4));
 
   NodeContainer n0n1;
   n0n1.Create (2);
@@ -482,6 +476,12 @@
   // and setup ip routing tables to get total ip-level connectivity.
   Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
 
+  // Disable traffic control layer so that drops occur
+  TrafficControlHelper tch;
+  tch.Uninstall (dev0);
+  tch.Uninstall (dev1);
+  tch.Uninstall (dev2);
+
   // Set up the apps
   uint16_t servPort = 50000;
 
@@ -531,51 +531,58 @@
   // cut in half, and then add 3 segments (5360/2 + 3*536 = 4288)
   //
   
-  
-  
   const uint32_t MSS = 536;
-  const uint32_t N_EVENTS = 37;
+  const uint32_t N_EVENTS = 40;
 
   CwndEvent event;
 
+  NS_LOG_DEBUG ("Number of response events: " << m_responses.GetN ());
   NS_TEST_ASSERT_MSG_EQ (m_responses.GetN (), N_EVENTS, "Unexpected number of cwnd change events");
 
   // Ignore the first event logged (i=0) when m_cWnd goes from 0 to MSS bytes
   VerifyCwndRun (1, 10, 2 * MSS, MSS);
   
-  // Cwnd should be back to (10/2 + 3) = 8*MSS
+  // At the point of loss, sndNxt = 15545; sndUna = 9113.  FlightSize is 4824, 
+  // so there are 9 segments outstanding.  Cut ssthresh to 9/2 (2412) and 
+  // cwnd to (9/2 + 3) = 4020
   event = m_responses.Get (10);
-  NS_TEST_ASSERT_MSG_EQ (event.m_newCwnd, 8*MSS, "Wrong new cwnd value in cwnd change event " << 10);
+  NS_TEST_ASSERT_MSG_EQ (event.m_newCwnd, (MSS * 15)/2, "Wrong new cwnd value in cwnd change event " << 10);
 
-  VerifyCwndRun (11, 13, 9 * MSS, MSS);
+  // Verify that cwnd increments by one for a few segments
+  // from 8.5 at index 11 to 12.5 at index 15
+  VerifyCwndRun (11, 15, (MSS * 17)/2, MSS);
+
+  // partial ack at event 16, cwnd reset from 6700 (12.5*MSS) to 5092 (9.5*MSS)
+  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (16).m_newCwnd, (MSS * 19)/2, "Wrong new cwnd value in cwnd change event " << 16);
+
+  // partial ack again of 3 segments after one more acks, cwnd reset to 7.5 
+  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (18).m_newCwnd, (MSS * 15)/2, "Wrong new cwnd value in cwnd change event " << 18);
+
+  //DUP ACKS in remaining fast recovery
+  VerifyCwndRun (18, 20, (MSS * 15)/2, MSS);
+
+  // Process another partial ack
+  VerifyCwndRun (21, 24, (MSS * 13)/2, MSS);
+ 
+  //Leaving fast recovery at event 25; set cwnd to 3 segments
+  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (25).m_newCwnd,  (MSS * 3), "Wrong new cwnd value in cwnd change event " << 25);  
   
-  // partial ack, cwnd reset to 9
-  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (14).m_newCwnd, 9 * MSS, "Wrong new cwnd value in cwnd change event " << 14);
-
-  // partial ack, cwnd reset to 8 
-  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (16).m_newCwnd, 8 * MSS, "Wrong new cwnd value in cwnd change event " << 16);
-
-  //DUP ACKS in fast recovery
-  VerifyCwndRun (17, 18, 9 * MSS, MSS);
-
-  VerifyCwndRun (19, 22, 8 * MSS, MSS);
-  
-  //Leaving fast recovery
-  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (23).m_newCwnd, 5 * MSS, "Wrong new cwnd value in cwnd change event " << 23);  
-  
-  uint32_t cwnd = 5 * MSS;
+  // Until ssthresh, each event will increase cwnd by MSS
+  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (26).m_newCwnd, (4 * MSS), "Wrong new cwnd value in cwnd change event " << 26); 
+  NS_TEST_ASSERT_MSG_EQ (m_responses.Get (27).m_newCwnd, (5 * MSS), "Wrong new cwnd value in cwnd change event " << 27); 
   //In CongAvoid each event will increase cwnd by (MSS * MSS / cwnd)
-  for (uint32_t i = 24; i < N_EVENTS; ++i)
+  uint32_t cwnd = 5 * MSS;
+  for (uint32_t i = 28; i < N_EVENTS; ++i)
     {
       double adder = static_cast<double> (MSS * MSS) / cwnd;
       adder = std::max (1.0, adder);
       cwnd += static_cast<uint32_t> (adder);    
       NS_TEST_ASSERT_MSG_EQ (m_responses.Get (i).m_newCwnd, cwnd, "Wrong new cwnd value in cwnd change event " << i); 
     }
-    
+  NS_LOG_DEBUG ("Reading out the cwnd event log");  
   for (uint32_t i = 0; i < N_EVENTS; ++i)
   {
-    std::cout << "i: " << i << " newCwnd: " << m_responses.Get(i).m_newCwnd << " newCwnd segments " << static_cast<double> (m_responses.Get(i).m_newCwnd)/MSS << std::endl;
+    NS_LOG_DEBUG ("i: " << i << " newCwnd: " << m_responses.Get(i).m_newCwnd << " newCwnd segments " << static_cast<double> (m_responses.Get(i).m_newCwnd)/MSS);
   }
 }
 
diff -Naur ns-3.24.1/src/test/ns3tcp/ns3tcp-interop-test-suite.cc ns-3.25/src/test/ns3tcp/ns3tcp-interop-test-suite.cc
--- ns-3.24.1/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/ns3tcp-interop-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -61,7 +61,7 @@
 // The topology is just two nodes communicating over a point-to-point network.
 // The point-to-point network is chosen because it is simple and allows us to
 // easily generate pcap traces we can use to separately verify that the ns-3
-// implementation is responding correctly.  Once the opration is verified, we
+// implementation is responding correctly.  Once the operation is verified, we
 // capture a set of response vectors that are then checked in the test to
 // ensure that the ns-3 TCP continues to respond correctly over time.
 //
@@ -281,7 +281,7 @@
   // program.  So we provide the ability to generate a pcap trace of the 
   // test execution for your perusal.
   //
-  // Once the validation test is determined to be running exactly as exptected,
+  // Once the validation test is determined to be running exactly as expected,
   // we allow you to generate a file that contains the response vectors that 
   // will be checked during the actual execution of the test.
   //
diff -Naur ns-3.24.1/src/test/ns3tcp/ns3tcp-loss-test-suite.cc ns-3.25/src/test/ns3tcp/ns3tcp-loss-test-suite.cc
--- ns-3.24.1/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -308,9 +308,7 @@
       LogComponentEnable ("Ns3TcpLossTest", LOG_LEVEL_ALL);
       LogComponentEnable ("ErrorModel", LOG_LEVEL_DEBUG);
       LogComponentEnable ("TcpWestwood", LOG_LEVEL_ALL);
-      LogComponentEnable ("TcpNewReno", LOG_LEVEL_INFO);
-      LogComponentEnable ("TcpReno", LOG_LEVEL_INFO);
-      LogComponentEnable ("TcpTahoe", LOG_LEVEL_INFO);
+      LogComponentEnable ("TcpCongestionOps", LOG_LEVEL_INFO);
       LogComponentEnable ("TcpSocketBase", LOG_LEVEL_INFO);
     }
 
@@ -459,18 +457,6 @@
   SetDataDir ("src/test/ns3tcp/response-vectors");
   Packet::EnablePrinting ();  // Enable packet metadata for all test cases
 
-  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 0), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 1), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 2), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 3), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 4), TestCase::QUICK);
-
-  AddTestCase (new Ns3TcpLossTestCase ("Reno", 0), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Reno", 1), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Reno", 2), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Reno", 3), TestCase::QUICK);
-  AddTestCase (new Ns3TcpLossTestCase ("Reno", 4), TestCase::QUICK);
-
   AddTestCase (new Ns3TcpLossTestCase ("NewReno", 0), TestCase::QUICK);
   AddTestCase (new Ns3TcpLossTestCase ("NewReno", 1), TestCase::QUICK);
   AddTestCase (new Ns3TcpLossTestCase ("NewReno", 2), TestCase::QUICK);
diff -Naur ns-3.24.1/src/test/ns3tcp/ns3tcp-state-test-suite.cc ns-3.25/src/test/ns3tcp/ns3tcp-state-test-suite.cc
--- ns-3.24.1/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -278,7 +278,7 @@
   Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue (tcpModel));
   Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000));
   Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
-  Config::SetDefault ("ns3::DropTailQueue::MaxPackets", UintegerValue (20));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (20));
   Config::SetDefault ("ns3::TcpSocketBase::Timestamp", BooleanValue (false));
 
   if (m_writeLogging)
@@ -286,9 +286,7 @@
       LogComponentEnableAll (LOG_PREFIX_FUNC);
       LogComponentEnable ("ErrorModel", LOG_LEVEL_DEBUG);
       LogComponentEnable ("Ns3TcpStateTest", LOG_LEVEL_DEBUG);
-      LogComponentEnable ("TcpNewReno", LOG_LEVEL_INFO);
-      LogComponentEnable ("TcpReno", LOG_LEVEL_INFO);
-      LogComponentEnable ("TcpTahoe", LOG_LEVEL_INFO);
+      LogComponentEnable ("TcpCongestionOps", LOG_LEVEL_INFO);
       LogComponentEnable ("TcpSocketBase", LOG_LEVEL_INFO);
     }
 
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-interop-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,138 +1,138 @@
 ò          @   F   3  $   $   ^    g'     
-          Y+          ^   i'    
-         l          ^   m3}    
-         l          ^   q3}    
-         l         ^   u3}    
-         lK         ^   y3}    
-  $  "     l         ^   }3}    
-  5  3     l         ^   3}    
-  E  C     l         ^   3}    
-  U  T     lK         ^   3}    
-  f  d     l         ^   3}    
-  v  t     l         ^   3}    
-         l         ^   3}    
-         lK         ^   3}    
-         l         ^   3}    
-         l         ^   3}    
-         l         ^   3}    
-         lK         ^   3}    
-         l         ^   3}    
-         l         ^   3}    
+            Y+          ^   i'     
+         l          ^   m3     
+         l          ^   q3     
+         l         ^   u3     
+         lK         ^   y3     
+  $       l         ^   }3     
+  5  '     l         ^   3     
+  E  8     l         ^   3     
+  U  H     lK         ^   3     
+  f  Y     l         ^   3     
+  v  i     l         ^   3     
+    y     l         ^   3     
+         lK         ^   3     
+         l         ^   3     
+         l         ^   3     
+         l         ^   3     
+         lK         ^   3     
+         l         ^   3     
+         l         ^   3     
   	
-  	     l         ^   3}    
-  	  	     lK         ^   3}    
-  	*  	)     l         ^   3}    
-  	;  	9     l         ^   3}    
-  	K  	I     l         ^   3}    
-  	\  	Z     lK         ^   3}    
-  	l  	j     l         ^   3}    
-  	|  	z     l         ^   3}    
-  	  	     l         ^   3}    
-  	  	     lK         ^   3}    
-  	  	     l         ^   3}    
-  	  	     l         ^   3}    
-  	  	     l         ^   3}    
-  	  	     lK         ^   3}    
-  	  	     l         ^   3}    
-  	  	     l         ^   3}    
+       l         ^   3     
+  	  	     lK         ^   3     
+  	*  	     l         ^   3     
+  	;  	.     l         ^   3     
+  	K  	>     l         ^   3     
+  	\  	N     lK         ^   3     
+  	l  	_     l         ^   3     
+  	|  	o     l         ^   3     
+  	  	     l         ^   3     
+  	  	     lK         ^   3     
+  	  	     l         ^   3     
+  	  	     l         ^   3     
+  	  	     l         ^   3     
+  	  	     lK         ^   3     
+  	  	     l         ^   3     
+  	  	     l         ^   3     
   
   
-     l	         ^   3}    
+     l	         ^   3     
   
    
-     lK	         ^   3}    
+     lK	         ^   3     
   
 1  
-/     l	         ^   3}    
+#     l	         ^   3     
   
 A  
-?     l	         ^   3}    
+4     l	         ^   3     
   
 Q  
-O     l
-         ^   3}    
+D     l
+         ^   3     
   
 b  
-`     lK
-         ^   	3}    
+T     lK
+         ^   	3     
   
 r  
-p     l
-         ^   3}    
+e     l
+         ^   3     
   
   
-     l
-         ^   3}    
+u     l
+         ^   3     
   
   
-     l         ^   3}    
+     l         ^   3     
   
   
-     lK         ^   3}    
+     lK         ^   3     
   
   
-     l         ^   3}    
+     l         ^   3     
   
   
-     l         ^   !3}    
+     l         ^   !3     
   
   
-     l         ^   %3}    
+     l         ^   %3     
   
   
-     lK         ^   )3}    
+     lK         ^   )3     
   
   
-     l         ^   -3}    
-         l         ^   13}    
-         l         ^   53}    
-  &  $     lK         ^   93}    
-  7  5     l         ^   =3}    
-  G  E     l         ^   A3}    
-  X  V     l         ^   E3}    
-  h  f     lK         ^   I3}    
-  x  v     l         ^   M3}    
-         l         ^   Q3}    
-         l         ^   U3}    
-         ,	          ^   Y3}    
-         )         ^   ['     
-         ,i          ^   _3}    
-         ,          ^   c3}    
-         ,          ^   g3}    
-         ,)         ^   k3}    
-         ,i         ^   o3}    
-         ,         ^   s3}    
-    
-     ,         ^   w3}    
-         ,)         ^   {3}    
-  -  +     ,i         ^   3}    
-  =  <     ,         ^   3}    
-  N  L     ,         ^   3}    
-  ^  \     ,)         ^   3}    
-  o  m     ,i         ^   3}    
-    }     ,         ^   3}    
-         ,         ^   3}    
-         ,)         ^   3}    
-         ,i         ^   3}    
-         ,         ^   3}    
-         ,         ^   3}    
-         ,)         ^   3}    
-         ,i         ^   3}    
-          ,         ^   3}    
-         ,         ^   3}    
-  #  !     ,)         ^   3}    
-  3  1     ,i         ^   3}    
-  D  B     ,         ^   3}    
-  T  R     ,         ^   3}    
-  d  b     ,)         ^   3}    
-  u  s     ,i         ^   3}    
-         ,         ^   3}    
-         ,         ^   3}    
-         ,)         ^   3}    
-         ,i         ^   3}    
-         ,         ^   3}    
-         ,         ^   3}    
-         ,)	         ^   3}    
-         I	         ^   (    
-          I	         ^   (     
-       
\ No newline at end of file
+     l         ^   -3     
+    
+     l         ^   13     
+    	     l         ^   53     
+  &       lK         ^   93     
+  7  )     l         ^   =3     
+  G  :     l         ^   A3     
+  X  J     l         ^   E3     
+  h  [     lK         ^   I3     
+  x  k     l         ^   M3     
+    {     l         ^   Q3     
+         l         ^   U3     
+         ,	          ^   Y3     
+         )         ^   ['     
+         ,i          ^   _3     
+         ,          ^   c3     
+         ,          ^   g3     
+         ,)         ^   k3     
+         ,i         ^   o3     
+         ,         ^   s3     
+         ,         ^   w3     
+         ,)         ^   {3     
+  -        ,i         ^   3     
+  =  0     ,         ^   3     
+  N  A     ,         ^   3     
+  ^  Q     ,)         ^   3     
+  o  a     ,i         ^   3     
+    r     ,         ^   3     
+         ,         ^   3     
+         ,)         ^   3     
+         ,i         ^   3     
+         ,         ^   3     
+         ,         ^   3     
+         ,)         ^   3     
+         ,i         ^   3     
+         ,         ^   3     
+         ,         ^   3     
+  #       ,)         ^   3     
+  3  &     ,i         ^   3     
+  D  6     ,         ^   3     
+  T  G     ,         ^   3     
+  d  W     ,)         ^   3     
+  u  g     ,i         ^   3     
+    x     ,         ^   3     
+         ,         ^   3     
+         ,)         ^   3     
+         ,i         ^   3     
+         ,         ^   3     
+         ,         ^   3     
+         ,)	         ^   3     
+         I	         ^   (     
+          I	         ^   (     
+       
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno0-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -10,4 +10,4 @@
  @     P    P                                                    
  @     P    P                                                    
  @     P    P                                                    
- @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P q   P                                                    EF @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    a @     P    P                                                     @     P    P                                                     @     P "   P                                                    }: @     P &   P                                                    1c @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    M @     P 6i   P                                                     @     P :Q   P                                                    . @     P >9   P                                                    )  @     P B!   P                                                    =  @     P F	   P                                                    f  @     P I   P                                                    E  @     P M   P                                                      @     P Q   P                                                      @     P U   P                                                    a	 @     P Y   P                                                    2 @     P ]y   P                                                    Z @     P aa   P                                                    } @     P eI   P                                                    1 @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    M& @     P t   P                                                    O @     P x   P                                                    w @     P |   P                                                    i @     P    P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    9C @     P A   P                                                    k @     P )   P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q7 @     P    P                                                    %` @     P    P                                                    و @     P    P                                                     @     P i   P                                                    A @     P Q   P                                                     @     P 9   P                                                    + @     P !   P                                                    ]T @     P 	   P                                                    } @     P    P                                                    ť @     P    P                                                    y @     P    P                                                    - @     P ҩ   P                                                     @     P ֑   P                                                    H @     P y   P                                                    Iq @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                    < @     P    P                                                    e @     P    P                                                    5 @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P q   P                                                    1 @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
+ @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    EF @     P    P                                                    EF @     P "   P                                                    n @     P &   P                                                    n @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    a @     P 6i   P                                                    a @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                     @     P I   P                                                    }: @     P M   P                                                    }: @     P Q   P                                                    1c @     P U   P                                                    1c @     P Y   P                                                     @     P ]y   P                                                     @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    M @     P m   P                                                    M @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    . @     P |   P                                                    . @     P    P                                                    )  @     P    P                                                    )  @     P q   P                                                    =  @     P Y   P                                                    =  @     P A   P                                                    f  @     P )   P                                                    f  @     P    P                                                    E  @     P    P                                                    E  @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                    a	 @     P i   P                                                    a	 @     P Q   P                                                    2 @     P 9   P                                                    2 @     P !   P                                                    Z @     P 	   P                                                    Z @     P    P                                                    } @     P    P                                                    } @     P    P                                                    1 @     P ҩ   P                                                    1 @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    M& @     P    P                                                    M& @     P    P                                                    O @     P    P                                                    O @     P    P                                                    w @     P    P                                                    w @     P    P                                                    i @     P    P                                                    i @     P q   P                                                     @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno1-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,15 +1,14 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  6   P                                                    D @     P  qI   P                                                    Em @     P  u1   P                                                     @     P  y   P                                                     @     P  }   P                                                    a @     P     P                                                     @     P     P                                                     @     P     P                                                    - @     P     P                                                     @     P     P                                                     @     P  q   P                                                     @     P  Y   P                                                    I @     P  A   P                                                    #	 @     P  )   P                                                    L	 @     P     P                                                    
- @     P     P                                                    ɽ @     P     P                                                    } @     P     P                                                    1 @     P     P                                                    7 @     P     P                                                    ` @     P     P                                                    ` @     P  i   P                                                    M @     P  Q   P                                                     @     P  9   P                                                    - @     P  !   P                                                    e @     P  	   P                                                    # @     P     P                                                    	  @     P     P                                                    A2  @     P     P                                                    Z  @     P  ީ   P                                                      @     P     P                                                      @     P  y   P                                                    ]  @     P  a   P                                                      @     P  I   P                                                      @     P  1   P                                                     @     P     P                                                    u @     P     P                                                    )F @     P     P                                                    n @     P    P                                                     @     P    P                                                    E @     P 	   P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    a: @     P A   P                                                    %= @     P )   P                                                    ]1 @     P !   P                                                    Z @     P $   P                                                    ł @     P (   P                                                    y @     P ,   P                                                    - @     P 0   P                                                     @     P 4   P                                                    % @     P 8   P                                                    IN @     P <i   P                                                    v @     P @Q   P                                                    v @     P D9   P                                                     @     P H!   P                                                    y @     P L	   P                                                    m	 @     P O   P                                                    	 @     P S   P                                                    a	 @     P W   P                                                    	 @     P [   P                                                    
- @     P _   P                                                    }9
- @     P cy   P                                                    1b
- @     P ga   P                                                    
- @     P kI   P                                                    
- @     P o1   P                                                    M
- @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    ] @     P ~   P                                                     @     P    P                                                    I @     P    P                                                     @     P    P                                                    $ @     P q   P                                                    eM @     P Y   P                                                    v @     P A   P                                                    ͞ @     P )   P                                                     @     P    P                                                    5 @     P    P                                                     @     P    P                                                    A @     P    P                                                    Qj @     P    P                                                    Qj @     P    P                                                     @     P    P                                                      @     P i   P                                                      @     P Q   P                                                    Y  @     P 9   P                                                     @     P !   P                                                    G @     P 	   P                                                    up @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P ة   P                                                    E @     P ܑ   P                                                    ; @     P y   P                                                    d @     P a   P                                                    a @     P I   P                                                    U @     P 1   P                                                    U @     P    P                                                     @     P    P                                                    A
- @     P    P                                                    2 @     P    P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P q   P                                                    y @     P Y   P                                                    -' @     P A   P                                                    O @     P )   P                                                    x @     P    P                                                    I @     P    P                                                     @     P "   P                                                    ) @     P &   P                                                    R @     P *   P                                                    ) @     P .   P                                                    ) @     P 2   P                                                    F @     P 6i   P                                                    o @     P :Q   P                                                    E @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                    a @     P I   P                                                    ; @     P M   P                                                    c @     P Q   P                                                    } @     P U   P                                                    1 @     P Y   P                                                     @     P ]y   P                                                    	 @     P aa   P                                                    f	 @     P eI   P                                                    A	 @     P i1   P                                                    Z
- @     P m   P                                                    y
- @     P q   P                                                    y
- @     P t   P                                                    -
- @     P x   P                                                    
- @     P |   P                                                    
- @     P    P                                                    I& @     P    P                                                    N @     P q   P                                                    w @     P Y   P                                                    e @     P A   P                                                     @     P )   P                                                     @     P    P                                                     @     P    P                                                    5C @     P    P                                                    k @     P    P                                                    ) @     P    P                                                     @     P    P                                                    a @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    } @     P 9   P                                                    } @     P !   P                                                    1: @     P 	   P                                                    b @     P    P                                                     @     P    P                                                    M @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                    i. @     P y   P                                                      @     P a   P                                                    =  @     P I   P                                                    Ef  @     P 1   P                                                      @     P    P                                                      @     P    P                                                    a  @     P    P                                                     @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                    4 @     P q   P                                                    4 @     P 	Y   P                                                           P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  qI   P                                                    ' @     P  u1   P                                                    YP @     P  6   P                                                     @     P  y   P                                                     @     P  }   P                                                    a @     P     P                                                     @     P     P                                                    ; @     P     P                                                    Ad @     P     P                                                     @     P     P                                                     @     P  q   P                                                    I @     P  Y   P                                                    #	 @     P  A   P                                                    L	 @     P  )   P                                                    )x
+ @     P     P                                                    ݠ
+ @     P     P                                                    
+ @     P     P                                                    1 @     P     P                                                    1 @     P     P                                                    7 @     P     P                                                    ` @     P     P                                                    M @     P  i   P                                                    Ŵ @     P  Q   P                                                    y @     P  9   P                                                    - @     P  !   P                                                    	  @     P  	   P                                                    A2  @     P     P                                                    A2  @     P     P                                                    Z  @     P     P                                                      @     P  ީ   P                                                    ]  @     P     P                                                    ! @     P  y   P                                                     @     P  a   P                                                      @     P  I   P                                                    )F @     P  1   P                                                    n @     P     P                                                     @     P     P                                                    E @     P     P                                                    E @     P    P                                                     @     P    P                                                     @     P 	   P                                                     @     P    P                                                    q @     P q   P                                                    %= @     P Y   P                                                    ł @     P A   P                                                    y @     P )   P                                                    - @     P !   P                                                     @     P $   P                                                    % @     P (   P                                                    % @     P ,   P                                                    IN @     P 0   P                                                    v @     P 4   P                                                    Y( @     P 8   P                                                    Q @     P <i   P                                                    y @     P @Q   P                                                    a	 @     P D9   P                                                    	 @     P H!   P                                                    
+ @     P L	   P                                                    }9
+ @     P O   P                                                    1b
+ @     P S   P                                                    
+ @     P W   P                                                    
+ @     P [   P                                                    
+ @     P _   P                                                    M
+ @     P cy   P                                                    d @     P ga   P                                                     @     P kI   P                                                    ] @     P o1   P                                                     @     P s   P                                                    $ @     P w   P                                                    eM @     P z   P                                                    v @     P ~   P                                                    ͞ @     P    P                                                     @     P    P                                                    5 @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    A @     P A   P                                                     @     P )   P                                                    E @     P    P                                                     @     P    P                                                    Y  @     P    P                                                     @     P    P                                                    G @     P    P                                                    up @     P    P                                                    ) @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    E @     P 9   P                                                    ; @     P !   P                                                    d @     P 	   P                                                    d @     P    P                                                     @     P    P                                                     @     P    P                                                    U @     P ة   P                                                    2 @     P ܑ   P                                                    [ @     P y   P                                                    ] @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    y @     P    P                                                    -' @     P    P                                                    O @     P    P                                                    x @     P    P                                                    I @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P q   P                                                    e @     P Y   P                                                    D @     P A   P                                                    o @     P )   P                                                    E @     P    P                                                     @     P    P                                                     @     P "   P                                                    a @     P &   P                                                    ; @     P *   P                                                    c @     P .   P                                                    } @     P 2   P                                                    1 @     P 6i   P                                                     @     P :Q   P                                                    	 @     P >9   P                                                    M/	 @     P B!   P                                                    X	 @     P F	   P                                                    X	 @     P I   P                                                    	 @     P M   P                                                    i	 @     P Q   P                                                    -
+ @     P U   P                                                    
+ @     P Y   P                                                    
+ @     P ]y   P                                                    I& @     P aa   P                                                    N @     P eI   P                                                    w @     P i1   P                                                    e @     P m   P                                                     @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    5C @     P |   P                                                    k @     P    P                                                     @     P    P                                                    Q @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    } @     P    P                                                    1: @     P    P                                                    b @     P    P                                                     @     P    P                                                    M @     P    P                                                     @     P    P                                                     @     P i   P                                                    i. @     P Q   P                                                      @     P 9   P                                                    =  @     P !   P                                                    Ef  @     P 	   P                                                      @     P    P                                                      @     P    P                                                    a  @     P    P                                                    	 @     P ҩ   P                                                    	 @     P ֑   P                                                    1 @     P y   P                                                    % @     P a   P                                                     @     P I   P                                                    4 @     P 1   P                                                    A] @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P    P                                                      @     P    P                                                    ( @     P    P                                                    yQ @     P    P                                                    -z @     P q   P                                                     @     P 	Y   P                                                    !       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno2-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,14 +1,11 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  6   P                                                    Em @     P  qI   P                                                     @     P  u1   P                                                     @     P  y   P                                                    a @     P  }   P                                                     @     P     P                                                     @     P  :   P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    I @     P     P                                                    #	 @     P  q   P                                                    L	 @     P  Y   P                                                    E
- @     P  A   P                                                     @     P  )   P                                                    } @     P     P                                                    1 @     P     P                                                    1 @     P     P                                                    7 @     P     P                                                    ` @     P     P                                                    M @     P     P                                                    . @     P     P                                                    W @     P  i   P                                                    # @     P  Q   P                                                    	  @     P  9   P                                                    A2  @     P  !   P                                                    Z  @     P  	   P                                                    Z  @     P     P                                                      @     P     P                                                    ]  @     P     P                                                    =) @     P  ީ   P                                                    Q @     P     P                                                    u @     P  y   P                                                    )F @     P  a   P                                                    n @     P  I   P                                                     @     P  1   P                                                    E @     P     P                                                    E @     P     P                                                     @     P     P                                                     @     P    P                                                    e @     P    P                                                     @     P 	   P                                                    Z @     P    P                                                    ł @     P q   P                                                    y @     P Y   P                                                    - @     P A   P                                                     @     P )   P                                                    % @     P !   P                                                    IN @     P $   P                                                    IN @     P (   P                                                    v @     P ,   P                                                    u @     P 0   P                                                    ) @     P 4   P                                                    	 @     P 8   P                                                    a	 @     P <i   P                                                    	 @     P @Q   P                                                    
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    ' @     P  qI   P                                                    YP @     P  u1   P                                                    y @     P  6   P                                                     @     P  y   P                                                    a @     P  }   P                                                     @     P     P                                                    Ad @     P     P                                                     @     P     P                                                     @     P  :   P                                                     @     P     P                                                    I @     P     P                                                    #	 @     P  q   P                                                    L	 @     P  Y   P                                                    ݠ
+ @     P  A   P                                                    
+ @     P  )   P                                                    E
+ @     P     P                                                     @     P     P                                                    7 @     P     P                                                    ` @     P     P                                                    M @     P     P                                                    y @     P     P                                                    - @     P     P                                                    . @     P  i   P                                                    . @     P  Q   P                                                    W @     P  9   P                                                    A2  @     P  !   P                                                    Z  @     P  	   P                                                      @     P     P                                                     @     P     P                                                      @     P     P                                                    =) @     P  ީ   P                                                    Q @     P     P                                                    Q @     P  y   P                                                    z @     P  a   P                                                    n @     P  I   P                                                     @     P  1   P                                                    E @     P     P                                                    q @     P     P                                                    %= @     P     P                                                    e @     P    P                                                     @     P    P                                                    A @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    y @     P Y   P                                                    - @     P A   P                                                     @     P )   P                                                    Q @     P !   P                                                    y @     P $   P                                                    u @     P (   P                                                    ) @     P ,   P                                                     @     P 0   P                                                    	 @     P 4   P                                                    EE	 @     P 8   P                                                    EE	 @     P <i   P                                                    	 @     P @Q   P                                                    
  @     P D9   P                                                    }9
- @     P H!   P                                                    1b
- @     P L	   P                                                    
- @     P O   P                                                    
- @     P S   P                                                    
- @     P W   P                                                    M
- @     P [   P                                                     @     P _   P                                                     @     P cy   P                                                    I @     P ga   P                                                     @     P kI   P                                                    $ @     P o1   P                                                    eM @     P s   P                                                    v @     P w   P                                                    ͞ @     P z   P                                                     @     P ~   P                                                    5 @     P    P                                                     @     P    P                                                    A @     P    P                                                    A @     P q   P                                                     @     P Y   P                                                    !  @     P A   P                                                      @     P )   P                                                    Y  @     P    P                                                     @     P    P                                                    G @     P    P                                                    up @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P    P                                                    E @     P i   P                                                    ; @     P Q   P                                                    d @     P 9   P                                                    d @     P !   P                                                    	 @     P 	   P                                                    > @     P    P                                                    A
- @     P    P                                                    2 @     P    P                                                    [ @     P ة   P                                                    ] @     P ܑ   P                                                     @     P y   P                                                     @     P a   P                                                    y @     P I   P                                                    -' @     P 1   P                                                    O @     P    P                                                    x @     P    P                                                    I @     P    P                                                     @     P    P                                                    R @     P    P                                                    R @     P    P                                                    Y{ @     P    P                                                    F @     P q   P                                                    o @     P Y   P                                                    E @     P A   P                                                     @     P )   P                                                     @     P    P                                                    a @     P    P                                                    ; @     P "   P                                                    c @     P &   P                                                    } @     P *   P                                                    1 @     P .   P                                                     @     P 2   P                                                    	 @     P 6i   P                                                    A	 @     P :Q   P                                                    	 @     P >9   P                                                    	 @     P B!   P                                                    	 @     P F	   P                                                    y
- @     P I   P                                                    -
- @     P M   P                                                    
- @     P Q   P                                                    
- @     P U   P                                                    I& @     P Y   P                                                    N @     P ]y   P                                                    w @     P aa   P                                                    e @     P eI   P                                                     @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    5C @     P t   P                                                     @     P x   P                                                     @     P |   P                                                    E @     P    P                                                    E @     P    P                                                    E @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    } @     P )   P                                                    1: @     P    P                                                    b @     P    P                                                     @     P    P                                                    M @     P    P                                                     @     P    P                                                     @     P    P                                                    i. @     P    P                                                      @     P i   P                                                    =  @     P Q   P                                                    9  @     P 9   P                                                      @     P !   P                                                     @     P 	   P                                                    U@ @     P    P                                                    	i @     P    P                                                    q @     P    P                                                    q @     P ҩ   P                                                    % @     P ֑   P                                                     @     P y   P                                                    4 @     P a   P                                                    A] @     P I   P                                                     @     P 1   P                                                     @     P    P                                                    ] @     P    P                                                      @     P    P                                                    ( @     P    P                                                    yQ @     P    P                                                    -z @     P    P                                                     @     P    P                                                    + @     P q   P                                                    =T @     P 	Y   P                                                    }       P B   P     
\ No newline at end of file
+ @     P H!   P                                                     @     P L	   P                                                    ] @     P O   P                                                     @     P S   P                                                     @     P W   P                                                    y0 @     P [   P                                                    -Y @     P _   P                                                     @     P cy   P                                                     @     P ga   P                                                    $ @     P kI   P                                                    $ @     P o1   P                                                    eM @     P s   P                                                    v @     P w   P                                                    E @     P z   P                                                     @     P ~   P                                                     @     P    P                                                    !  @     P    P                                                    *  @     P    P                                                    S  @     P q   P                                                    =|  @     P Y   P                                                      @     P A   P                                                     @     P )   P                                                    G @     P    P                                                    G @     P    P                                                    up @     P    P                                                    ) @     P    P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                    > @     P i   P                                                    qg @     P Q   P                                                    % @     P 9   P                                                    ٸ @     P !   P                                                     @     P 	   P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                    y @     P y   P                                                    = @     P a   P                                                    ) @     P I   P                                                    R @     P 1   P                                                    Y{ @     P    P                                                     @     P    P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    E @     P    P                                                     @     P    P                                                     @     P q   P                                                    a @     P Y   P                                                    ; @     P A   P                                                    c @     P )   P                                                    c @     P    P                                                    =	 @     P    P                                                    f	 @     P "   P                                                    A	 @     P &   P                                                    	 @     P *   P                                                    	 @     P .   P                                                    ]	
+ @     P 2   P                                                    2
+ @     P 6i   P                                                    Z
+ @     P :Q   P                                                    
+ @     P >9   P                                                    
+ @     P B!   P                                                    I& @     P F	   P                                                    N @     P I   P                                                    w @     P M   P                                                    e @     P Q   P                                                     @     P U   P                                                     @     P Y   P                                                    uz @     P ]y   P                                                    ) @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    E @     P m   P                                                    E @     P q   P                                                    n @     P t   P                                                    a @     P x   P                                                    } @     P |   P                                                    1: @     P    P                                                    b @     P    P                                                     @     P q   P                                                    M @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    i. @     P    P                                                    t  @     P    P                                                    t  @     P    P                                                      @     P    P                                                    9  @     P    P                                                      @     P    P                                                     @     P    P                                                    U@ @     P i   P                                                    	i @     P Q   P                                                     @     P 9   P                                                     @     P !   P                                                    4 @     P 	   P                                                    A] @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P ҩ   P                                                      @     P ֑   P                                                    ( @     P y   P                                                    m @     P a   P                                                    ! @     P I   P                                                    ! @     P 1   P                                                     @     P    P                                                    + @     P    P                                                    =T @     P    P                                                    | @     P    P                                                     @     P    P                                                    Y @     P    P                                                     @     P    P                                                    uH @     P q   P                                                    )q @     P 	Y   P                                                    i       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno3-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,11 +1,14 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  6   P                                                     @     P  qI   P                                                     @     P  u1   P                                                    a @     P  y   P                                                     @     P  }   P                                                    ] @     P  :   P                                                    ] @     P     P                                                     @     P     P                                                    I @     P     P                                                    #	 @     P     P                                                    L	 @     P     P                                                     @     P  >   P                                                     @     P  q   P                                                    C @     P  Y   P                                                    1 @     P  A   P                                                    7 @     P  )   P                                                    ` @     P     P                                                    M @     P     P                                                    W @     P     P                                                    I @     P     P                                                     @     P     P                                                    	  @     P     P                                                    	  @     P     P                                                    A2  @     P  i   P                                                    Z  @     P  Q   P                                                      @     P  9   P                                                    Q @     P  !   P                                                    z @     P  	   P                                                    Y @     P     P                                                    )F @     P     P                                                    n @     P     P                                                     @     P  ީ   P                                                     @     P     P                                                    E @     P  y   P                                                     @     P  a   P                                                     @     P  I   P                                                    A @     P  1   P                                                     @     P     P                                                    ł @     P     P                                                    y @     P     P                                                    - @     P    P                                                     @     P    P                                                     @     P 	   P                                                    % @     P    P                                                    IN @     P q   P                                                    ) @     P Y   P                                                     @     P A   P                                                    	 @     P )   P                                                    a	 @     P !   P                                                    	 @     P $   P                                                    
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  qI   P                                                    y @     P  u1   P                                                     @     P  6   P                                                    a @     P  y   P                                                     @     P  }   P                                                     @     P     P                                                     @     P     P                                                    ] @     P  :   P                                                    ] @     P     P                                                    #	 @     P     P                                                    L	 @     P     P                                                    
+ @     P  q   P                                                    E
+ @     P  Y   P                                                     @     P  >   P                                                     @     P  A   P                                                    C @     P  )   P                                                    ` @     P     P                                                    M @     P     P                                                    - @     P     P                                                    . @     P     P                                                    W @     P     P                                                    I @     P     P                                                     @     P     P                                                    Z  @     P  i   P                                                      @     P  Q   P                                                      @     P  9   P                                                    =) @     P  !   P                                                    Q @     P  	   P                                                    Q @     P     P                                                    z @     P     P                                                    Y @     P     P                                                     @     P  ީ   P                                                    E @     P     P                                                    %= @     P  y   P                                                    e @     P  a   P                                                     @     P  I   P                                                    A @     P  1   P                                                    A @     P     P                                                     @     P     P                                                     @     P     P                                                    - @     P    P                                                     @     P    P                                                    y @     P 	   P                                                    u @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                    	 @     P A   P                                                    EE	 @     P )   P                                                    EE	 @     P !   P                                                    m	 @     P $   P                                                    
  @     P (   P                                                    }9
- @     P ,   P                                                    1b
- @     P 0   P                                                    
- @     P 4   P                                                    
- @     P 8   P                                                    
- @     P <i   P                                                     @     P @Q   P                                                    y0 @     P D9   P                                                    -Y @     P H!   P                                                     @     P L	   P                                                    $ @     P O   P                                                    eM @     P S   P                                                    v @     P W   P                                                    ͞ @     P [   P                                                     @     P _   P                                                    5 @     P cy   P                                                    5 @     P ga   P                                                     @     P kI   P                                                    !  @     P o1   P                                                    *  @     P s   P                                                    S  @     P w   P                                                    Y  @     P z   P                                                     @     P ~   P                                                    G @     P    P                                                    up @     P    P                                                    ) @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    E @     P A   P                                                    ; @     P )   P                                                    ; @     P    P                                                    > @     P    P                                                    qg @     P    P                                                    % @     P    P                                                    2 @     P    P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    y @     P 9   P                                                    -' @     P !   P                                                    O @     P 	   P                                                    x @     P    P                                                    I @     P    P                                                    I @     P    P                                                    Y{ @     P ة   P                                                     @     P ܑ   P                                                     @     P y   P                                                    o @     P a   P                                                    E @     P I   P                                                     @     P 1   P                                                     @     P    P                                                    a @     P    P                                                    ; @     P    P                                                    c @     P    P                                                    } @     P    P                                                    1 @     P    P                                                     @     P    P                                                    	 @     P q   P                                                    	 @     P Y   P                                                    	 @     P A   P                                                    	 @     P )   P                                                    ]	
- @     P    P                                                    -
- @     P    P                                                    
- @     P "   P                                                    
- @     P &   P                                                    I& @     P *   P                                                    N @     P .   P                                                    w @     P 2   P                                                    e @     P 6i   P                                                     @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                    5C @     P F	   P                                                     @     P I   P                                                    E @     P M   P                                                    E @     P Q   P                                                    E @     P U   P                                                    n @     P Y   P                                                     @     P ]y   P                                                    } @     P aa   P                                                    1: @     P eI   P                                                    b @     P i1   P                                                     @     P m   P                                                    M @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    i. @     P |   P                                                      @     P    P                                                    =  @     P    P                                                      @     P q   P                                                     @     P Y   P                                                    U@ @     P A   P                                                    	i @     P )   P                                                    	i @     P    P                                                     @     P    P                                                    % @     P    P                                                     @     P    P                                                    4 @     P    P                                                    A] @     P    P                                                     @     P    P                                                     @     P i   P                                                    ] @     P Q   P                                                      @     P 9   P                                                    ( @     P !   P                                                    yQ @     P 	   P                                                    -z @     P    P                                                    + @     P    P                                                    =T @     P    P                                                    | @     P ҩ   P                                                     @     P ֑   P                                                    Y @     P y   P                                                     @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                    E @     P    P                                                     @     P    P                                                    < @     P    P                                                    ae @     P q   P                                                     @     P 	Y   P                                                    		       P B   P     
\ No newline at end of file
+ @     P ,   P                                                    ] @     P 0   P                                                     @     P 4   P                                                     @     P 8   P                                                    y0 @     P <i   P                                                    -Y @     P @Q   P                                                     @     P D9   P                                                     @     P H!   P                                                     @     P L	   P                                                    I @     P O   P                                                    eM @     P S   P                                                    v @     P W   P                                                     @     P [   P                                                     @     P _   P                                                    !  @     P cy   P                                                    *  @     P ga   P                                                    S  @     P kI   P                                                    =|  @     P o1   P                                                      @     P s   P                                                      @     P w   P                                                    Y  @     P z   P                                                    Y  @     P ~   P                                                    G @     P    P                                                    up @     P    P                                                    U @     P    P                                                    	 @     P q   P                                                    > @     P Y   P                                                    qg @     P A   P                                                    % @     P )   P                                                    ٸ @     P    P                                                     @     P    P                                                    A
+ @     P    P                                                    2 @     P    P                                                    [ @     P    P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P i   P                                                    ) @     P Q   P                                                    R @     P 9   P                                                    Y{ @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    F @     P ة   P                                                    o @     P ܑ   P                                                    E @     P y   P                                                     @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    a @     P    P                                                    f	 @     P    P                                                    A	 @     P    P                                                    	 @     P    P                                                    	 @     P    P                                                    ]	
+ @     P    P                                                    2
+ @     P    P                                                    Z
+ @     P q   P                                                    y
+ @     P Y   P                                                    -
+ @     P A   P                                                    
+ @     P )   P                                                    
+ @     P    P                                                    I& @     P    P                                                    N @     P "   P                                                    w @     P &   P                                                    w @     P *   P                                                    ) @     P .   P                                                     @     P 2   P                                                     @     P 6i   P                                                    E @     P :Q   P                                                    E @     P >9   P                                                    n @     P B!   P                                                    a @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                    } @     P Q   P                                                    1: @     P U   P                                                    b @     P Y   P                                                     @     P ]y   P                                                    M @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                      @     P m   P                                                    9  @     P q   P                                                      @     P t   P                                                     @     P x   P                                                    U@ @     P |   P                                                    	i @     P    P                                                     @     P    P                                                    q @     P q   P                                                    % @     P Y   P                                                     @     P A   P                                                    4 @     P )   P                                                    A] @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P    P                                                      @     P    P                                                    ! @     P    P                                                    ! @     P    P                                                     @     P i   P                                                    + @     P Q   P                                                    =T @     P 9   P                                                    | @     P !   P                                                     @     P 	   P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                    uH @     P ҩ   P                                                    )q @     P ֑   P                                                    ݙ @     P y   P                                                     @     P a   P                                                    E @     P I   P                                                     @     P 1   P                                                    < @     P    P                                                     @     P    P                                                    q? @     P    P                                                    q? @     P    P                                                    %h @     P    P                                                    ِ @     P    P                                                     @     P    P                                                    A @     P q   P                                                    
+ @     P 	Y   P                                                    q       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-NewReno4-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,13 +1,17 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    u @     P  6   P                                                     @     P  qI   P                                                    a @     P  u1   P                                                     @     P  y   P                                                     @     P  :   P                                                     @     P  }   P                                                    I @     P     P                                                    #	 @     P     P                                                    L	 @     P     P                                                    C @     P  >   P                                                    C @     P     P                                                    al @     P     P                                                    7 @     P  q   P                                                    ` @     P  Y   P                                                    M @     P  A   P                                                    I @     P  Bi   P                                                    I @     P  )   P                                                     @     P     P                                                     @     P     P                                                    A2  @     P     P                                                    Z  @     P     P                                                      @     P     P                                                    z @     P     P                                                    Y @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    n @     P  !   P                                                     @     P  	   P                                                    E @     P     P                                                    A @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    ]1 @     P     P                                                    Z @     P  y   P                                                    y @     P  a   P                                                    y @     P  I   P                                                    - @     P  1   P                                                     @     P     P                                                     @     P     P                                                    	 @     P     P                                                    EE	 @     P    P                                                    m	 @     P    P                                                    	 @     P 	   P                                                    	 @     P    P                                                    
- @     P q   P                                                    
- @     P Y   P                                                    }9
- @     P A   P                                                    1b
- @     P )   P                                                    y0 @     P !   P                                                    -Y @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    I @     P 0   P                                                    $ @     P 4   P                                                    eM @     P 8   P                                                    v @     P <i   P                                                    ͞ @     P @Q   P                                                    ͞ @     P D9   P                                                     @     P H!   P                                                    *  @     P L	   P                                                    S  @     P O   P                                                    =|  @     P S   P                                                      @     P W   P                                                      @     P [   P                                                     @     P _   P                                                    G @     P cy   P                                                    up @     P ga   P                                                    ) @     P kI   P                                                     @     P o1   P                                                     @     P s   P                                                     @     P w   P                                                    qg @     P z   P                                                    % @     P ~   P                                                    ٸ @     P    P                                                     @     P    P                                                    A
- @     P    P                                                    [ @     P q   P                                                    ] @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    y @     P    P                                                    -' @     P    P                                                    O @     P    P                                                    O @     P    P                                                     @     P    P                                                     @     P    P                                                    u @     P    P                                                    ) @     P i   P                                                    F @     P Q   P                                                    E @     P 9   P                                                     @     P !   P                                                     @     P 	   P                                                    a @     P    P                                                    ; @     P    P                                                    c @     P    P                                                    } @     P ة   P                                                    1 @     P ܑ   P                                                    1 @     P y   P                                                    	 @     P a   P                                                    ]	
- @     P I   P                                                    2
- @     P 1   P                                                    Z
- @     P    P                                                    y
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    I& @     P    P                                                    N @     P    P                                                    w @     P    P                                                    e @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    E @     P    P                                                    E @     P    P                                                    E @     P "   P                                                    n @     P &   P                                                    a @     P *   P                                                     @     P .   P                                                    } @     P 2   P                                                    1: @     P 6i   P                                                    b @     P :Q   P                                                     @     P >9   P                                                    M @     P B!   P                                                     @     P F	   P                                                     @     P I   P                                                    i. @     P M   P                                                      @     P Q   P                                                     @     P U   P                                                    U@ @     P Y   P                                                    	i @     P ]y   P                                                    	i @     P aa   P                                                     @     P eI   P                                                    q @     P i1   P                                                    % @     P m   P                                                     @     P q   P                                                    4 @     P t   P                                                    A] @     P x   P                                                     @     P |   P                                                     @     P    P                                                    ] @     P    P                                                      @     P q   P                                                    ( @     P Y   P                                                    yQ @     P A   P                                                    =T @     P )   P                                                    | @     P    P                                                     @     P    P                                                    Y @     P    P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P i   P                                                    ݙ @     P Q   P                                                     @     P 9   P                                                    E @     P !   P                                                     @     P 	   P                                                    < @     P    P                                                    ae @     P    P                                                     @     P    P                                                    ɶ @     P ҩ   P                                                    ِ @     P ֑   P                                                     @     P y   P                                                    A @     P a   P                                                    
- @     P I   P                                                    3 @     P 1   P                                                    ]\ @     P    P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P    P                                                    y @     P    P                                                    - @     P    P                                                    '	 @     P    P                                                    P	 @     P q   P                                                    Iy	 @     P 	Y   P                                                    =       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  qI   P                                                     @     P  u1   P                                                    u @     P  6   P                                                     @     P  y   P                                                     @     P  }   P                                                    ] @     P     P                                                     @     P  :   P                                                     @     P     P                                                    L	 @     P     P                                                    E
+ @     P     P                                                     @     P     P                                                    C @     P  >   P                                                    C @     P  q   P                                                    al @     P  Y   P                                                    M @     P  A   P                                                    . @     P  )   P                                                    W @     P     P                                                    I @     P  Bi   P                                                    I @     P     P                                                     @     P     P                                                     @     P     P                                                      @     P     P                                                    =) @     P     P                                                    Q @     P     P                                                    z @     P  i   P                                                    Y @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                    E @     P  	   P                                                    e @     P     P                                                     @     P     P                                                    A @     P     P                                                    A @     P  ީ   P                                                     @     P     P                                                     @     P  y   P                                                    ]1 @     P  a   P                                                     @     P  I   P                                                    u @     P  1   P                                                    ) @     P     P                                                     @     P     P                                                    	 @     P     P                                                    	 @     P    P                                                    EE	 @     P    P                                                    m	 @     P 	   P                                                    	 @     P    P                                                    }9
+ @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    y0 @     P )   P                                                    -Y @     P !   P                                                     @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    I @     P 0   P                                                     @     P 4   P                                                    v @     P 8   P                                                     @     P <i   P                                                    !  @     P @Q   P                                                    *  @     P D9   P                                                    S  @     P H!   P                                                    =|  @     P L	   P                                                      @     P O   P                                                      @     P S   P                                                      @     P W   P                                                    Y  @     P [   P                                                     @     P _   P                                                    up @     P cy   P                                                    	 @     P ga   P                                                    > @     P kI   P                                                    qg @     P o1   P                                                    % @     P s   P                                                    ٸ @     P w   P                                                     @     P z   P                                                    A
+ @     P ~   P                                                    2 @     P    P                                                    [ @     P    P                                                    [ @     P    P                                                    ] @     P q   P                                                     @     P Y   P                                                    R @     P A   P                                                    Y{ @     P )   P                                                     @     P    P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    F @     P    P                                                    o @     P    P                                                    E @     P    P                                                     @     P i   P                                                     @     P Q   P                                                     @     P 9   P                                                    a @     P !   P                                                    A	 @     P 	   P                                                    	 @     P    P                                                    	 @     P    P                                                    ]	
+ @     P    P                                                    2
+ @     P ة   P                                                    Z
+ @     P ܑ   P                                                    y
+ @     P y   P                                                    -
+ @     P a   P                                                    
+ @     P I   P                                                    
+ @     P 1   P                                                    I& @     P    P                                                    N @     P    P                                                    N @     P    P                                                    w @     P    P                                                     @     P    P                                                     @     P    P                                                    E @     P    P                                                    E @     P q   P                                                    n @     P Y   P                                                    a @     P A   P                                                     @     P )   P                                                     @     P    P                                                    } @     P    P                                                    1: @     P "   P                                                    b @     P &   P                                                     @     P *   P                                                    M @     P .   P                                                     @     P 2   P                                                     @     P 6i   P                                                    9  @     P :Q   P                                                      @     P >9   P                                                     @     P B!   P                                                    U@ @     P F	   P                                                    	i @     P I   P                                                     @     P M   P                                                    q @     P Q   P                                                    % @     P U   P                                                     @     P Y   P                                                    4 @     P ]y   P                                                    A] @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    ] @     P m   P                                                      @     P q   P                                                      @     P t   P                                                     @     P x   P                                                    + @     P |   P                                                    =T @     P    P                                                    | @     P    P                                                     @     P q   P                                                    Y @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                    E @     P    P                                                     @     P    P                                                    < @     P    P                                                    ae @     P i   P                                                    q? @     P Q   P                                                    q? @     P 9   P                                                    %h @     P !   P                                                    ِ @     P 	   P                                                     @     P    P                                                    A @     P    P                                                    
+ @     P    P                                                    3 @     P ҩ   P                                                    ]\ @     P ֑   P                                                     @     P y   P                                                    ŭ @     P a   P                                                    y @     P I   P                                                    - @     P 1   P                                                    '	 @     P    P                                                    P	 @     P    P                                                    Iy	 @     P    P                                                    	 @     P    P                                                    |
+ @     P    P                                                    
+ @     P    P                                                    
+ @     P    P                                                    u
+ @     P q   P                                                    )
+ @     P 	Y   P                                                    ]       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno0-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno0-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno0-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno0-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,13 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    A @     P  qI   P                                                    A @     P  u1   P                                                     @     P  y   P                                                     @     P  }   P                                                    ' @     P     P                                                    ' @     P     P                                                    YP @     P     P                                                    YP @     P     P                                                    y @     P     P                                                    y @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    u @     P  )   P                                                    u @     P     P                                                    ) @     P     P                                                    ) @     P     P                                                     @     P     P                                                     @     P     P                                                    D @     P     P                                                    D @     P     P                                                    Em @     P  i   P                                                    Em @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                     @     P     P                                                    a @     P     P                                                    a @     P     P                                                     @     P  ީ   P                                                     @     P     P                                                    8 @     P  y   P                                                    8 @     P  a   P                                                    }a @     P  I   P                                                    }a @     P  1   P                                                    ; @     P     P                                                    ; @     P     P                                                    Ad @     P     P                                                    Ad @     P    P                                                     @     P    P                                                     @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    ] @     P Y   P                                                    ] @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    / @     P $   P                                                    / @     P (   P                                                    yX @     P ,   P                                                    yX @     P 0   P                                                    - @     P 4   P                                                    - @     P 8   P                                                     @     P <i   P                                                     @     P @Q   P                                                     @     P D9   P                                                     @     P H!   P                                                    I @     P L	   P                                                    I @     P O   P                                                    #	 @     P S   P                                                    #	 @     P W   P                                                    L	 @     P [   P                                                    L	 @     P _   P                                                    eu	 @     P cy   P                                                    eu	 @     P ga   P                                                    	 @     P kI   P                                                    	 @     P o1   P                                                    	 @     P s   P                                                    	 @     P w   P                                                    	 @     P z   P                                                    	 @     P ~   P                                                    5
- @     P    P                                                    5
- @     P    P                                                    @
- @     P    P                                                    @
- @     P q   P                                                    i
- @     P Y   P                                                    i
- @     P A   P                                                    Q
- @     P )   P                                                    Q
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P q   P                                                    EF @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    a @     P    P                                                     @     P    P                                                     @     P "   P                                                    }: @     P &   P                                                    1c @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    M @     P 6i   P                                                     @     P :Q   P                                                    . @     P >9   P                                                    )  @     P B!   P                                                    =  @     P F	   P                                                    f  @     P I   P                                                    E  @     P M   P                                                      @     P Q   P                                                      @     P U   P                                                    a	 @     P Y   P                                                    2 @     P ]y   P                                                    Z @     P aa   P                                                    } @     P eI   P                                                    1 @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    M& @     P t   P                                                    O @     P x   P                                                    w @     P |   P                                                    i @     P    P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    9C @     P A   P                                                    k @     P )   P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q7 @     P    P                                                    %` @     P    P                                                    و @     P    P                                                     @     P i   P                                                    A @     P Q   P                                                     @     P 9   P                                                    + @     P !   P                                                    ]T @     P 	   P                                                    } @     P    P                                                    ť @     P    P                                                    y @     P    P                                                    - @     P ҩ   P                                                     @     P ֑   P                                                    H @     P y   P                                                    Iq @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                    < @     P    P                                                    e @     P    P                                                    5 @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P q   P                                                    1 @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno1-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,15 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  6   P                                                    D @     P  qI   P                                                    Em @     P  u1   P                                                     @     P  y   P                                                     @     P  }   P                                                    a @     P     P                                                     @     P     P                                                     @     P     P                                                    - @     P     P                                                     @     P     P                                                     @     P  q   P                                                     @     P  Y   P                                                    I @     P  A   P                                                    #	 @     P  )   P                                                    L	 @     P     P                                                    
- @     P     P                                                    ɽ @     P     P                                                    } @     P     P                                                    1 @     P     P                                                    7 @     P     P                                                    ` @     P     P                                                    ` @     P  i   P                                                    M @     P  Q   P                                                     @     P  9   P                                                    - @     P  !   P                                                    e @     P  	   P                                                    # @     P     P                                                    	  @     P     P                                                    A2  @     P     P                                                    Z  @     P  ީ   P                                                      @     P     P                                                      @     P  y   P                                                    ]  @     P  a   P                                                      @     P  I   P                                                      @     P  1   P                                                     @     P     P                                                    u @     P     P                                                    )F @     P     P                                                    n @     P    P                                                     @     P    P                                                    E @     P 	   P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    a: @     P A   P                                                    %= @     P )   P                                                    ]1 @     P !   P                                                    Z @     P $   P                                                    ł @     P (   P                                                    y @     P ,   P                                                    - @     P 0   P                                                     @     P 4   P                                                    % @     P 8   P                                                    IN @     P <i   P                                                    v @     P @Q   P                                                    v @     P D9   P                                                     @     P H!   P                                                    y @     P L	   P                                                    m	 @     P O   P                                                    	 @     P S   P                                                    a	 @     P W   P                                                    	 @     P [   P                                                    
- @     P _   P                                                    }9
- @     P cy   P                                                    1b
- @     P ga   P                                                    
- @     P kI   P                                                    
- @     P o1   P                                                    M
- @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    ] @     P ~   P                                                     @     P    P                                                    I @     P    P                                                     @     P    P                                                    $ @     P q   P                                                    eM @     P Y   P                                                    v @     P A   P                                                    ͞ @     P )   P                                                     @     P    P                                                    5 @     P    P                                                     @     P    P                                                    A @     P    P                                                    Qj @     P    P                                                    Qj @     P    P                                                     @     P    P                                                      @     P i   P                                                      @     P Q   P                                                    Y  @     P 9   P                                                     @     P !   P                                                    G @     P 	   P                                                    up @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P ة   P                                                    E @     P ܑ   P                                                    ; @     P y   P                                                    d @     P a   P                                                    a @     P I   P                                                    U @     P 1   P                                                    U @     P    P                                                     @     P    P                                                    A
- @     P    P                                                    2 @     P    P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P q   P                                                    y @     P Y   P                                                    -' @     P A   P                                                    O @     P )   P                                                    x @     P    P                                                    I @     P    P                                                     @     P "   P                                                    ) @     P &   P                                                    R @     P *   P                                                    ) @     P .   P                                                    ) @     P 2   P                                                    F @     P 6i   P                                                    o @     P :Q   P                                                    E @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                    a @     P I   P                                                    ; @     P M   P                                                    c @     P Q   P                                                    } @     P U   P                                                    1 @     P Y   P                                                     @     P ]y   P                                                    	 @     P aa   P                                                    f	 @     P eI   P                                                    A	 @     P i1   P                                                    Z
- @     P m   P                                                    y
- @     P q   P                                                    y
- @     P t   P                                                    -
- @     P x   P                                                    
- @     P |   P                                                    
- @     P    P                                                    I& @     P    P                                                    N @     P q   P                                                    w @     P Y   P                                                    e @     P A   P                                                     @     P )   P                                                     @     P    P                                                     @     P    P                                                    5C @     P    P                                                    k @     P    P                                                    ) @     P    P                                                     @     P    P                                                    a @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    } @     P 9   P                                                    } @     P !   P                                                    1: @     P 	   P                                                    b @     P    P                                                     @     P    P                                                    M @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                    i. @     P y   P                                                      @     P a   P                                                    =  @     P I   P                                                    Ef  @     P 1   P                                                      @     P    P                                                      @     P    P                                                    a  @     P    P                                                     @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                    4 @     P q   P                                                    4 @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno2-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno2-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno2-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno2-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,9 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  6   P                                                    Em @     P  qI   P                                                     @     P  u1   P                                                     @     P  y   P                                                    a @     P  }   P                                                     @     P     P                                                    I @     P  :   P                                                    7 @     P     P                                                    7 @     P     P                                                    7 @     P     P                                                    7 @     P     P                                                    7 @     P  q   P                                                    7 @     P  Y   P                                                    7 @     P  A   P                                                    7 @     P  )   P                                                    7 @     P     P                                                    A2  @     P     P                                                    Z  @     P     P                                                      @     P     P                                                    ]  @     P     P                                                    ]  @     P     P                                                      @     P     P                                                      @     P  i   P                                                    y& @     P  Q   P                                                    -O @     P  9   P                                                    w @     P  !   P                                                    n @     P  	   P                                                     @     P     P                                                    E @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    a: @     P     P                                                    a: @     P  y   P                                                    c @     P  a   P                                                    ɋ @     P  I   P                                                    } @     P  1   P                                                    1 @     P     P                                                    y @     P     P                                                    - @     P     P                                                     @     P    P                                                    % @     P    P                                                    IN @     P 	   P                                                    v @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    e @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    B @     P $   P                                                    	 @     P (   P                                                    
- @     P ,   P                                                    }9
- @     P 0   P                                                    1b
- @     P 4   P                                                    
- @     P 8   P                                                    
- @     P <i   P                                                    M
- @     P @Q   P                                                     @     P D9   P                                                    - @     P H!   P                                                    - @     P L	   P                                                    iV @     P O   P                                                     @     P S   P                                                    ѧ @     P W   P                                                    $ @     P [   P                                                    eM @     P _   P                                                    v @     P cy   P                                                    ͞ @     P ga   P                                                     @     P kI   P                                                    5 @     P o1   P                                                     @     P s   P                                                    A @     P w   P                                                    Qj @     P z   P                                                     @     P ~   P                                                     @     P    P                                                     @     P    P                                                    m @     P    P                                                    ! @     P q   P                                                     @     P Y   P                                                    G @     P A   P                                                    up @     P )   P                                                    ) @     P    P                                                     @     P    P                                                     @     P    P                                                    E @     P    P                                                    ; @     P    P                                                    d @     P    P                                                    a @     P    P                                                     @     P i   P                                                     @     P Q   P                                                     @     P 9   P                                                    } @     P !   P                                                    10 @     P 	   P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P ة   P                                                    y @     P ܑ   P                                                    -' @     P y   P                                                    O @     P a   P                                                    x @     P I   P                                                    I @     P 1   P                                                     @     P    P                                                     @     P    P                                                    e @     P    P                                                    D @     P    P                                                    l @     P    P                                                    l @     P    P                                                     @     P    P                                                    E @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    a @     P )   P                                                    ; @     P    P                                                    c @     P    P                                                    } @     P "   P                                                    1 @     P &   P                                                     @     P *   P                                                    	 @     P .   P                                                    M/	 @     P 2   P                                                    X	 @     P 6i   P                                                    	 @     P :Q   P                                                    i	 @     P >9   P                                                    	 @     P B!   P                                                    	 @     P F	   P                                                    	 @     P I   P                                                    
- @     P M   P                                                    
- @     P Q   P                                                    I& @     P U   P                                                    N @     P Y   P                                                    w @     P ]y   P                                                    e @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                     @     P m   P                                                    5C @     P q   P                                                    k @     P t   P                                                     @     P x   P                                                    Q @     P |   P                                                     @     P    P                                                     @     P    P                                                    m7 @     P q   P                                                    !` @     P Y   P                                                    !` @     P A   P                                                    } @     P )   P                                                    1: @     P    P                                                    b @     P    P                                                     @     P    P                                                    M @     P    P                                                     @     P    P                                                     @     P    P                                                    i. @     P    P                                                      @     P i   P                                                    =  @     P Q   P                                                    Ef  @     P 9   P                                                      @     P !   P                                                      @     P 	   P                                                    a  @     P    P                                                    	 @     P    P                                                    1 @     P    P                                                    }Z @     P ҩ   P                                                    1 @     P ֑   P                                                    1 @     P y   P                                                     @     P a   P                                                    4 @     P I   P                                                    A] @     P 1   P                                                     @     P    P                                                     @     P    P                                                    ] @     P    P                                                      @     P    P                                                    ( @     P    P                                                    yQ @     P    P                                                    -z @     P    P                                                     @     P q   P                                                     @     P 	Y   P                                                    	       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno3-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno3-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno3-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno3-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,9 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  6   P                                                     @     P  qI   P                                                     @     P  u1   P                                                    a @     P  y   P                                                     @     P  }   P                                                    #	 @     P  :   P                                                    a @     P  >   P                                                    U @     P     P                                                    U @     P     P                                                    
- @     P     P                                                    
- @     P     P                                                     @     P     P                                                     @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    A@ @     P  )   P                                                    A@ @     P     P                                                    h @     P     P                                                    h @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    : @     P  i   P                                                    Qc @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                    m @     P  	   P                                                    ! @     P     P                                                    . @     P     P                                                    N @     P     P                                                    9w @     P  ީ   P                                                     @     P     P                                                     @     P  y   P                                                     @     P  a   P                                                    U @     P  I   P                                                    	 @     P  1   P                                                    B @     P     P                                                    qk @     P     P                                                    % @     P     P                                                    ! @     P    P                                                    ճ @     P    P                                                     @     P 	   P                                                    =	 @     P    P                                                    -	 @     P q   P                                                    -	 @     P Y   P                                                    V	 @     P A   P                                                    Y	 @     P )   P                                                    	 @     P !   P                                                    	 @     P $   P                                                    u	 @     P (   P                                                     @     P ,   P                                                    q @     P 0   P                                                    % @     P 4   P                                                    A @     P 8   P                                                    j @     P <i   P                                                    A @     P @Q   P                                                    A @     P D9   P                                                     @     P H!   P                                                     @     P L	   P                                                    ] @     P O   P                                                    6 @     P S   P                                                    ^ @     P W   P                                                    Y @     P [   P                                                    - @     P _   P                                                      @     P cy   P                                                    5<  @     P ga   P                                                    d  @     P kI   P                                                      @     P o1   P                                                    Q  @     P s   P                                                      @     P w   P                                                      @     P z   P                                                     @     P ~   P                                                    m0 @     P    P                                                    !Y @     P    P                                                    Ձ @     P    P                                                     @     P q   P                                                    i' @     P Y   P                                                    P @     P A   P                                                    x @     P )   P                                                     @     P    P                                                    9 @     P    P                                                     @     P    P                                                     @     P    P                                                    UD @     P    P                                                    UD @     P    P                                                    	m @     P    P                                                     @     P i   P                                                    q @     P Q   P                                                    % @     P 9   P                                                    Q; @     P !   P                                                    d @     P 	   P                                                     @     P    P                                                    m @     P    P                                                    ! @     P    P                                                     @     P ة   P                                                    / @     P ܑ   P                                                    =X @     P y   P                                                     @     P a   P                                                     @     P I   P                                                    Y @     P 1   P                                                    Y @     P    P                                                     @     P    P                                                    # @     P    P                                                    uL @     P    P                                                    w	 @     P    P                                                    	 @     P    P                                                    U	 @     P    P                                                    		 @     P q   P                                                    
- @     P Y   P                                                    qC
- @     P A   P                                                    %l
- @     P )   P                                                    ٔ
- @     P    P                                                    
- @     P    P                                                    A
- @     P "   P                                                     @     P &   P                                                    7 @     P *   P                                                    7 @     P .   P                                                    ]` @     P 2   P                                                     @     P 6i   P                                                    ű @     P :Q   P                                                     @     P >9   P                                                    = @     P B!   P                                                     @     P F	   P                                                    . @     P I   P                                                    YW @     P M   P                                                     @     P Q   P                                                     @     P U   P                                                    u @     P Y   P                                                    ) @     P ]y   P                                                    " @     P aa   P                                                    K @     P eI   P                                                    Et @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    a @     P x   P                                                     @     P |   P                                                      @     P    P                                                      @     P    P                                                    M  @     P q   P                                                    ) @     P Y   P                                                    Q @     P A   P                                                    iz @     P )   P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    9 @     P    P                                                    E @     P    P                                                    n @     P    P                                                    U @     P    P                                                    	 @     P i   P                                                     @     P Q   P                                                    q @     P 9   P                                                    q @     P !   P                                                    %: @     P 	   P                                                     @     P    P                                                    5 @     P    P                                                    < @     P    P                                                    e @     P ҩ   P                                                    Q @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                    m @     P I   P                                                    !1 @     P 1   P                                                    Y @     P    P                                                     @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P    P                                                    Y% @     P    P                                                    N @     P    P                                                    v @     P q   P                                                    v @     P 	Y   P                                                    	       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno4-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno4-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno4-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Reno4-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,8 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    u @     P  6   P                                                     @     P  qI   P                                                    a @     P  u1   P                                                     @     P  y   P                                                    L	 @     P  :   P                                                    m @     P  >   P                                                    	 @     P  Bi   P                                                    	 @     P  FQ   P                                                     @     P  }   P                                                     @     P     P                                                     @     P     P                                                    A@ @     P     P                                                    A@ @     P     P                                                    h @     P     P                                                    h @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    : @     P  )   P                                                    : @     P     P                                                    Qc @     P     P                                                    Qc @     P     P                                                     @     P     P                                                     @     P     P                                                    m @     P     P                                                    ! @     P     P                                                    9w @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    U @     P  !   P                                                    	 @     P  	   P                                                    	 @     P     P                                                    B @     P     P                                                    qk @     P     P                                                    % @     P  ީ   P                                                    ճ @     P     P                                                     @     P  y   P                                                    =	 @     P  a   P                                                    -	 @     P  I   P                                                    V	 @     P  1   P                                                    Y	 @     P     P                                                    Y	 @     P     P                                                    	 @     P     P                                                    	 @     P    P                                                    u	 @     P    P                                                    q @     P 	   P                                                    % @     P    P                                                    A @     P q   P                                                    j @     P Y   P                                                    A @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    ] @     P $   P                                                    ] @     P (   P                                                    6 @     P ,   P                                                    ^ @     P 0   P                                                    - @     P 4   P                                                      @     P 8   P                                                    5<  @     P <i   P                                                    d  @     P @Q   P                                                      @     P D9   P                                                    Q  @     P H!   P                                                      @     P L	   P                                                     @     P O   P                                                    m0 @     P S   P                                                    m0 @     P W   P                                                    !Y @     P [   P                                                    Ձ @     P _   P                                                    i' @     P cy   P                                                    P @     P ga   P                                                    x @     P kI   P                                                     @     P o1   P                                                    9 @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    UD @     P ~   P                                                    	m @     P    P                                                     @     P    P                                                    q @     P    P                                                    q @     P q   P                                                    % @     P Y   P                                                    d @     P A   P                                                     @     P )   P                                                    m @     P    P                                                    ! @     P    P                                                     @     P    P                                                    / @     P    P                                                    =X @     P    P                                                     @     P    P                                                     @     P    P                                                    Y @     P i   P                                                     @     P Q   P                                                    # @     P 9   P                                                    uL @     P !   P                                                    uL @     P 	   P                                                    	 @     P    P                                                    U	 @     P    P                                                    		 @     P    P                                                    
- @     P ة   P                                                    qC
- @     P ܑ   P                                                    %l
- @     P y   P                                                    ٔ
- @     P a   P                                                    
- @     P I   P                                                    A
- @     P 1   P                                                     @     P    P                                                    7 @     P    P                                                    ]` @     P    P                                                     @     P    P                                                    ű @     P    P                                                    ű @     P    P                                                    = @     P    P                                                     @     P q   P                                                    . @     P Y   P                                                    YW @     P A   P                                                     @     P )   P                                                     @     P    P                                                    u @     P    P                                                    ) @     P "   P                                                    " @     P &   P                                                    K @     P *   P                                                    Et @     P .   P                                                     @     P 2   P                                                     @     P 6i   P                                                    a @     P :Q   P                                                     @     P >9   P                                                      @     P B!   P                                                      @     P F	   P                                                    M  @     P I   P                                                    ) @     P M   P                                                    Q @     P Q   P                                                    iz @     P U   P                                                     @     P Y   P                                                     @     P ]y   P                                                     @     P aa   P                                                    9 @     P eI   P                                                    E @     P i1   P                                                    n @     P m   P                                                    U @     P q   P                                                    	 @     P t   P                                                     @     P x   P                                                    q @     P |   P                                                    5 @     P    P                                                    < @     P    P                                                    < @     P q   P                                                    e @     P Y   P                                                    Q @     P A   P                                                     @     P )   P                                                     @     P    P                                                    m @     P    P                                                    !1 @     P    P                                                    Y @     P    P                                                     @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P i   P                                                    Y% @     P Q   P                                                    N @     P 9   P                                                    v @     P !   P                                                    P @     P 	   P                                                    y @     P    P                                                    9 @     P    P                                                     @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                    U @     P y   P                                                    	E @     P a   P                                                    m @     P I   P                                                    q @     P 1   P                                                    % @     P    P                                                     @     P    P                                                    	 @     P    P                                                    A9	 @     P    P                                                    a	 @     P    P                                                    	 @     P    P                                                    ]	 @     P    P                                                    	 @     P q   P                                                    m
- @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe0-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe0-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe0-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe0-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,13 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    A @     P  qI   P                                                    A @     P  u1   P                                                     @     P  y   P                                                     @     P  }   P                                                    ' @     P     P                                                    ' @     P     P                                                    YP @     P     P                                                    YP @     P     P                                                    y @     P     P                                                    y @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    u @     P  )   P                                                    u @     P     P                                                    ) @     P     P                                                    ) @     P     P                                                     @     P     P                                                     @     P     P                                                    D @     P     P                                                    D @     P     P                                                    Em @     P  i   P                                                    Em @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                     @     P     P                                                    a @     P     P                                                    a @     P     P                                                     @     P  ީ   P                                                     @     P     P                                                    8 @     P  y   P                                                    8 @     P  a   P                                                    }a @     P  I   P                                                    }a @     P  1   P                                                    ; @     P     P                                                    ; @     P     P                                                    Ad @     P     P                                                    Ad @     P    P                                                     @     P    P                                                     @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    ] @     P Y   P                                                    ] @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    / @     P $   P                                                    / @     P (   P                                                    yX @     P ,   P                                                    yX @     P 0   P                                                    - @     P 4   P                                                    - @     P 8   P                                                     @     P <i   P                                                     @     P @Q   P                                                     @     P D9   P                                                     @     P H!   P                                                    I @     P L	   P                                                    I @     P O   P                                                    #	 @     P S   P                                                    #	 @     P W   P                                                    L	 @     P [   P                                                    L	 @     P _   P                                                    eu	 @     P cy   P                                                    eu	 @     P ga   P                                                    	 @     P kI   P                                                    	 @     P o1   P                                                    	 @     P s   P                                                    	 @     P w   P                                                    	 @     P z   P                                                    	 @     P ~   P                                                    5
- @     P    P                                                    5
- @     P    P                                                    @
- @     P    P                                                    @
- @     P q   P                                                    i
- @     P Y   P                                                    i
- @     P A   P                                                    Q
- @     P )   P                                                    Q
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P q   P                                                    EF @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    a @     P    P                                                     @     P    P                                                     @     P "   P                                                    }: @     P &   P                                                    1c @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    M @     P 6i   P                                                     @     P :Q   P                                                    . @     P >9   P                                                    )  @     P B!   P                                                    =  @     P F	   P                                                    f  @     P I   P                                                    E  @     P M   P                                                      @     P Q   P                                                      @     P U   P                                                    a	 @     P Y   P                                                    2 @     P ]y   P                                                    Z @     P aa   P                                                    } @     P eI   P                                                    1 @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    M& @     P t   P                                                    O @     P x   P                                                    w @     P |   P                                                    i @     P    P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    9C @     P A   P                                                    k @     P )   P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q7 @     P    P                                                    %` @     P    P                                                    و @     P    P                                                     @     P i   P                                                    A @     P Q   P                                                     @     P 9   P                                                    + @     P !   P                                                    ]T @     P 	   P                                                    } @     P    P                                                    ť @     P    P                                                    y @     P    P                                                    - @     P ҩ   P                                                     @     P ֑   P                                                    H @     P y   P                                                    Iq @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                    < @     P    P                                                    e @     P    P                                                    5 @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P q   P                                                    1 @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe1-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,15 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  6   P                                                     @     P  qI   P                                                     @     P  u1   P                                                    
- @     P  y   P                                                    
- @     P  }   P                                                    E
- @     P     P                                                    E
- @     P     P                                                    - @     P     P                                                    - @     P     P                                                    . @     P     P                                                    . @     P  q   P                                                    W @     P  Y   P                                                    W @     P  A   P                                                    I @     P  )   P                                                    I @     P     P                                                      @     P     P                                                    =) @     P     P                                                    Q @     P     P                                                    z @     P     P                                                    Y @     P     P                                                     @     P     P                                                     @     P  i   P                                                    u @     P  Q   P                                                    %= @     P  9   P                                                    %= @     P  !   P                                                    e @     P  	   P                                                     @     P     P                                                    A @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    ]1 @     P     P                                                    Z @     P  y   P                                                    y @     P  a   P                                                    u @     P  I   P                                                    u @     P  1   P                                                    ) @     P     P                                                     @     P     P                                                    	 @     P     P                                                    EE	 @     P    P                                                    m	 @     P    P                                                    	 @     P 	   P                                                    a	 @     P    P                                                    ] @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    y0 @     P )   P                                                    y0 @     P !   P                                                    -Y @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    I @     P 0   P                                                     @     P 4   P                                                    $ @     P 8   P                                                     @     P <i   P                                                     @     P @Q   P                                                    !  @     P D9   P                                                    *  @     P H!   P                                                    S  @     P L	   P                                                    S  @     P O   P                                                    =|  @     P S   P                                                      @     P W   P                                                      @     P [   P                                                    Y  @     P _   P                                                     @     P cy   P                                                    G @     P ga   P                                                    U @     P kI   P                                                    	 @     P o1   P                                                    > @     P s   P                                                    qg @     P w   P                                                    % @     P z   P                                                    ٸ @     P ~   P                                                     @     P    P                                                     @     P    P                                                    A
- @     P    P                                                    2 @     P q   P                                                    [ @     P Y   P                                                    ] @     P A   P                                                     @     P )   P                                                    ) @     P    P                                                    R @     P    P                                                    Y{ @     P    P                                                     @     P    P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    F @     P i   P                                                    o @     P Q   P                                                    o @     P 9   P                                                    E @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    a @     P    P                                                    f	 @     P    P                                                    A	 @     P ة   P                                                    	 @     P ܑ   P                                                    	 @     P y   P                                                    ]	
- @     P a   P                                                    2
- @     P I   P                                                    Z
- @     P 1   P                                                    y
- @     P    P                                                    -
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    I& @     P    P                                                    N @     P    P                                                    w @     P q   P                                                    ) @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    E @     P    P                                                    E @     P    P                                                    n @     P "   P                                                    a @     P &   P                                                     @     P *   P                                                     @     P .   P                                                    } @     P 2   P                                                    1: @     P 6i   P                                                    b @     P :Q   P                                                    b @     P >9   P                                                     @     P B!   P                                                    M @     P F	   P                                                     @     P I   P                                                      @     P M   P                                                    9  @     P Q   P                                                      @     P U   P                                                     @     P Y   P                                                    U@ @     P ]y   P                                                    	i @     P aa   P                                                     @     P eI   P                                                    q @     P i1   P                                                    % @     P m   P                                                     @     P q   P                                                    4 @     P t   P                                                    A] @     P x   P                                                     @     P |   P                                                     @     P    P                                                     @     P    P                                                    ] @     P q   P                                                      @     P Y   P                                                    ! @     P A   P                                                     @     P )   P                                                    + @     P    P                                                    =T @     P    P                                                    | @     P    P                                                     @     P    P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                    uH @     P i   P                                                    )q @     P Q   P                                                    ݙ @     P 9   P                                                     @     P !   P                                                    E @     P 	   P                                                     @     P    P                                                     @     P    P                                                    < @     P    P                                                    ae @     P ҩ   P                                                     @     P ֑   P                                                    q? @     P y   P                                                    %h @     P a   P                                                    ِ @     P I   P                                                     @     P 1   P                                                    A @     P    P                                                    
- @     P    P                                                    3 @     P    P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P    P                                                    y @     P    P                                                    - @     P q   P                                                    '	 @     P 	Y   P                                                    !f       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe2-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe2-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe2-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe2-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,17 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  6   P                                                     @     P  :   P                                                     @     P  >   P                                                    E
- @     P  qI   P                                                    E
- @     P  u1   P                                                    E
- @     P  y   P                                                    . @     P  }   P                                                    . @     P     P                                                    W @     P     P                                                    W @     P     P                                                    I @     P     P                                                    I @     P     P                                                    =) @     P  q   P                                                    =) @     P  Y   P                                                    Q @     P  A   P                                                    Q @     P  )   P                                                    z @     P     P                                                    Y @     P     P                                                     @     P     P                                                     @     P     P                                                    e @     P     P                                                     @     P     P                                                    A @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    ]1 @     P  !   P                                                    Z @     P  	   P                                                    ł @     P     P                                                    u @     P     P                                                    ) @     P     P                                                     @     P  ީ   P                                                    	 @     P     P                                                    EE	 @     P  y   P                                                    m	 @     P  a   P                                                    m	 @     P  I   P                                                    	 @     P  1   P                                                    a	 @     P     P                                                    	 @     P     P                                                     @     P     P                                                     @     P    P                                                    y0 @     P    P                                                    -Y @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    I @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    $ @     P !   P                                                    eM @     P $   P                                                     @     P (   P                                                    !  @     P ,   P                                                    *  @     P 0   P                                                    S  @     P 4   P                                                    =|  @     P 8   P                                                      @     P <i   P                                                      @     P @Q   P                                                    Y  @     P D9   P                                                     @     P H!   P                                                     @     P L	   P                                                    G @     P O   P                                                    up @     P S   P                                                    	 @     P W   P                                                    > @     P [   P                                                    qg @     P _   P                                                    % @     P cy   P                                                    ٸ @     P ga   P                                                     @     P kI   P                                                    A
- @     P o1   P                                                    2 @     P s   P                                                    [ @     P w   P                                                    ] @     P z   P                                                     @     P ~   P                                                     @     P    P                                                     @     P    P                                                    R @     P    P                                                    Y{ @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    u @     P )   P                                                    ) @     P    P                                                    F @     P    P                                                    o @     P    P                                                    E @     P    P                                                     @     P    P                                                     @     P    P                                                    a @     P    P                                                    ; @     P i   P                                                    ; @     P Q   P                                                    A	 @     P 9   P                                                    	 @     P !   P                                                    	 @     P 	   P                                                    ]	
- @     P    P                                                    2
- @     P    P                                                    Z
- @     P    P                                                    y
- @     P ة   P                                                    -
- @     P ܑ   P                                                    
- @     P y   P                                                    
- @     P a   P                                                    I& @     P I   P                                                    N @     P 1   P                                                    w @     P    P                                                    e @     P    P                                                    e @     P    P                                                     @     P    P                                                     @     P    P                                                    E @     P    P                                                    E @     P    P                                                    n @     P q   P                                                    a @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    } @     P    P                                                    1: @     P    P                                                    b @     P "   P                                                     @     P &   P                                                    M @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    9  @     P 6i   P                                                    9  @     P :Q   P                                                      @     P >9   P                                                     @     P B!   P                                                    U@ @     P F	   P                                                    	i @     P I   P                                                     @     P M   P                                                    q @     P Q   P                                                    % @     P U   P                                                     @     P Y   P                                                    4 @     P ]y   P                                                    A] @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    ] @     P m   P                                                      @     P q   P                                                     @     P t   P                                                    + @     P x   P                                                    + @     P |   P                                                    =T @     P    P                                                    | @     P    P                                                     @     P q   P                                                    Y @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                    E @     P    P                                                     @     P    P                                                    < @     P    P                                                    ae @     P i   P                                                    q? @     P Q   P                                                    %h @     P 9   P                                                    ِ @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    A @     P    P                                                    
- @     P    P                                                    3 @     P ҩ   P                                                    ]\ @     P ֑   P                                                     @     P y   P                                                    ŭ @     P a   P                                                    y @     P I   P                                                    - @     P 1   P                                                    '	 @     P    P                                                    P	 @     P    P                                                    Iy	 @     P    P                                                    	 @     P    P                                                    	 @     P    P                                                    |
- @     P    P                                                    
- @     P    P                                                    u
- @     P q   P                                                    )
- @     P 	Y   P                                                    i4       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe3-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe3-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe3-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe3-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,14 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  6   P                                                    ] @     P  :   P                                                    ] @     P  >   P                                                     @     P  Bi   P                                                     @     P  FQ   P                                                    C @     P  qI   P                                                    C @     P  u1   P                                                    C @     P  y   P                                                    C @     P  }   P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    e @     P     P                                                    e @     P  q   P                                                    # @     P  Y   P                                                    # @     P  A   P                                                    Y @     P  )   P                                                     @     P     P                                                     @     P     P                                                    u @     P     P                                                    )F @     P     P                                                    n @     P     P                                                     @     P     P                                                    E @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    ]1 @     P  !   P                                                    Z @     P  	   P                                                    ł @     P     P                                                    y @     P     P                                                    - @     P     P                                                     @     P  ީ   P                                                    	 @     P     P                                                    EE	 @     P  y   P                                                    EE	 @     P  a   P                                                    m	 @     P  I   P                                                    	 @     P  1   P                                                    a	 @     P     P                                                    	 @     P     P                                                    
- @     P     P                                                    }9
- @     P    P                                                    1b
- @     P    P                                                    -Y @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    I @     P Y   P                                                    I @     P A   P                                                     @     P )   P                                                    $ @     P !   P                                                    eM @     P $   P                                                    v @     P (   P                                                    ͞ @     P ,   P                                                     @     P 0   P                                                    S  @     P 4   P                                                    =|  @     P 8   P                                                      @     P <i   P                                                      @     P @Q   P                                                    Y  @     P D9   P                                                    Y  @     P H!   P                                                     @     P L	   P                                                    G @     P O   P                                                    up @     P S   P                                                    ) @     P W   P                                                     @     P [   P                                                     @     P _   P                                                    % @     P cy   P                                                    ٸ @     P ga   P                                                     @     P kI   P                                                    A
- @     P o1   P                                                    2 @     P s   P                                                    [ @     P w   P                                                    ] @     P z   P                                                    ] @     P ~   P                                                     @     P    P                                                     @     P    P                                                    y @     P    P                                                    -' @     P q   P                                                    O @     P Y   P                                                     @     P A   P                                                    u @     P )   P                                                    ) @     P    P                                                    F @     P    P                                                    o @     P    P                                                    E @     P    P                                                     @     P    P                                                     @     P    P                                                    a @     P    P                                                    a @     P i   P                                                    ; @     P Q   P                                                    c @     P 9   P                                                    } @     P !   P                                                    1 @     P 	   P                                                    ]	
- @     P    P                                                    2
- @     P    P                                                    Z
- @     P    P                                                    y
- @     P ة   P                                                    -
- @     P ܑ   P                                                    
- @     P y   P                                                    
- @     P a   P                                                    I& @     P I   P                                                    N @     P 1   P                                                    w @     P    P                                                    w @     P    P                                                    e @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    E @     P    P                                                    n @     P q   P                                                    a @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    } @     P    P                                                    1: @     P    P                                                    b @     P "   P                                                     @     P &   P                                                    M @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                     @     P 6i   P                                                    i. @     P :Q   P                                                      @     P >9   P                                                    =  @     P B!   P                                                    U@ @     P F	   P                                                    	i @     P I   P                                                     @     P M   P                                                    q @     P Q   P                                                    % @     P U   P                                                     @     P Y   P                                                    4 @     P ]y   P                                                    A] @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    ] @     P m   P                                                      @     P q   P                                                    ( @     P t   P                                                    ( @     P x   P                                                    yQ @     P |   P                                                    -z @     P    P                                                     @     P    P                                                    | @     P q   P                                                     @     P Y   P                                                    Y @     P A   P                                                     @     P )   P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                    E @     P    P                                                     @     P    P                                                    < @     P i   P                                                    ae @     P Q   P                                                     @     P 9   P                                                    ɶ @     P !   P                                                    ɶ @     P 	   P                                                    } @     P    P                                                    1 @     P    P                                                     @     P    P                                                    A @     P ҩ   P                                                    
- @     P ֑   P                                                    3 @     P y   P                                                    ]\ @     P a   P                                                     @     P I   P                                                    ŭ @     P 1   P                                                    y @     P    P                                                    - @     P    P                                                    '	 @     P    P                                                    P	 @     P    P                                                    Iy	 @     P    P                                                    	 @     P    P                                                    	 @     P    P                                                    e	 @     P q   P                                                    
- @     P 	Y   P                                                    YZ       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe4-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe4-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe4-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Tahoe4-response-vectors.pcap	1969-12-31 16:00:00.000000000 -0800
@@ -1,9 +0,0 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    u @     P  6   P                                                     @     P  :   P                                                     @     P  >   P                                                    C @     P  Bi   P                                                    C @     P  FQ   P                                                    al @     P  J9   P                                                    al @     P  N!   P                                                    I @     P  qI   P                                                    I @     P  u1   P                                                    I @     P  y   P                                                    I @     P  }   P                                                    I @     P     P                                                    e @     P  qI   P                                                    z @     P  u1   P                                                    z @     P  y   P                                                    Y @     P  }   P                                                    Y @     P     P                                                     @     P     P                                                     @     P     P                                                    u @     P     P                                                     @     P     P                                                    Z @     P     P                                                    Z @     P     P                                                    ł @     P     P                                                    y @     P  q   P                                                    a	 @     P     P                                                    	 @     P  q   P                                                    	 @     P  Y   P                                                    
- @     P  A   P                                                    eM @     P  )   P                                                    v @     P     P                                                    v @     P     P                                                    G @     P     P                                                    up @     P     P                                                    ) @     P     P                                                    ) @     P     P                                                    ] @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                    y @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                     @     P     P                                                    a @     P     P                                                    ; @     P     P                                                    
- @     P  ީ   P                                                    I& @     P     P                                                    I& @     P  y   P                                                    N @     P  a   P                                                    w @     P  I   P                                                    e @     P  1   P                                                    1: @     P     P                                                    b @     P     P                                                     @     P     P                                                     @     P    P                                                    M @     P    P                                                     @     P 	   P                                                     @     P    P                                                    4 @     P q   P                                                    A] @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    ] @     P !   P                                                    ] @     P $   P                                                      @     P (   P                                                    ( @     P ,   P                                                    )q @     P 0   P                                                    ݙ @     P 4   P                                                     @     P 8   P                                                    E @     P <i   P                                                     @     P @Q   P                                                    < @     P D9   P                                                    < @     P H!   P                                                    ae @     P L	   P                                                     @     P O   P                                                    ŭ @     P S   P                                                    y @     P W   P                                                    - @     P [   P                                                    '	 @     P _   P                                                    P	 @     P cy   P                                                    Iy	 @     P ga   P                                                    	 @     P kI   P                                                    	 @     P o1   P                                                    	 @     P s   P                                                    e	 @     P w   P                                                    a @     P z   P                                                     @     P ~   P                                                    ; @     P    P                                                    }d @     P    P                                                    1 @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    M @     P A   P                                                    0 @     P )   P                                                    0 @     P    P                                                    X @     P    P                                                    & @     P    P                                                    q  @     P    P                                                    %6  @     P    P                                                    ^  @     P    P                                                      @     P    P                                                    A  @     P i   P                                                      @     P Q   P                                                     @     P 9   P                                                    ]* @     P !   P                                                    S @     P 	   P                                                    { @     P    P                                                    { @     P    P                                                    Y! @     P    P                                                    J @     P ة   P                                                    r @     P ܑ   P                                                    u @     P y   P                                                    ) @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    E> @     P    P                                                    f @     P    P                                                     @     P    P                                                    a @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P    P                                                     @     P q   P                                                    ] @     P Y   P                                                     @     P A   P                                                      @     P )   P                                                    y) @     P    P                                                    -R @     P    P                                                    z @     P "   P                                                     @     P &   P                                                    I @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    eF @     P 6i   P                                                    	 @     P :Q   P                                                    	 @     P >9   P                                                    E	 @     P B!   P                                                    	 @     P F	   P                                                    
- @     P I   P                                                    a=
- @     P M   P                                                    f
- @     P Q   P                                                    Ɏ
- @     P U   P                                                    }
- @     P Y   P                                                    1
- @     P ]y   P                                                     @     P aa   P                                                    1 @     P eI   P                                                    MZ @     P i1   P                                                     @     P m   P                                                    - @     P q   P                                                     @     P t   P                                                    ( @     P x   P                                                    ( @     P |   P                                                    IQ @     P    P                                                    y @     P    P                                                     @     P q   P                                                    e @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    E @     P    P                                                    5n @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P    P                                                      @     P    P                                                    =  @     P    P                                                    " @     P i   P                                                    K @     P Q   P                                                    K @     P 9   P                                                    Yt @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    ? @     P ҩ   P                                                    h @     P ֑   P                                                    E @     P y   P                                                     @     P a   P                                                     @     P I   P                                                    a @     P 1   P                                                    % @     P    P                                                    6 @     P    P                                                    _ @     P    P                                                    A @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P q   P                                                    + @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood0-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -10,4 +10,4 @@
  @     P    P                                                    
  @     P    P                                                    
  @     P    P                                                    
- @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P q   P                                                    EF @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    a @     P    P                                                     @     P    P                                                     @     P "   P                                                    }: @     P &   P                                                    1c @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    M @     P 6i   P                                                     @     P :Q   P                                                    . @     P >9   P                                                    )  @     P B!   P                                                    =  @     P F	   P                                                    f  @     P I   P                                                    E  @     P M   P                                                      @     P Q   P                                                      @     P U   P                                                    a	 @     P Y   P                                                    2 @     P ]y   P                                                    Z @     P aa   P                                                    } @     P eI   P                                                    1 @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    M& @     P t   P                                                    O @     P x   P                                                    w @     P |   P                                                    i @     P    P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    9C @     P A   P                                                    k @     P )   P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q7 @     P    P                                                    %` @     P    P                                                    و @     P    P                                                     @     P i   P                                                    A @     P Q   P                                                     @     P 9   P                                                    + @     P !   P                                                    ]T @     P 	   P                                                    } @     P    P                                                    ť @     P    P                                                    y @     P    P                                                    - @     P ҩ   P                                                     @     P ֑   P                                                    H @     P y   P                                                    Iq @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                    < @     P    P                                                    e @     P    P                                                    5 @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P q   P                                                    1 @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
+ @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    EF @     P    P                                                    EF @     P "   P                                                    n @     P &   P                                                    n @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    a @     P 6i   P                                                    a @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                     @     P I   P                                                    }: @     P M   P                                                    }: @     P Q   P                                                    1c @     P U   P                                                    1c @     P Y   P                                                     @     P ]y   P                                                     @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    M @     P m   P                                                    M @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    . @     P |   P                                                    . @     P    P                                                    )  @     P    P                                                    )  @     P q   P                                                    =  @     P Y   P                                                    =  @     P A   P                                                    f  @     P )   P                                                    f  @     P    P                                                    E  @     P    P                                                    E  @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                    a	 @     P i   P                                                    a	 @     P Q   P                                                    2 @     P 9   P                                                    2 @     P !   P                                                    Z @     P 	   P                                                    Z @     P    P                                                    } @     P    P                                                    } @     P    P                                                    1 @     P ҩ   P                                                    1 @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    M& @     P    P                                                    M& @     P    P                                                    O @     P    P                                                    O @     P    P                                                    w @     P    P                                                    w @     P    P                                                    i @     P    P                                                    i @     P q   P                                                     @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood1-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,11 +1,15 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  6   P                                                    u @     P  qI   P                                                    ) @     P  u1   P                                                     @     P  y   P                                                    D @     P  }   P                                                    Em @     P     P                                                     @     P     P                                                     @     P     P                                                    a @     P     P                                                     @     P     P                                                     @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                     @     P  )   P                                                     @     P     P                                                    / @     P     P                                                    yX @     P     P                                                    - @     P     P                                                     @     P     P                                                     @     P     P                                                    I @     P     P                                                    #	 @     P  i   P                                                    L	 @     P  Q   P                                                    
- @     P  9   P                                                    E
- @     P  !   P                                                     @     P  	   P                                                     @     P     P                                                    C @     P     P                                                    al @     P     P                                                     @     P  ީ   P                                                    ɽ @     P     P                                                    } @     P  y   P                                                    1 @     P  a   P                                                    7 @     P  I   P                                                    ` @     P  1   P                                                    M @     P     P                                                     @     P     P                                                    - @     P     P                                                    . @     P    P                                                    W @     P    P                                                    I @     P 	   P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    e @     P A   P                                                    # @     P )   P                                                    	  @     P !   P                                                    A2  @     P $   P                                                    Z  @     P (   P                                                      @     P ,   P                                                    ]  @     P 0   P                                                      @     P 4   P                                                      @     P 8   P                                                    =) @     P <i   P                                                    Q @     P @Q   P                                                    z @     P D9   P                                                    Y @     P H!   P                                                     @     P L	   P                                                     @     P O   P                                                     @     P S   P                                                    u @     P W   P                                                    )F @     P [   P                                                    n @     P _   P                                                     @     P cy   P                                                    E @     P ga   P                                                     @     P kI   P                                                     @     P o1   P                                                    a: @     P s   P                                                    %= @     P w   P                                                    e @     P z   P                                                     @     P ~   P                                                    A @     P    P                                                     @     P    P                                                     @     P    P                                                    ]1 @     P q   P                                                    Z @     P Y   P                                                    Z @     P A   P                                                    ł @     P )   P                                                    y @     P    P                                                    - @     P    P                                                     @     P    P                                                    % @     P    P                                                    IN @     P    P                                                    v @     P    P                                                     @     P    P                                                    y @     P i   P                                                    u @     P Q   P                                                    ) @     P 9   P                                                     @     P !   P                                                    	 @     P 	   P                                                    EE	 @     P    P                                                    m	 @     P    P                                                    	 @     P    P                                                    a	 @     P ة   P                                                    	 @     P ܑ   P                                                    	 @     P y   P                                                    
- @     P a   P                                                    }9
- @     P I   P                                                    1b
- @     P 1   P                                                    
- @     P    P                                                    
- @     P    P                                                    M
- @     P    P                                                     @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P    P                                                    y0 @     P q   P                                                    -Y @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    I @     P    P                                                     @     P    P                                                    $ @     P "   P                                                    eM @     P &   P                                                    v @     P *   P                                                    v @     P .   P                                                    ͞ @     P 2   P                                                     @     P 6i   P                                                    5 @     P :Q   P                                                     @     P >9   P                                                    A @     P B!   P                                                    Qj @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                    !  @     P Q   P                                                    *  @     P U   P                                                    S  @     P Y   P                                                    =|  @     P ]y   P                                                      @     P aa   P                                                      @     P eI   P                                                    Y  @     P i1   P                                                     @     P m   P                                                    G @     P q   P                                                    up @     P t   P                                                    ) @     P x   P                                                    ) @     P |   P                                                     @     P    P                                                     @     P    P                                                    E @     P q   P                                                    ; @     P Y   P                                                    d @     P A   P                                                    a @     P )   P                                                    U @     P    P                                                    	 @     P    P                                                    > @     P    P                                                    qg @     P    P                                                    % @     P    P                                                    ٸ @     P    P                                                     @     P    P                                                    A
- @     P i   P                                                    2 @     P Q   P                                                    [ @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    y @     P    P                                                    -' @     P    P                                                    -' @     P ҩ   P                                                    O @     P ֑   P                                                    x @     P y   P                                                    I @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    ) @     P    P                                                    R @     P    P                                                    Y{ @     P    P                                                     @     P    P                                                     @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    F @     P q   P                                                    o @     P 	Y   P                                                    
-       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  qI   P                                                    ' @     P  u1   P                                                    YP @     P  6   P                                                    Ad @     P  y   P                                                     @     P  }   P                                                    ݠ
+ @     P     P                                                    
+ @     P     P                                                    y @     P     P                                                    y @     P     P                                                    - @     P     P                                                     @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                    =) @     P  )   P                                                    q @     P     P                                                    %= @     P     P                                                    e @     P     P                                                     @     P     P                                                     @     P     P                                                    Q @     P     P                                                    y @     P     P                                                    u @     P  i   P                                                    ) @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                    ] @     P     P                                                     @     P     P                                                     @     P     P                                                    y0 @     P  ީ   P                                                    -Y @     P     P                                                    -Y @     P  y   P                                                    E @     P  a   P                                                     @     P  I   P                                                     @     P  1   P                                                    !  @     P     P                                                    *  @     P     P                                                    S  @     P     P                                                    =|  @     P    P                                                     @     P    P                                                     @     P 	   P                                                    U @     P    P                                                    	 @     P q   P                                                    > @     P Y   P                                                    qg @     P A   P                                                    % @     P )   P                                                    ٸ @     P !   P                                                    = @     P $   P                                                    ) @     P (   P                                                    ) @     P ,   P                                                    R @     P 0   P                                                    Y{ @     P 4   P                                                     @     P 8   P                                                     @     P <i   P                                                    u @     P @Q   P                                                    ) @     P D9   P                                                    =	 @     P H!   P                                                    f	 @     P L	   P                                                    A	 @     P O   P                                                    	 @     P S   P                                                    	 @     P W   P                                                    	 @     P [   P                                                    ]	
+ @     P _   P                                                    2
+ @     P cy   P                                                    Z
+ @     P ga   P                                                    y
+ @     P kI   P                                                    uz @     P o1   P                                                    ) @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    E @     P ~   P                                                    E @     P    P                                                    E @     P    P                                                    n @     P    P                                                    a @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    t  @     P )   P                                                      @     P    P                                                    9  @     P    P                                                      @     P    P                                                     @     P    P                                                    U@ @     P    P                                                    	i @     P    P                                                    	i @     P    P                                                     @     P i   P                                                    q @     P Q   P                                                    % @     P 9   P                                                     @     P !   P                                                    m @     P 	   P                                                    ! @     P    P                                                     @     P    P                                                    + @     P    P                                                    =T @     P ة   P                                                    | @     P ܑ   P                                                     @     P y   P                                                    Y @     P a   P                                                    Y @     P I   P                                                     @     P 1   P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q? @     P    P                                                    %h @     P    P                                                    ِ @     P q   P                                                     @     P Y   P                                                    A @     P A   P                                                    
+ @     P )   P                                                    3 @     P    P                                                    ]\ @     P    P                                                    ]\ @     P "   P                                                     @     P &   P                                                    ŭ @     P *   P                                                    y @     P .   P                                                    *
+ @     P 2   P                                                    YS
+ @     P 6i   P                                                    |
+ @     P :Q   P                                                    
+ @     P >9   P                                                    u
+ @     P B!   P                                                    )
+ @     P F	   P                                                     @     P I   P                                                    G @     P M   P                                                    Ep @     P Q   P                                                     @     P U   P                                                     @     P Y   P                                                    a @     P ]y   P                                                    a @     P aa   P                                                     @     P eI   P                                                    ; @     P i1   P                                                    Ag @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    ] @     P x   P                                                    
+ @     P |   P                                                    2 @     P    P                                                    y[ @     P    P                                                    - @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    I @     P )   P                                                    & @     P    P                                                    q  @     P    P                                                    q  @     P    P                                                    %6  @     P    P                                                    ^  @     P    P                                                    a @     P    P                                                    Q @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    m @     P 9   P                                                    !- @     P !   P                                                    U @     P 	   P                                                    ~ @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P ҩ   P                                                    Y! @     P ֑   P                                                    J @     P y   P                                                    r @     P a   P                                                    u @     P I   P                                                    u @     P 1   P                                                    ) @     P    P                                                    9 @     P    P                                                     @     P    P                                                     @     P    P                                                    U @     P    P                                                    	A @     P    P                                                    i @     P    P                                                    q @     P q   P                                                    % @     P 	Y   P                                                    e       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood2-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,8 +1,19 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  6   P                                                    ) @     P  qI   P                                                     @     P  u1   P                                                    D @     P  y   P                                                    Em @     P  }   P                                                     @     P     P                                                     @     P     P                                                    a @     P     P                                                     @     P     P                                                    - @     P  :   P                                                    ɽ @     P     P                                                    ɽ @     P  q   P                                                    ɽ @     P  Y   P                                                    ɽ @     P  A   P                                                    ɽ @     P  )   P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P     P                                                    ɽ @     P  i   P                                                    ɽ @     P  Q   P                                                    ɽ @     P  9   P                                                    ɽ @     P  !   P                                                    e @     P  	   P                                                    # @     P     P                                                    	  @     P     P                                                    A2  @     P     P                                                    Z  @     P  ީ   P                                                      @     P     P                                                    ]  @     P  y   P                                                      @     P  a   P                                                      @     P  I   P                                                    y& @     P  1   P                                                    -O @     P     P                                                    w @     P     P                                                     @     P     P                                                    I @     P    P                                                    I @     P    P                                                     @     P 	   P                                                     @     P    P                                                     @     P q   P                                                    u @     P Y   P                                                    )F @     P A   P                                                    n @     P )   P                                                     @     P !   P                                                    E @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    a: @     P 0   P                                                    c @     P 4   P                                                    ɋ @     P 8   P                                                    } @     P <i   P                                                    1 @     P @Q   P                                                     @     P D9   P                                                    . @     P H!   P                                                    MW @     P L	   P                                                    MW @     P O   P                                                     @     P S   P                                                    ]1 @     P W   P                                                    Z @     P [   P                                                    ł @     P _   P                                                    y @     P cy   P                                                    - @     P ga   P                                                     @     P kI   P                                                    % @     P o1   P                                                    IN @     P s   P                                                    v @     P w   P                                                     @     P z   P                                                    e @     P ~   P                                                     @     P    P                                                     @     P    P                                                    B @     P    P                                                    5k @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    Q @     P )   P                                                    Q @     P    P                                                    m	 @     P    P                                                    	 @     P    P                                                    a	 @     P    P                                                    	 @     P    P                                                    
- @     P    P                                                    }9
- @     P    P                                                    1b
- @     P i   P                                                    
- @     P Q   P                                                    
- @     P 9   P                                                    M
- @     P !   P                                                     @     P 	   P                                                    - @     P    P                                                    iV @     P    P                                                     @     P    P                                                    ѧ @     P ة   P                                                     @     P ܑ   P                                                    9 @     P y   P                                                    ! @     P a   P                                                    J @     P I   P                                                    J @     P 1   P                                                     @     P    P                                                    I @     P    P                                                     @     P    P                                                    $ @     P    P                                                    eM @     P    P                                                    v @     P    P                                                    ͞ @     P    P                                                     @     P q   P                                                    5 @     P Y   P                                                     @     P A   P                                                    A @     P )   P                                                    Qj @     P    P                                                     @     P    P                                                     @     P "   P                                                    m @     P &   P                                                    ! @     P *   P                                                    5 @     P .   P                                                    I  @     P 2   P                                                    D  @     P 6i   P                                                    m  @     P :Q   P                                                      @     P >9   P                                                      @     P B!   P                                                      @     P F	   P                                                    Y  @     P I   P                                                     @     P M   P                                                    G @     P Q   P                                                    up @     P U   P                                                    ) @     P Y   P                                                     @     P ]y   P                                                     @     P aa   P                                                    E @     P eI   P                                                    ; @     P i1   P                                                    d @     P m   P                                                    a @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    } @     P |   P                                                    10 @     P    P                                                    X @     P    P                                                     @     P q   P                                                    M @     P Y   P                                                     @     P A   P                                                    A
- @     P )   P                                                    2 @     P    P                                                    2 @     P    P                                                    [ @     P    P                                                    ] @     P    P                                                     @     P    P                                                     @     P    P                                                    y @     P    P                                                    -' @     P i   P                                                    O @     P Q   P                                                    x @     P 9   P                                                    I @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    e @     P    P                                                    D @     P    P                                                    l @     P ҩ   P                                                     @     P ֑   P                                                    5 @     P y   P                                                     @     P a   P                                                     @     P I   P                                                    Q8 @     P 1   P                                                    a @     P    P                                                     @     P    P                                                    m @     P    P                                                    m @     P    P                                                    ! @     P    P                                                     @     P    P                                                    , @     P    P                                                    =U @     P q   P                                                    } @     P 	Y   P                                                    '       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    ' @     P  qI   P                                                    YP @     P  u1   P                                                    y @     P  6   P                                                     @     P  :   P                                                     @     P  y   P                                                    E
+ @     P  }   P                                                     @     P     P                                                    . @     P     P                                                    W @     P     P                                                    W @     P     P                                                    =) @     P     P                                                    Q @     P  q   P                                                    z @     P  Y   P                                                    z @     P  A   P                                                    e @     P  )   P                                                     @     P     P                                                    A @     P     P                                                     @     P     P                                                    u @     P     P                                                    u @     P     P                                                    ) @     P     P                                                     @     P     P                                                    	 @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                    y0 @     P  	   P                                                    -Y @     P     P                                                     @     P     P                                                     @     P     P                                                    !  @     P  ީ   P                                                    *  @     P     P                                                    *  @     P  y   P                                                    S  @     P  a   P                                                    =|  @     P  I   P                                                      @     P  1   P                                                    	 @     P     P                                                    > @     P     P                                                    qg @     P     P                                                    % @     P    P                                                    ٸ @     P    P                                                    ٸ @     P 	   P                                                     @     P    P                                                    A
+ @     P q   P                                                    R @     P Y   P                                                    Y{ @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    u @     P $   P                                                    ) @     P (   P                                                    ) @     P ,   P                                                    F @     P 0   P                                                    o @     P 4   P                                                    A	 @     P 8   P                                                    	 @     P <i   P                                                    	 @     P @Q   P                                                    ]	
+ @     P D9   P                                                    2
+ @     P H!   P                                                    Z
+ @     P L	   P                                                    y
+ @     P O   P                                                    -
+ @     P S   P                                                    -
+ @     P W   P                                                    
+ @     P [   P                                                     @     P _   P                                                     @     P cy   P                                                    E @     P ga   P                                                    E @     P kI   P                                                    n @     P o1   P                                                    a @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    } @     P ~   P                                                    } @     P    P                                                    1: @     P    P                                                    9  @     P    P                                                      @     P q   P                                                     @     P Y   P                                                    U@ @     P A   P                                                    	i @     P )   P                                                     @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                    4 @     P    P                                                    A] @     P    P                                                    A] @     P    P                                                     @     P i   P                                                    + @     P Q   P                                                    =T @     P 9   P                                                    | @     P !   P                                                     @     P 	   P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                    uH @     P ة   P                                                    )q @     P ܑ   P                                                    ݙ @     P y   P                                                     @     P a   P                                                     @     P I   P                                                    q? @     P 1   P                                                    %h @     P    P                                                    ِ @     P    P                                                     @     P    P                                                    A @     P    P                                                    
+ @     P    P                                                    3 @     P    P                                                    ]\ @     P    P                                                     @     P q   P                                                    ŭ @     P Y   P                                                    y @     P A   P                                                    - @     P )   P                                                    '	 @     P    P                                                    |
+ @     P    P                                                    |
+ @     P "   P                                                    
+ @     P &   P                                                    u
+ @     P *   P                                                    )
+ @     P .   P                                                     @     P 2   P                                                    G @     P 6i   P                                                    Ep @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                    a @     P F	   P                                                     @     P I   P                                                    ; @     P M   P                                                    }d @     P Q   P                                                     @     P U   P                                                    ] @     P Y   P                                                    
+ @     P ]y   P                                                    
+ @     P aa   P                                                    2 @     P eI   P                                                    y[ @     P i1   P                                                    - @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    I @     P x   P                                                    & @     P |   P                                                    q  @     P    P                                                    %6  @     P    P                                                    ^  @     P q   P                                                      @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    m @     P    P                                                    !- @     P    P                                                    !- @     P    P                                                    U @     P    P                                                    ~ @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P i   P                                                    Y! @     P Q   P                                                    J @     P 9   P                                                    r @     P !   P                                                    u @     P 	   P                                                    ) @     P    P                                                     @     P    P                                                     @     P    P                                                    U @     P ҩ   P                                                    	A @     P ֑   P                                                    i @     P y   P                                                    q @     P a   P                                                    % @     P I   P                                                    % @     P 1   P                                                     @     P    P                                                     @     P    P                                                    A5 @     P    P                                                    ] @     P    P                                                     @     P    P                                                    ] @     P    P                                                     @     P    P                                                      @     P q   P                                                    y) @     P 	Y   P                                                    m
+       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood3-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,16 +1,18 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  6   P                                                     @     P  qI   P                                                    D @     P  u1   P                                                    Em @     P  y   P                                                     @     P  }   P                                                     @     P     P                                                    a @     P     P                                                     @     P     P                                                     @     P  :   P                                                     @     P  >   P                                                    9$ @     P     P                                                    9$ @     P     P                                                    `
- @     P  q   P                                                    `
- @     P  Y   P                                                    
- @     P  A   P                                                    
- @     P  )   P                                                    q @     P     P                                                    q @     P     P                                                    % @     P     P                                                    % @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P  i   P                                                    ͗ @     P  Q   P                                                    ͗ @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                    5 @     P     P                                                    5 @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    : @     P     P                                                    : @     P  y   P                                                    Qc @     P  a   P                                                    Qc @     P  I   P                                                     @     P  1   P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    i @     P    P                                                    i @     P    P                                                     @     P 	   P                                                    % @     P    P                                                    N @     P q   P                                                    9w @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    U @     P !   P                                                    	 @     P $   P                                                    B @     P (   P                                                    qk @     P ,   P                                                    % @     P 0   P                                                    ټ @     P 4   P                                                     @     P 8   P                                                    A @     P <i   P                                                    6 @     P @Q   P                                                     @     P D9   P                                                    9 @     P H!   P                                                    mb @     P L	   P                                                    mb @     P O   P                                                    ! @     P S   P                                                    ճ @     P W   P                                                     @     P [   P                                                    =	 @     P _   P                                                    -	 @     P cy   P                                                    V	 @     P ga   P                                                    Y	 @     P kI   P                                                    	 @     P o1   P                                                    	 @     P s   P                                                    u	 @     P w   P                                                    )"
- @     P z   P                                                    J
- @     P ~   P                                                    s
- @     P    P                                                    E
- @     P    P                                                    M @     P    P                                                    Uv @     P q   P                                                    	 @     P Y   P                                                     @     P A   P                                                    q @     P )   P                                                    q @     P    P                                                    % @     P    P                                                    A @     P    P                                                    j @     P    P                                                    A @     P    P                                                     @     P    P                                                     @     P    P                                                    ] @     P i   P                                                    6 @     P Q   P                                                    ^ @     P 9   P                                                    y @     P !   P                                                    - @     P 	   P                                                     @     P    P                                                     @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                    Y @     P y   P                                                    - @     P a   P                                                      @     P I   P                                                      @     P 1   P                                                    5<  @     P    P                                                    d  @     P    P                                                      @     P    P                                                    Q  @     P    P                                                      @     P    P                                                     @     P    P                                                    m0 @     P    P                                                    !Y @     P q   P                                                    Ձ @     P Y   P                                                     @     P A   P                                                    = @     P )   P                                                     @     P    P                                                    $ @     P    P                                                     @     P "   P                                                    M @     P &   P                                                     @     P *   P                                                     @     P .   P                                                    i' @     P 2   P                                                    P @     P 6i   P                                                    x @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                    9 @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                    UD @     P Q   P                                                    	m @     P U   P                                                     @     P Y   P                                                    q @     P ]y   P                                                    % @     P aa   P                                                     @     P eI   P                                                    8 @     P i1   P                                                    Aa @     P m   P                                                     @     P q   P                                                    5 @     P t   P                                                     @     P x   P                                                     @     P |   P                                                    Q; @     P    P                                                    d @     P    P                                                     @     P q   P                                                    m @     P Y   P                                                    ! @     P A   P                                                     @     P )   P                                                    / @     P    P                                                    / @     P    P                                                    =X @     P    P                                                     @     P    P                                                     @     P    P                                                    Y @     P    P                                                     @     P    P                                                    # @     P i   P                                                    uL @     P Q   P                                                    )u @     P 9   P                                                    ݝ @     P !   P                                                     @     P 	   P                                                    E @     P    P                                                    	 @     P    P                                                    @	 @     P    P                                                    ai	 @     P ҩ   P                                                    	 @     P ֑   P                                                    ɺ	 @     P y   P                                                    }	 @     P a   P                                                    1
- @     P I   P                                                    4
- @     P 1   P                                                    ]
- @     P    P                                                    M
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    
- @     P    P                                                    i  @     P    P                                                    ) @     P    P                                                    Q @     P q   P                                                    z @     P 	Y   P                                                    U$       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  qI   P                                                    y @     P  u1   P                                                     @     P  6   P                                                    ] @     P  :   P                                                     @     P  >   P                                                     @     P  y   P                                                    W @     P  }   P                                                    I @     P     P                                                    Q @     P     P                                                    z @     P     P                                                    z @     P     P                                                     @     P     P                                                    A @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    ) @     P  )   P                                                     @     P     P                                                    	 @     P     P                                                    EE	 @     P     P                                                     @     P     P                                                     @     P     P                                                    y0 @     P     P                                                    -Y @     P     P                                                     @     P  i   P                                                    !  @     P  Q   P                                                    *  @     P  9   P                                                    *  @     P  !   P                                                    S  @     P  	   P                                                    =|  @     P     P                                                      @     P     P                                                    > @     P     P                                                    qg @     P  ީ   P                                                    % @     P     P                                                    % @     P  y   P                                                    ٸ @     P  a   P                                                     @     P  I   P                                                    A
+ @     P  1   P                                                    Y{ @     P     P                                                     @     P     P                                                     @     P     P                                                    u @     P    P                                                    ) @     P    P                                                    ) @     P 	   P                                                    F @     P    P                                                    o @     P q   P                                                    	 @     P Y   P                                                    	 @     P A   P                                                    ]	
+ @     P )   P                                                    2
+ @     P !   P                                                    Z
+ @     P $   P                                                    y
+ @     P (   P                                                    y
+ @     P ,   P                                                    -
+ @     P 0   P                                                    
+ @     P 4   P                                                     @     P 8   P                                                    E @     P <i   P                                                    E @     P @Q   P                                                    n @     P D9   P                                                    a @     P H!   P                                                     @     P L	   P                                                     @     P O   P                                                    } @     P S   P                                                    } @     P W   P                                                    1: @     P [   P                                                      @     P _   P                                                     @     P cy   P                                                    U@ @     P ga   P                                                    	i @     P kI   P                                                     @     P o1   P                                                    q @     P s   P                                                    % @     P w   P                                                     @     P z   P                                                    4 @     P ~   P                                                    4 @     P    P                                                    A] @     P    P                                                    + @     P    P                                                    =T @     P q   P                                                    | @     P Y   P                                                     @     P A   P                                                    Y @     P )   P                                                     @     P    P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                     @     P    P                                                    %h @     P i   P                                                    ِ @     P Q   P                                                     @     P 9   P                                                    A @     P !   P                                                    
+ @     P 	   P                                                    3 @     P    P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P ة   P                                                    y @     P ܑ   P                                                    - @     P y   P                                                    '	 @     P a   P                                                    '	 @     P I   P                                                    
+ @     P 1   P                                                    u
+ @     P    P                                                    )
+ @     P    P                                                     @     P    P                                                    G @     P    P                                                    Ep @     P    P                                                     @     P    P                                                     @     P    P                                                    a @     P q   P                                                     @     P Y   P                                                    ; @     P A   P                                                    }d @     P )   P                                                    1 @     P    P                                                    ] @     P    P                                                    ] @     P "   P                                                    
+ @     P &   P                                                    2 @     P *   P                                                    y[ @     P .   P                                                    - @     P 2   P                                                     @     P 6i   P                                                     @     P :Q   P                                                    I @     P >9   P                                                    & @     P B!   P                                                    q  @     P F	   P                                                    %6  @     P I   P                                                    ^  @     P M   P                                                      @     P Q   P                                                     @     P U   P                                                    m @     P Y   P                                                    !- @     P ]y   P                                                    !- @     P aa   P                                                    U @     P eI   P                                                    ~ @     P i1   P                                                    = @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    Y! @     P x   P                                                    J @     P |   P                                                    r @     P    P                                                    u @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                    U @     P A   P                                                    	A @     P )   P                                                    i @     P    P                                                    q @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                     @     P    P                                                    A5 @     P    P                                                    ] @     P i   P                                                     @     P Q   P                                                    ] @     P 9   P                                                     @     P !   P                                                      @     P 	   P                                                    y) @     P    P                                                    -R @     P    P                                                    T @     P    P                                                    } @     P ҩ   P                                                    Y @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                    u 	 @     P I   P                                                    u 	 @     P 1   P                                                    )I	 @     P    P                                                    q	 @     P    P                                                    	 @     P    P                                                    E	 @     P    P                                                    	 @     P    P                                                    
+ @     P    P                                                    a=
+ @     P    P                                                    f
+ @     P q   P                                                    Ɏ
+ @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-Westwood4-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,15 +1,18 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    u @     P  6   P                                                    D @     P  qI   P                                                    Em @     P  u1   P                                                     @     P  y   P                                                     @     P  }   P                                                    a @     P     P                                                     @     P     P                                                     @     P  :   P                                                    Q @     P  >   P                                                    L @     P  Bi   P                                                    L @     P  FQ   P                                                    
- @     P     P                                                    
- @     P     P                                                    
- @     P     P                                                    % @     P  q   P                                                    % @     P  Y   P                                                     @     P  A   P                                                     @     P  )   P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    5 @     P     P                                                    5 @     P     P                                                     @     P     P                                                     @     P  i   P                                                    : @     P  Q   P                                                    : @     P  9   P                                                    Qc @     P  !   P                                                    Qc @     P  	   P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    % @     P     P                                                    % @     P  y   P                                                    N @     P  a   P                                                    N @     P  I   P                                                    9w @     P  1   P                                                    9w @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P    P                                                    U @     P    P                                                    	 @     P 	   P                                                    B @     P    P                                                    qk @     P q   P                                                    % @     P Y   P                                                    ټ @     P A   P                                                    9 @     P )   P                                                    mb @     P !   P                                                    ! @     P $   P                                                    ճ @     P (   P                                                     @     P ,   P                                                    =	 @     P 0   P                                                    -	 @     P 4   P                                                    V	 @     P 8   P                                                    Y	 @     P <i   P                                                    	 @     P @Q   P                                                    	 @     P D9   P                                                    	 @     P H!   P                                                    u	 @     P L	   P                                                    )"
- @     P O   P                                                    J
- @     P S   P                                                    s
- @     P W   P                                                    E
- @     P [   P                                                    
- @     P _   P                                                    Uv @     P cy   P                                                    	 @     P ga   P                                                     @     P kI   P                                                    q @     P o1   P                                                    % @     P s   P                                                    A @     P w   P                                                    j @     P z   P                                                    A @     P ~   P                                                     @     P    P                                                     @     P    P                                                    ] @     P    P                                                    6 @     P q   P                                                    ^ @     P Y   P                                                    ^ @     P A   P                                                    y @     P )   P                                                    - @     P    P                                                     @     P    P                                                     @     P    P                                                    I* @     P    P                                                     @     P    P                                                     @     P    P                                                    Y @     P    P                                                    - @     P i   P                                                      @     P Q   P                                                    5<  @     P 9   P                                                    d  @     P !   P                                                      @     P 	   P                                                    Q  @     P    P                                                      @     P    P                                                     @     P    P                                                    m0 @     P ة   P                                                    !Y @     P ܑ   P                                                    Ձ @     P y   P                                                    Ձ @     P a   P                                                     @     P I   P                                                    = @     P 1   P                                                     @     P    P                                                    $ @     P    P                                                    YM @     P    P                                                    M @     P    P                                                     @     P    P                                                     @     P    P                                                    i' @     P    P                                                    P @     P q   P                                                    x @     P Y   P                                                     @     P A   P                                                    9 @     P )   P                                                     @     P    P                                                     @     P    P                                                    UD @     P "   P                                                    	m @     P &   P                                                     @     P *   P                                                    q @     P .   P                                                    % @     P 2   P                                                     @     P 6i   P                                                     @     P :Q   P                                                    8 @     P >9   P                                                    Aa @     P B!   P                                                     @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                     @     P Q   P                                                    Q; @     P U   P                                                    d @     P Y   P                                                     @     P ]y   P                                                    m @     P aa   P                                                    ! @     P eI   P                                                     @     P i1   P                                                    / @     P m   P                                                    =X @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    Y @     P |   P                                                     @     P    P                                                    # @     P    P                                                    uL @     P q   P                                                    )u @     P Y   P                                                    ݝ @     P A   P                                                    ݝ @     P )   P                                                     @     P    P                                                    E @     P    P                                                    	 @     P    P                                                    @	 @     P    P                                                    ai	 @     P    P                                                    	 @     P    P                                                    ɺ	 @     P    P                                                    }	 @     P i   P                                                    1
- @     P Q   P                                                    4
- @     P 9   P                                                    ]
- @     P !   P                                                    M
- @     P 	   P                                                    
- @     P    P                                                    
- @     P    P                                                    i  @     P    P                                                    ) @     P ҩ   P                                                    Q @     P ֑   P                                                    z @     P y   P                                                    9 @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    U @     P    P                                                    	F @     P    P                                                    	F @     P    P                                                    n @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                     @     P q   P                                                    A: @     P 	Y   P                                                    ѡ       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  qI   P                                                     @     P  u1   P                                                    u @     P  6   P                                                     @     P  :   P                                                    C @     P  >   P                                                    I @     P  Bi   P                                                    I @     P  y   P                                                    z @     P  }   P                                                    Y @     P     P                                                    A @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    	 @     P  q   P                                                    EE	 @     P  Y   P                                                    EE	 @     P  A   P                                                    y0 @     P  )   P                                                    -Y @     P     P                                                     @     P     P                                                     @     P     P                                                    *  @     P     P                                                    *  @     P     P                                                    S  @     P     P                                                    =|  @     P     P                                                      @     P  i   P                                                    qg @     P  Q   P                                                    % @     P  9   P                                                    % @     P  !   P                                                    ٸ @     P  	   P                                                     @     P     P                                                    A
+ @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    u @     P     P                                                    u @     P  y   P                                                    ) @     P  a   P                                                    F @     P  I   P                                                    o @     P  1   P                                                    	 @     P     P                                                    ]	
+ @     P     P                                                    2
+ @     P     P                                                    Z
+ @     P    P                                                    y
+ @     P    P                                                    y
+ @     P 	   P                                                    -
+ @     P    P                                                    
+ @     P q   P                                                    E @     P Y   P                                                    E @     P A   P                                                    n @     P )   P                                                    a @     P !   P                                                     @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    } @     P 0   P                                                    1: @     P 4   P                                                     @     P 8   P                                                    U@ @     P <i   P                                                    	i @     P @Q   P                                                     @     P D9   P                                                    q @     P H!   P                                                    % @     P L	   P                                                     @     P O   P                                                    4 @     P S   P                                                    4 @     P W   P                                                    A] @     P [   P                                                    =T @     P _   P                                                    | @     P cy   P                                                     @     P ga   P                                                    Y @     P kI   P                                                     @     P o1   P                                                     @     P s   P                                                    uH @     P w   P                                                    )q @     P z   P                                                    ݙ @     P ~   P                                                    ݙ @     P    P                                                     @     P    P                                                    ِ @     P    P                                                     @     P q   P                                                    A @     P Y   P                                                    
+ @     P A   P                                                    3 @     P )   P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P    P                                                    y @     P    P                                                    - @     P    P                                                    '	 @     P    P                                                    '	 @     P    P                                                    u
+ @     P i   P                                                    )
+ @     P Q   P                                                     @     P 9   P                                                    G @     P !   P                                                    Ep @     P 	   P                                                     @     P    P                                                     @     P    P                                                    a @     P    P                                                     @     P ة   P                                                    ; @     P ܑ   P                                                    }d @     P y   P                                                    1 @     P a   P                                                    1 @     P I   P                                                    
+ @     P 1   P                                                    2 @     P    P                                                    y[ @     P    P                                                    - @     P    P                                                     @     P    P                                                     @     P    P                                                    I @     P    P                                                    & @     P    P                                                    q  @     P q   P                                                    %6  @     P Y   P                                                    ^  @     P A   P                                                      @     P )   P                                                    A  @     P    P                                                    m @     P    P                                                    m @     P "   P                                                    !- @     P &   P                                                    U @     P *   P                                                    ~ @     P .   P                                                    = @     P 2   P                                                     @     P 6i   P                                                     @     P :Q   P                                                    Y! @     P >9   P                                                    J @     P B!   P                                                    r @     P F	   P                                                    u @     P I   P                                                    ) @     P M   P                                                     @     P Q   P                                                    	A @     P U   P                                                    i @     P Y   P                                                    q @     P ]y   P                                                    q @     P aa   P                                                    % @     P eI   P                                                     @     P i1   P                                                     @     P m   P                                                    A5 @     P q   P                                                    ] @     P t   P                                                     @     P x   P                                                    ] @     P |   P                                                     @     P    P                                                      @     P    P                                                    y) @     P q   P                                                    -R @     P Y   P                                                    } @     P A   P                                                    Y @     P )   P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    u 	 @     P    P                                                    )I	 @     P    P                                                    q	 @     P    P                                                    	 @     P    P                                                    E	 @     P i   P                                                    	 @     P Q   P                                                    
+ @     P 9   P                                                    a=
+ @     P !   P                                                    f
+ @     P 	   P                                                    Ɏ
+ @     P    P                                                    }
+ @     P    P                                                    A @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                    ]4 @     P y   P                                                    ] @     P a   P                                                    Ņ @     P I   P                                                    Ņ @     P 1   P                                                    y @     P    P                                                    - @     P    P                                                     @     P    P                                                    ( @     P    P                                                    IQ @     P    P                                                    y @     P    P                                                     @     P    P                                                    e @     P q   P                                                     @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus0-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -10,4 +10,4 @@
  @     P    P                                                    
  @     P    P                                                    
  @     P    P                                                    
- @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    ) @     P    P                                                     @     P    P                                                     @     P q   P                                                    EF @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    a @     P    P                                                     @     P    P                                                     @     P "   P                                                    }: @     P &   P                                                    1c @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    M @     P 6i   P                                                     @     P :Q   P                                                    . @     P >9   P                                                    )  @     P B!   P                                                    =  @     P F	   P                                                    f  @     P I   P                                                    E  @     P M   P                                                      @     P Q   P                                                      @     P U   P                                                    a	 @     P Y   P                                                    2 @     P ]y   P                                                    Z @     P aa   P                                                    } @     P eI   P                                                    1 @     P i1   P                                                     @     P m   P                                                     @     P q   P                                                    M& @     P t   P                                                    O @     P x   P                                                    w @     P |   P                                                    i @     P    P                                                     @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    9C @     P A   P                                                    k @     P )   P                                                     @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q7 @     P    P                                                    %` @     P    P                                                    و @     P    P                                                     @     P i   P                                                    A @     P Q   P                                                     @     P 9   P                                                    + @     P !   P                                                    ]T @     P 	   P                                                    } @     P    P                                                    ť @     P    P                                                    y @     P    P                                                    - @     P ҩ   P                                                     @     P ֑   P                                                    H @     P y   P                                                    Iq @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                    < @     P    P                                                    e @     P    P                                                    5 @     P    P                                                     @     P    P                                                     @     P    P                                                    Q @     P q   P                                                    1 @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
+ @     P    P                                                    m @     P    P                                                    m @     P    P                                                    !5 @     P i   P                                                    !5 @     P Q   P                                                    ] @     P 9   P                                                    ] @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    = @     P    P                                                    = @     P    P                                                     @     P ة   P                                                     @     P ܑ   P                                                      @     P y   P                                                      @     P a   P                                                    Y) @     P I   P                                                    Y) @     P 1   P                                                    R @     P    P                                                    R @     P    P                                                    z @     P    P                                                    z @     P    P                                                    u @     P    P                                                    u @     P    P                                                    ) @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    EF @     P    P                                                    EF @     P "   P                                                    n @     P &   P                                                    n @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    a @     P 6i   P                                                    a @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                     @     P I   P                                                    }: @     P M   P                                                    }: @     P Q   P                                                    1c @     P U   P                                                    1c @     P Y   P                                                     @     P ]y   P                                                     @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    M @     P m   P                                                    M @     P q   P                                                     @     P t   P                                                     @     P x   P                                                    . @     P |   P                                                    . @     P    P                                                    )  @     P    P                                                    )  @     P q   P                                                    =  @     P Y   P                                                    =  @     P A   P                                                    f  @     P )   P                                                    f  @     P    P                                                    E  @     P    P                                                    E  @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P    P                                                    a	 @     P i   P                                                    a	 @     P Q   P                                                    2 @     P 9   P                                                    2 @     P !   P                                                    Z @     P 	   P                                                    Z @     P    P                                                    } @     P    P                                                    } @     P    P                                                    1 @     P ҩ   P                                                    1 @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                    M& @     P    P                                                    M& @     P    P                                                    O @     P    P                                                    O @     P    P                                                    w @     P    P                                                    w @     P    P                                                    i @     P    P                                                    i @     P q   P                                                     @     P 	Y   P                                                    n       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus1-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,15 +1,15 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  6   P                                                     @     P  qI   P                                                     @     P  u1   P                                                    
- @     P  y   P                                                    E
- @     P  }   P                                                    - @     P     P                                                    - @     P     P                                                    . @     P     P                                                      @     P     P                                                    =) @     P     P                                                    =) @     P  q   P                                                    Q @     P  Y   P                                                    %= @     P  A   P                                                    e @     P  )   P                                                     @     P     P                                                     @     P     P                                                    A @     P     P                                                    y @     P     P                                                    u @     P     P                                                    ) @     P     P                                                     @     P     P                                                    	 @     P  i   P                                                    	 @     P  Q   P                                                    ] @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                    y0 @     P     P                                                    -Y @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                     @     P     P                                                     @     P  y   P                                                    !  @     P  a   P                                                    *  @     P  I   P                                                    S  @     P  1   P                                                    =|  @     P     P                                                      @     P     P                                                    U @     P     P                                                    U @     P    P                                                    	 @     P    P                                                    > @     P 	   P                                                    qg @     P    P                                                    % @     P q   P                                                    ٸ @     P Y   P                                                     @     P A   P                                                    ) @     P )   P                                                    R @     P !   P                                                    R @     P $   P                                                    Y{ @     P (   P                                                     @     P ,   P                                                     @     P 0   P                                                    u @     P 4   P                                                    ) @     P 8   P                                                    F @     P <i   P                                                    f	 @     P @Q   P                                                    A	 @     P D9   P                                                    	 @     P H!   P                                                    	 @     P L	   P                                                    	 @     P O   P                                                    ]	
- @     P S   P                                                    2
- @     P W   P                                                    Z
- @     P [   P                                                    y
- @     P _   P                                                    -
- @     P cy   P                                                    ) @     P ga   P                                                     @     P kI   P                                                     @     P o1   P                                                    E @     P s   P                                                    E @     P w   P                                                    E @     P z   P                                                    n @     P ~   P                                                    a @     P    P                                                     @     P    P                                                     @     P    P                                                    } @     P q   P                                                      @     P Y   P                                                    9  @     P A   P                                                      @     P )   P                                                     @     P    P                                                    U@ @     P    P                                                    	i @     P    P                                                     @     P    P                                                     @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P i   P                                                    4 @     P Q   P                                                    ! @     P 9   P                                                     @     P !   P                                                    + @     P 	   P                                                    =T @     P    P                                                    | @     P    P                                                     @     P    P                                                    Y @     P ة   P                                                     @     P ܑ   P                                                     @     P y   P                                                     @     P a   P                                                    uH @     P I   P                                                    )q @     P 1   P                                                    ݙ @     P    P                                                     @     P    P                                                    q? @     P    P                                                    %h @     P    P                                                    ِ @     P    P                                                     @     P    P                                                    A @     P    P                                                    
- @     P q   P                                                    3 @     P Y   P                                                    ]\ @     P A   P                                                     @     P )   P                                                     @     P    P                                                    ŭ @     P    P                                                    y @     P "   P                                                    - @     P &   P                                                    YS
- @     P *   P                                                    |
- @     P .   P                                                    
- @     P 2   P                                                    u
- @     P 6i   P                                                    )
- @     P :Q   P                                                     @     P >9   P                                                    G @     P B!   P                                                    Ep @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                    a @     P Q   P                                                    a @     P U   P                                                     @     P Y   P                                                    ; @     P ]y   P                                                    }d @     P aa   P                                                     @     P eI   P                                                     @     P i1   P                                                    ] @     P m   P                                                    
- @     P q   P                                                    2 @     P t   P                                                    y[ @     P x   P                                                    - @     P |   P                                                     @     P    P                                                     @     P    P                                                    I @     P q   P                                                    & @     P Y   P                                                    q  @     P A   P                                                    %6  @     P )   P                                                    %6  @     P    P                                                    ^  @     P    P                                                      @     P    P                                                    Q @     P    P                                                     @     P    P                                                     @     P    P                                                    m @     P    P                                                    !- @     P i   P                                                    U @     P Q   P                                                    ~ @     P 9   P                                                    = @     P !   P                                                     @     P 	   P                                                     @     P    P                                                    Y! @     P    P                                                    J @     P    P                                                    r @     P ҩ   P                                                    u @     P ֑   P                                                    u @     P y   P                                                    ) @     P a   P                                                     @     P I   P                                                     @     P 1   P                                                     @     P    P                                                    U @     P    P                                                    	A @     P    P                                                    i @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                     @     P q   P                                                    A5 @     P 	Y   P                                                    s	       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  qI   P                                                    ' @     P  u1   P                                                    YP @     P  6   P                                                    Ad @     P  y   P                                                     @     P  }   P                                                    ݠ
+ @     P     P                                                    
+ @     P     P                                                    y @     P     P                                                    y @     P     P                                                    - @     P     P                                                     @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                    =) @     P  )   P                                                    q @     P     P                                                    %= @     P     P                                                    e @     P     P                                                     @     P     P                                                     @     P     P                                                    Q @     P     P                                                    y @     P     P                                                    u @     P  i   P                                                    ) @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                     @     P  	   P                                                    ] @     P     P                                                     @     P     P                                                     @     P     P                                                    y0 @     P  ީ   P                                                    -Y @     P     P                                                    -Y @     P  y   P                                                    E @     P  a   P                                                     @     P  I   P                                                     @     P  1   P                                                    !  @     P     P                                                    *  @     P     P                                                    S  @     P     P                                                    =|  @     P    P                                                     @     P    P                                                     @     P 	   P                                                    U @     P    P                                                    	 @     P q   P                                                    > @     P Y   P                                                    qg @     P A   P                                                    % @     P )   P                                                    ٸ @     P !   P                                                    = @     P $   P                                                    ) @     P (   P                                                    ) @     P ,   P                                                    R @     P 0   P                                                    Y{ @     P 4   P                                                     @     P 8   P                                                     @     P <i   P                                                    u @     P @Q   P                                                    ) @     P D9   P                                                    =	 @     P H!   P                                                    f	 @     P L	   P                                                    A	 @     P O   P                                                    	 @     P S   P                                                    	 @     P W   P                                                    	 @     P [   P                                                    ]	
+ @     P _   P                                                    2
+ @     P cy   P                                                    Z
+ @     P ga   P                                                    y
+ @     P kI   P                                                    uz @     P o1   P                                                    ) @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    E @     P ~   P                                                    E @     P    P                                                    E @     P    P                                                    n @     P    P                                                    a @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    t  @     P )   P                                                      @     P    P                                                    9  @     P    P                                                      @     P    P                                                     @     P    P                                                    U@ @     P    P                                                    	i @     P    P                                                    	i @     P    P                                                     @     P i   P                                                    q @     P Q   P                                                    % @     P 9   P                                                     @     P !   P                                                    m @     P 	   P                                                    ! @     P    P                                                     @     P    P                                                    + @     P    P                                                    =T @     P ة   P                                                    | @     P ܑ   P                                                     @     P y   P                                                    Y @     P a   P                                                    Y @     P I   P                                                     @     P 1   P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q? @     P    P                                                    %h @     P    P                                                    ِ @     P q   P                                                     @     P Y   P                                                    A @     P A   P                                                    
+ @     P )   P                                                    3 @     P    P                                                    ]\ @     P    P                                                    ]\ @     P "   P                                                     @     P &   P                                                    ŭ @     P *   P                                                    y @     P .   P                                                    *
+ @     P 2   P                                                    YS
+ @     P 6i   P                                                    |
+ @     P :Q   P                                                    
+ @     P >9   P                                                    u
+ @     P B!   P                                                    )
+ @     P F	   P                                                     @     P I   P                                                    G @     P M   P                                                    Ep @     P Q   P                                                     @     P U   P                                                     @     P Y   P                                                    a @     P ]y   P                                                    a @     P aa   P                                                     @     P eI   P                                                    ; @     P i1   P                                                    Ag @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    ] @     P x   P                                                    
+ @     P |   P                                                    2 @     P    P                                                    y[ @     P    P                                                    - @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                    I @     P )   P                                                    & @     P    P                                                    q  @     P    P                                                    q  @     P    P                                                    %6  @     P    P                                                    ^  @     P    P                                                    a @     P    P                                                    Q @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    m @     P 9   P                                                    !- @     P !   P                                                    U @     P 	   P                                                    ~ @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P ҩ   P                                                    Y! @     P ֑   P                                                    J @     P y   P                                                    r @     P a   P                                                    u @     P I   P                                                    u @     P 1   P                                                    ) @     P    P                                                    9 @     P    P                                                     @     P    P                                                     @     P    P                                                    U @     P    P                                                    	A @     P    P                                                    i @     P    P                                                    q @     P q   P                                                    % @     P 	Y   P                                                    e       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus2-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,14 +1,19 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  6   P                                                    	 @     P  :   P                                                    e @     P  qI   P                                                    e @     P  u1   P                                                    0 @     P  y   P                                                    X @     P  }   P                                                    l	 @     P     P                                                    l	 @     P     P                                                    Q	 @     P     P                                                    9 @     P     P                                                     @     P     P                                                     @     P  q   P                                                     @     P  Y   P                                                      @     P  A   P                                                    I  @     P  )   P                                                      @     P     P                                                     @     P     P                                                     @     P     P                                                    1 @     P     P                                                     @     P     P                                                    1 @     P     P                                                    MZ @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    E @     P  !   P                                                    5n @     P  	   P                                                     @     P     P                                                     @     P     P                                                    Q @     P     P                                                    Q @     P  ީ   P                                                    iY
- @     P     P                                                    
- @     P  y   P                                                    Ѫ
- @     P  a   P                                                    
- @     P  I   P                                                    9
- @     P  1   P                                                    $ @     P     P                                                    M @     P     P                                                     @     P     P                                                     @     P    P                                                     @     P    P                                                    m @     P 	   P                                                    ! @     P    P                                                    8 @     P q   P                                                    a @     P Y   P                                                    = @     P A   P                                                    a @     P )   P                                                     @     P !   P                                                     @     P $   P                                                     @     P (   P                                                    }
- @     P ,   P                                                    13 @     P 0   P                                                    [ @     P 4   P                                                     @     P 8   P                                                    M @     P <i   P                                                     @     P @Q   P                                                     @     P D9   P                                                    e @     P H!   P                                                    G @     P L	   P                                                    G @     P O   P                                                    o @     P S   P                                                     @     P W   P                                                    5 @     P [   P                                                     @     P _   P                                                     @     P cy   P                                                    	 @     P ga   P                                                    M2 @     P kI   P                                                    [ @     P o1   P                                                     @     P s   P                                                    i @     P w   P                                                    i @     P z   P                                                     @     P ~   P                                                     @     P    P                                                    &	 @     P    P                                                    9O	 @     P    P                                                    w	 @     P q   P                                                    5F @     P Y   P                                                    n @     P A   P                                                     @     P )   P                                                    Q @     P    P                                                     @     P    P                                                     @     P    P                                                    m: @     P    P                                                    m: @     P    P                                                    !c @     P    P                                                    Ջ @     P    P                                                     @     P i   P                                                    = @     P Q   P                                                    т @     P 9   P                                                     @     P !   P                                                    9 @     P 	   P                                                     @     P    P                                                    % @     P    P                                                      @     P    P                                                    4  @     P ة   P                                                    }]  @     P ܑ   P                                                    }]  @     P y   P                                                    1  @     P a   P                                                      @     P I   P                                                      @     P 1   P                                                    M  @     P    P                                                    -} @     P    P                                                     @     P    P                                                     @     P    P                                                    I @     P    P                                                     @     P    P                                                    H @     P    P                                                    eq @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    5 @     P    P                                                    < @     P "   P                                                    e @     P &   P                                                    ɹ @     P *   P                                                    } @     P .   P                                                    1 @     P 2   P                                                    3 @     P 6i   P                                                    \ @     P :Q   P                                                    M @     P >9   P                                                     @     P B!   P                                                     @     P F	   P                                                    i @     P I   P                                                    ( @     P M   P                                                    P @     P Q   P                                                    y @     P U   P                                                    y @     P Y   P                                                    9 @     P ]y   P                                                     @     P aa   P                                                    e @     P eI   P                                                    	 @     P i1   P                                                    G	 @     P m   P                                                    p	 @     P q   P                                                    5	 @     P t   P                                                    	 @     P x   P                                                    	 @     P |   P                                                    Q
- @     P    P                                                    <
- @     P    P                                                    d
- @     P q   P                                                    m
- @     P Y   P                                                    !
- @     P A   P                                                    
- @     P )   P                                                    
- @     P    P                                                     @     P    P                                                    =0 @     P    P                                                    3 @     P    P                                                    [ @     P    P                                                    i @     P    P                                                     @     P    P                                                     @     P i   P                                                     @     P Q   P                                                    9' @     P 9   P                                                    O @     P !   P                                                    x @     P 	   P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q @     P ҩ   P                                                    %D @     P ֑   P                                                    l @     P y   P                                                    l @     P a   P                                                     @     P I   P                                                    ]-  @     P 1   P                                                    V  @     P    P                                                    ~  @     P    P                                                    y  @     P    P                                                    -  @     P    P                                                      @     P    P                                                    ! @     P    P                                                    IJ @     P    P                                                    r @     P q   P                                                     @     P 	Y   P                                                           P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    ' @     P  qI   P                                                    YP @     P  u1   P                                                    y @     P  6   P                                                     @     P  :   P                                                     @     P  y   P                                                    E
+ @     P  }   P                                                     @     P     P                                                    . @     P     P                                                    W @     P     P                                                    W @     P     P                                                    =) @     P     P                                                    Q @     P  q   P                                                    z @     P  Y   P                                                    z @     P  A   P                                                    e @     P  )   P                                                     @     P     P                                                    A @     P     P                                                     @     P     P                                                    u @     P     P                                                    u @     P     P                                                    ) @     P     P                                                     @     P     P                                                    	 @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                     @     P  !   P                                                    y0 @     P  	   P                                                    -Y @     P     P                                                     @     P     P                                                     @     P     P                                                    !  @     P  ީ   P                                                    *  @     P     P                                                    *  @     P  y   P                                                    S  @     P  a   P                                                    =|  @     P  I   P                                                      @     P  1   P                                                    	 @     P     P                                                    > @     P     P                                                    qg @     P     P                                                    % @     P    P                                                    ٸ @     P    P                                                    ٸ @     P 	   P                                                     @     P    P                                                    A
+ @     P q   P                                                    R @     P Y   P                                                    Y{ @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    u @     P $   P                                                    ) @     P (   P                                                    ) @     P ,   P                                                    F @     P 0   P                                                    o @     P 4   P                                                    A	 @     P 8   P                                                    	 @     P <i   P                                                    	 @     P @Q   P                                                    ]	
+ @     P D9   P                                                    2
+ @     P H!   P                                                    Z
+ @     P L	   P                                                    y
+ @     P O   P                                                    -
+ @     P S   P                                                    -
+ @     P W   P                                                    
+ @     P [   P                                                     @     P _   P                                                     @     P cy   P                                                    E @     P ga   P                                                    E @     P kI   P                                                    n @     P o1   P                                                    a @     P s   P                                                     @     P w   P                                                     @     P z   P                                                    } @     P ~   P                                                    } @     P    P                                                    1: @     P    P                                                    9  @     P    P                                                      @     P q   P                                                     @     P Y   P                                                    U@ @     P A   P                                                    	i @     P )   P                                                     @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                    4 @     P    P                                                    A] @     P    P                                                    A] @     P    P                                                     @     P i   P                                                    + @     P Q   P                                                    =T @     P 9   P                                                    | @     P !   P                                                     @     P 	   P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                    uH @     P ة   P                                                    )q @     P ܑ   P                                                    ݙ @     P y   P                                                     @     P a   P                                                     @     P I   P                                                    q? @     P 1   P                                                    %h @     P    P                                                    ِ @     P    P                                                     @     P    P                                                    A @     P    P                                                    
+ @     P    P                                                    3 @     P    P                                                    ]\ @     P    P                                                     @     P q   P                                                    ŭ @     P Y   P                                                    y @     P A   P                                                    - @     P )   P                                                    '	 @     P    P                                                    |
+ @     P    P                                                    |
+ @     P "   P                                                    
+ @     P &   P                                                    u
+ @     P *   P                                                    )
+ @     P .   P                                                     @     P 2   P                                                    G @     P 6i   P                                                    Ep @     P :Q   P                                                     @     P >9   P                                                     @     P B!   P                                                    a @     P F	   P                                                     @     P I   P                                                    ; @     P M   P                                                    }d @     P Q   P                                                     @     P U   P                                                    ] @     P Y   P                                                    
+ @     P ]y   P                                                    
+ @     P aa   P                                                    2 @     P eI   P                                                    y[ @     P i1   P                                                    - @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    I @     P x   P                                                    & @     P |   P                                                    q  @     P    P                                                    %6  @     P    P                                                    ^  @     P q   P                                                      @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                    m @     P    P                                                    !- @     P    P                                                    !- @     P    P                                                    U @     P    P                                                    ~ @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P i   P                                                    Y! @     P Q   P                                                    J @     P 9   P                                                    r @     P !   P                                                    u @     P 	   P                                                    ) @     P    P                                                     @     P    P                                                     @     P    P                                                    U @     P ҩ   P                                                    	A @     P ֑   P                                                    i @     P y   P                                                    q @     P a   P                                                    % @     P I   P                                                    % @     P 1   P                                                     @     P    P                                                     @     P    P                                                    A5 @     P    P                                                    ] @     P    P                                                     @     P    P                                                    ] @     P    P                                                     @     P    P                                                      @     P q   P                                                    y) @     P 	Y   P                                                    m
+       P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus3-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,13 +1,18 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                     @     P  6   P                                                    ! @     P  :   P                                                     @     P  >   P                                                     @     P  Bi   P                                                    X @     P  qI   P                                                    X @     P  u1   P                                                    Q	 @     P  y   P                                                    	 @     P  }   P                                                    	 @     P     P                                                     @     P     P                                                     @     P     P                                                    U# @     P     P                                                    U# @     P     P                                                    I  @     P  q   P                                                      @     P  Y   P                                                     @     P  A   P                                                    eF @     P  )   P                                                     @     P     P                                                     @     P     P                                                    1 @     P     P                                                    MZ @     P     P                                                     @     P     P                                                    E @     P     P                                                    5n @     P     P                                                    5n @     P  i   P                                                     @     P  Q   P                                                     @     P  9   P                                                    Q @     P  !   P                                                    
- @     P  	   P                                                    Ѫ
- @     P     P                                                    
- @     P     P                                                    
- @     P     P                                                    9
- @     P  ީ   P                                                    $ @     P     P                                                    M @     P  y   P                                                     @     P  a   P                                                    m @     P  I   P                                                    ! @     P  1   P                                                    8 @     P     P                                                    a @     P     P                                                    a @     P     P                                                    = @     P    P                                                     @     P    P                                                     @     P 	   P                                                     @     P    P                                                    }
- @     P q   P                                                    13 @     P Y   P                                                    [ @     P A   P                                                     @     P )   P                                                     @     P !   P                                                    M @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    e @     P 0   P                                                    G @     P 4   P                                                    o @     P 8   P                                                     @     P <i   P                                                    5 @     P @Q   P                                                     @     P D9   P                                                     @     P H!   P                                                     @     P L	   P                                                    Q; @     P O   P                                                    M2 @     P S   P                                                    [ @     P W   P                                                     @     P [   P                                                    i @     P _   P                                                     @     P cy   P                                                     @     P ga   P                                                    &	 @     P kI   P                                                    9O	 @     P o1   P                                                    w	 @     P s   P                                                    w	 @     P w   P                                                    	 @     P z   P                                                    n @     P ~   P                                                     @     P    P                                                    Q @     P    P                                                     @     P    P                                                     @     P q   P                                                    m: @     P Y   P                                                    !c @     P A   P                                                    Ջ @     P )   P                                                     @     P    P                                                    = @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    9 @     P    P                                                     @     P    P                                                    % @     P i   P                                                      @     P Q   P                                                    4  @     P 9   P                                                    }]  @     P !   P                                                    1  @     P 	   P                                                      @     P    P                                                      @     P    P                                                    M  @     P    P                                                    ) @     P ة   P                                                    ) @     P ܑ   P                                                     @     P y   P                                                     @     P a   P                                                    I @     P I   P                                                     @     P 1   P                                                    H @     P    P                                                    eq @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    5 @     P    P                                                    < @     P    P                                                    e @     P q   P                                                    Q @     P Y   P                                                    } @     P A   P                                                    } @     P )   P                                                    1 @     P    P                                                    3 @     P    P                                                    \ @     P "   P                                                    M @     P &   P                                                     @     P *   P                                                     @     P .   P                                                    i @     P 2   P                                                    ( @     P 6i   P                                                    P @     P :Q   P                                                    y @     P >9   P                                                    9 @     P B!   P                                                     @     P F	   P                                                    	 @     P I   P                                                    G	 @     P M   P                                                    p	 @     P Q   P                                                    p	 @     P U   P                                                    5	 @     P Y   P                                                    	 @     P ]y   P                                                    	 @     P aa   P                                                    Q
- @     P eI   P                                                    <
- @     P i1   P                                                    d
- @     P m   P                                                    m
- @     P q   P                                                    !
- @     P t   P                                                    
- @     P x   P                                                     @     P |   P                                                    =0 @     P    P                                                    [ @     P    P                                                    i @     P q   P                                                     @     P Y   P                                                     @     P A   P                                                     @     P )   P                                                     @     P    P                                                    9' @     P    P                                                    O @     P    P                                                    x @     P    P                                                    U @     P    P                                                    	 @     P    P                                                     @     P    P                                                    q @     P i   P                                                    %D @     P Q   P                                                    l @     P 9   P                                                     @     P !   P                                                    V  @     P 	   P                                                    ~  @     P    P                                                    y  @     P    P                                                    -  @     P    P                                                      @     P ҩ   P                                                    ! @     P ֑   P                                                    ! @     P y   P                                                    IJ @     P a   P                                                    r @     P I   P                                                     @     P 1   P                                                    e @     P    P                                                     @     P    P                                                     @     P    P                                                    > @     P    P                                                    5g @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P q   P                                                    a @     P 	Y   P                                                           P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    YP @     P  qI   P                                                    y @     P  u1   P                                                     @     P  6   P                                                    ] @     P  :   P                                                     @     P  >   P                                                     @     P  y   P                                                    W @     P  }   P                                                    I @     P     P                                                    Q @     P     P                                                    z @     P     P                                                    z @     P     P                                                     @     P     P                                                    A @     P  q   P                                                     @     P  Y   P                                                     @     P  A   P                                                    ) @     P  )   P                                                     @     P     P                                                    	 @     P     P                                                    EE	 @     P     P                                                     @     P     P                                                     @     P     P                                                    y0 @     P     P                                                    -Y @     P     P                                                     @     P  i   P                                                    !  @     P  Q   P                                                    *  @     P  9   P                                                    *  @     P  !   P                                                    S  @     P  	   P                                                    =|  @     P     P                                                      @     P     P                                                    > @     P     P                                                    qg @     P  ީ   P                                                    % @     P     P                                                    % @     P  y   P                                                    ٸ @     P  a   P                                                     @     P  I   P                                                    A
+ @     P  1   P                                                    Y{ @     P     P                                                     @     P     P                                                     @     P     P                                                    u @     P    P                                                    ) @     P    P                                                    ) @     P 	   P                                                    F @     P    P                                                    o @     P q   P                                                    	 @     P Y   P                                                    	 @     P A   P                                                    ]	
+ @     P )   P                                                    2
+ @     P !   P                                                    Z
+ @     P $   P                                                    y
+ @     P (   P                                                    y
+ @     P ,   P                                                    -
+ @     P 0   P                                                    
+ @     P 4   P                                                     @     P 8   P                                                    E @     P <i   P                                                    E @     P @Q   P                                                    n @     P D9   P                                                    a @     P H!   P                                                     @     P L	   P                                                     @     P O   P                                                    } @     P S   P                                                    } @     P W   P                                                    1: @     P [   P                                                      @     P _   P                                                     @     P cy   P                                                    U@ @     P ga   P                                                    	i @     P kI   P                                                     @     P o1   P                                                    q @     P s   P                                                    % @     P w   P                                                     @     P z   P                                                    4 @     P ~   P                                                    4 @     P    P                                                    A] @     P    P                                                    + @     P    P                                                    =T @     P q   P                                                    | @     P Y   P                                                     @     P A   P                                                    Y @     P )   P                                                     @     P    P                                                     @     P    P                                                    uH @     P    P                                                    )q @     P    P                                                    ݙ @     P    P                                                     @     P    P                                                     @     P    P                                                    %h @     P i   P                                                    ِ @     P Q   P                                                     @     P 9   P                                                    A @     P !   P                                                    
+ @     P 	   P                                                    3 @     P    P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P ة   P                                                    y @     P ܑ   P                                                    - @     P y   P                                                    '	 @     P a   P                                                    '	 @     P I   P                                                    
+ @     P 1   P                                                    u
+ @     P    P                                                    )
+ @     P    P                                                     @     P    P                                                    G @     P    P                                                    Ep @     P    P                                                     @     P    P                                                     @     P    P                                                    a @     P q   P                                                     @     P Y   P                                                    ; @     P A   P                                                    }d @     P )   P                                                    1 @     P    P                                                    ] @     P    P                                                    ] @     P "   P                                                    
+ @     P &   P                                                    2 @     P *   P                                                    y[ @     P .   P                                                    - @     P 2   P                                                     @     P 6i   P                                                     @     P :Q   P                                                    I @     P >9   P                                                    & @     P B!   P                                                    q  @     P F	   P                                                    %6  @     P I   P                                                    ^  @     P M   P                                                      @     P Q   P                                                     @     P U   P                                                    m @     P Y   P                                                    !- @     P ]y   P                                                    !- @     P aa   P                                                    U @     P eI   P                                                    ~ @     P i1   P                                                    = @     P m   P                                                     @     P q   P                                                     @     P t   P                                                    Y! @     P x   P                                                    J @     P |   P                                                    r @     P    P                                                    u @     P    P                                                    ) @     P q   P                                                     @     P Y   P                                                    U @     P A   P                                                    	A @     P )   P                                                    i @     P    P                                                    q @     P    P                                                    q @     P    P                                                    % @     P    P                                                     @     P    P                                                     @     P    P                                                    A5 @     P    P                                                    ] @     P i   P                                                     @     P Q   P                                                    ] @     P 9   P                                                     @     P !   P                                                      @     P 	   P                                                    y) @     P    P                                                    -R @     P    P                                                    T @     P    P                                                    } @     P ҩ   P                                                    Y @     P ֑   P                                                     @     P y   P                                                     @     P a   P                                                    u 	 @     P I   P                                                    u 	 @     P 1   P                                                    )I	 @     P    P                                                    q	 @     P    P                                                    	 @     P    P                                                    E	 @     P    P                                                    	 @     P    P                                                    
+ @     P    P                                                    a=
+ @     P    P                                                    f
+ @     P q   P                                                    Ɏ
+ @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-loss-WestwoodPlus4-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,11 +1,18 @@
-ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    u @     P  6   P                                                    1  @     P  :   P                                                    D @     P  >   P                                                    D @     P  Bi   P                                                    i @     P  FQ   P                                                     @     P  qI   P                                                     @     P  u1   P                                                    	 @     P  y   P                                                    	 @     P  }   P                                                    m
- @     P     P                                                    U# @     P     P                                                    	L @     P     P                                                    	L @     P     P                                                    t @     P     P                                                     @     P  q   P                                                    eF @     P  Y   P                                                    o @     P  A   P                                                    ͗ @     P  )   P                                                    ͗ @     P     P                                                    MZ @     P     P                                                     @     P     P                                                     @     P     P                                                    i @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P  i   P                                                     @     P  Q   P                                                    Q @     P  9   P                                                     @     P  !   P                                                    9 @     P  	   P                                                    mb @     P     P                                                    mb @     P     P                                                    
- @     P     P                                                    9
- @     P  ީ   P                                                    $ @     P     P                                                    M @     P  y   P                                                    Uv @     P  a   P                                                    	 @     P  I   P                                                     @     P  1   P                                                    ! @     P     P                                                    ! @     P     P                                                    8 @     P     P                                                    a @     P    P                                                    = @     P    P                                                     @     P 	   P                                                     @     P    P                                                    Y @     P q   P                                                    }
- @     P Y   P                                                    13 @     P A   P                                                    13 @     P )   P                                                    [ @     P !   P                                                     @     P $   P                                                    M @     P (   P                                                     @     P ,   P                                                     @     P 0   P                                                    i' @     P 4   P                                                    G @     P 8   P                                                    o @     P <i   P                                                     @     P @Q   P                                                    5 @     P D9   P                                                    5 @     P H!   P                                                     @     P L	   P                                                     @     P O   P                                                    Q; @     P S   P                                                    d @     P W   P                                                     @     P [   P                                                     @     P _   P                                                    i @     P cy   P                                                     @     P ga   P                                                     @     P kI   P                                                    &	 @     P o1   P                                                    &	 @     P s   P                                                    9O	 @     P w   P                                                    w	 @     P z   P                                                    	 @     P ~   P                                                    U	 @     P    P                                                    		 @     P    P                                                    Q @     P    P                                                     @     P q   P                                                     @     P Y   P                                                    m: @     P A   P                                                    !c @     P )   P                                                    Ջ @     P    P                                                     @     P    P                                                     @     P    P                                                    = @     P    P                                                     @     P    P                                                    . @     P    P                                                    YW @     P    P                                                     @     P i   P                                                    % @     P Q   P                                                      @     P 9   P                                                    4  @     P !   P                                                    }]  @     P 	   P                                                    1  @     P    P                                                      @     P    P                                                      @     P    P                                                      @     P ة   P                                                    M  @     P ܑ   P                                                    ) @     P y   P                                                    Q @     P a   P                                                    iz @     P I   P                                                    I @     P 1   P                                                     @     P    P                                                    H @     P    P                                                    eq @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    5 @     P    P                                                    < @     P q   P                                                    e @     P Y   P                                                    e @     P A   P                                                    Q @     P )   P                                                     @     P    P                                                     @     P    P                                                    3 @     P "   P                                                    \ @     P &   P                                                    M @     P *   P                                                     @     P .   P                                                     @     P 2   P                                                    i @     P 6i   P                                                    ( @     P :Q   P                                                    P @     P >9   P                                                    y @     P B!   P                                                    9 @     P F	   P                                                     @     P I   P                                                     @     P M   P                                                     @     P Q   P                                                    U @     P U   P                                                    	E @     P Y   P                                                    p	 @     P ]y   P                                                    5	 @     P aa   P                                                    	 @     P eI   P                                                    	 @     P i1   P                                                    Q
- @     P m   P                                                    <
- @     P q   P                                                    d
- @     P t   P                                                    m
- @     P x   P                                                    !
- @     P |   P                                                    
- @     P    P                                                     @     P    P                                                    =0 @     P q   P                                                    X @     P Y   P                                                    X @     P A   P                                                     @     P )   P                                                    Y @     P    P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    9' @     P    P                                                    O @     P    P                                                    x @     P    P                                                    U @     P i   P                                                    	 @     P Q   P                                                     @     P 9   P                                                    q @     P !   P                                                    %D @     P 	   P                                                    l @     P    P                                                     @     P    P                                                    A @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                     @     P y   P                                                    y  @     P a   P                                                    -  @     P I   P                                                      @     P 1   P                                                    ! @     P    P                                                    IJ @     P    P                                                    r @     P    P                                                     @     P    P                                                    e @     P    P                                                     @     P    P                                                     @     P    P                                                    > @     P q   P                                                    5g @     P 	Y   P                                                    u       P B   P     
\ No newline at end of file
+ò          @   F              P        `                 P      P          @     P      P                                                     N @     P     P                                                     N @     P     P                                                     ]	 @     P     P                                                     ]	 @     P     P                                                     	 @     P     P                                                     	 @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  #)   P                                                      @     P  '   P                                                     a @     P  *   P                                                     a @     P  .   P                                                     B @     P  2   P                                                     B @     P  6   P                                                    U  @     P  :   P                                                    U  @     P  >   P                                                    	  @     P  Bi   P                                                    	  @     P  FQ   P                                                     @     P  J9   P                                                     @     P  N!   P                                                    q< @     P  R	   P                                                    q< @     P  U   P                                                    %e @     P  Y   P                                                    %e @     P  ]   P                                                    ٍ @     P  a   P                                                    ٍ @     P  e   P                                                     @     P  iy   P                                                     @     P  ma   P                                                    y @     P  qI   P                                                     @     P  u1   P                                                    u @     P  6   P                                                     @     P  :   P                                                    C @     P  >   P                                                    I @     P  Bi   P                                                    I @     P  y   P                                                    z @     P  }   P                                                    Y @     P     P                                                    A @     P     P                                                     @     P     P                                                     @     P     P                                                     @     P     P                                                    	 @     P  q   P                                                    EE	 @     P  Y   P                                                    EE	 @     P  A   P                                                    y0 @     P  )   P                                                    -Y @     P     P                                                     @     P     P                                                     @     P     P                                                    *  @     P     P                                                    *  @     P     P                                                    S  @     P     P                                                    =|  @     P     P                                                      @     P  i   P                                                    qg @     P  Q   P                                                    % @     P  9   P                                                    % @     P  !   P                                                    ٸ @     P  	   P                                                     @     P     P                                                    A
+ @     P     P                                                     @     P     P                                                     @     P  ީ   P                                                    u @     P     P                                                    u @     P  y   P                                                    ) @     P  a   P                                                    F @     P  I   P                                                    o @     P  1   P                                                    	 @     P     P                                                    ]	
+ @     P     P                                                    2
+ @     P     P                                                    Z
+ @     P    P                                                    y
+ @     P    P                                                    y
+ @     P 	   P                                                    -
+ @     P    P                                                    
+ @     P q   P                                                    E @     P Y   P                                                    E @     P A   P                                                    n @     P )   P                                                    a @     P !   P                                                     @     P $   P                                                     @     P (   P                                                     @     P ,   P                                                    } @     P 0   P                                                    1: @     P 4   P                                                     @     P 8   P                                                    U@ @     P <i   P                                                    	i @     P @Q   P                                                     @     P D9   P                                                    q @     P H!   P                                                    % @     P L	   P                                                     @     P O   P                                                    4 @     P S   P                                                    4 @     P W   P                                                    A] @     P [   P                                                    =T @     P _   P                                                    | @     P cy   P                                                     @     P ga   P                                                    Y @     P kI   P                                                     @     P o1   P                                                     @     P s   P                                                    uH @     P w   P                                                    )q @     P z   P                                                    ݙ @     P ~   P                                                    ݙ @     P    P                                                     @     P    P                                                    ِ @     P    P                                                     @     P q   P                                                    A @     P Y   P                                                    
+ @     P A   P                                                    3 @     P )   P                                                    ]\ @     P    P                                                     @     P    P                                                    ŭ @     P    P                                                    y @     P    P                                                    - @     P    P                                                    '	 @     P    P                                                    '	 @     P    P                                                    u
+ @     P i   P                                                    )
+ @     P Q   P                                                     @     P 9   P                                                    G @     P !   P                                                    Ep @     P 	   P                                                     @     P    P                                                     @     P    P                                                    a @     P    P                                                     @     P ة   P                                                    ; @     P ܑ   P                                                    }d @     P y   P                                                    1 @     P a   P                                                    1 @     P I   P                                                    
+ @     P 1   P                                                    2 @     P    P                                                    y[ @     P    P                                                    - @     P    P                                                     @     P    P                                                     @     P    P                                                    I @     P    P                                                    & @     P    P                                                    q  @     P q   P                                                    %6  @     P Y   P                                                    ^  @     P A   P                                                      @     P )   P                                                    A  @     P    P                                                    m @     P    P                                                    m @     P "   P                                                    !- @     P &   P                                                    U @     P *   P                                                    ~ @     P .   P                                                    = @     P 2   P                                                     @     P 6i   P                                                     @     P :Q   P                                                    Y! @     P >9   P                                                    J @     P B!   P                                                    r @     P F	   P                                                    u @     P I   P                                                    ) @     P M   P                                                     @     P Q   P                                                    	A @     P U   P                                                    i @     P Y   P                                                    q @     P ]y   P                                                    q @     P aa   P                                                    % @     P eI   P                                                     @     P i1   P                                                     @     P m   P                                                    A5 @     P q   P                                                    ] @     P t   P                                                     @     P x   P                                                    ] @     P |   P                                                     @     P    P                                                      @     P    P                                                    y) @     P q   P                                                    -R @     P Y   P                                                    } @     P A   P                                                    Y @     P )   P                                                     @     P    P                                                     @     P    P                                                     @     P    P                                                    u 	 @     P    P                                                    )I	 @     P    P                                                    q	 @     P    P                                                    	 @     P    P                                                    E	 @     P i   P                                                    	 @     P Q   P                                                    
+ @     P 9   P                                                    a=
+ @     P !   P                                                    f
+ @     P 	   P                                                    Ɏ
+ @     P    P                                                    }
+ @     P    P                                                    A @     P    P                                                     @     P ҩ   P                                                     @     P ֑   P                                                    ]4 @     P y   P                                                    ] @     P a   P                                                    Ņ @     P I   P                                                    Ņ @     P 1   P                                                    y @     P    P                                                    - @     P    P                                                     @     P    P                                                    ( @     P    P                                                    IQ @     P    P                                                    y @     P    P                                                     @     P    P                                                    e @     P q   P                                                     @     P 	Y   P                                                           P B   P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state1-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1,8 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                     ϳ  @     P     P                                                     ϳ  @     P  q   P                                                       @     P  Y   P                                                       @     P  A   P                                                       @     P  #)   P                                                       @     P  '   P                                                      @     P  *   P                                                      @     P  .   P                                                     ?: @     P  2   P                                                     ?: @     P  6   P                                                     Z @     P  :   P                                                     Z @     P  >   P                                                     _{ @     P  Bi   P                                                     _{ @     P  FQ   P                                                      @     P  J9   P                                                      @     P  N!   P                                                      @     P  R	   P                                                      @     P  U   P                                                      @     P  Y   P                                                      @     P  ]   P                                                      @     P  a   P                                                      @     P  e   P                                                     / @     P  iy   P                                                     / @     P  ma   P                                                     > @     P  qI   P                                                     > @     P  u1   P                                                     O_ @     P  y   P                                                     O_ @     P  }   P                                                      @     P     P                                                      @     P     P                                                     o @     P     P                                                     o @     P     P                                                      @     P     P                                                      @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  )   P                                                      @     P     P                                                     " @     P     P                                                     " @     P     P                                                     ?C @     P     P                                                     ?C @     P     P                                                     c @     P     P                                                     c @     P     P                                                     _ @     P  i   P                                                     _ @     P  Q   P                                                      @     P  9   P                                                      @     P  !   P                                                      @     P  	   P                                                      @     P     P                                                      @     P     P                                                      @     P     P                                                      @     P  ީ   P                                                      @     P     P                                                     /' @     P  y   P                                                     /' @     P  a   P                                                     G @     P  I   P                                                     G @     P  1   P                                                     Oh @     P     P                                                     Oh @     P     P                                                     ߈ @     P     P                                                     ߈ @     P    P                                                     o @     P    P                                                     o @     P 	   P                                                      @     P    P                                                      @     P q   P                                                      @     P Y   P                                                      @     P A   P                                                      @     P )   P                                                      @     P !   P                                                     + @     P $   P                                                     + @     P (   P                                                     ?L @     P ,   P                                                     ?L @     P 0   P                                                     l @     P 4   P                                                     l @     P 8   P                                                     _ @     P <i   P                                                     _ @     P @Q   P                                                      @     P D9   P                                                      @     P H!   P                                                      @     P L	   P                                                      @     P O   P                                                      @     P S   P                                                      @     P W   P                                                     P @     P     P                                                      @     P     P                                                     O!	 @     P     P                                                     O!	 @     P [   P                                                     f	 @     P  Q   P                                                     f	 @     P _   P                                                     /	 @     P cy   P                                                     	 @     P  !   P                                                     	 @     P ga   P                                                     	 @     P kI   P                                                     	 @     P o1   P                                                     
- @     P     P                                                     
- @     P s   P                                                     /.
- @     P w   P                                                     N
- @     P z   P                                                     Oo
- @     P ~   P                                                     ߏ
- @     P     P                                                     ߏ
- @     P    P                                                     2 @     P     P                                                     w @     P  a   P                                                     O @     P  1   P                                                      @     P     P                                                     G @     P    P                                                     ? @     P 	   P                                                      @     P q   P                                                      @     P A   P                                                     /] @     P !   P                                                      @     P (   P                                                      @     P 0   P                                                     - @     P 8   P                                                     or @     P @Q   P                                                      @     P H!   P                                                      @     P O   P                                                       @     P W   P                                                    F        P    P     
\ No newline at end of file
+ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                     ϳ  @     P     P                                                     ϳ  @     P  q   P                                                       @     P  Y   P                                                       @     P  A   P                                                       @     P  #)   P                                                       @     P  '   P                                                      @     P  *   P                                                      @     P  .   P                                                     ?: @     P  2   P                                                     ?: @     P  6   P                                                     Z @     P  :   P                                                     Z @     P  >   P                                                     _{ @     P  Bi   P                                                     _{ @     P  FQ   P                                                      @     P  J9   P                                                      @     P  N!   P                                                      @     P  R	   P                                                      @     P  U   P                                                      @     P  Y   P                                                      @     P  ]   P                                                      @     P  a   P                                                      @     P  e   P                                                     / @     P  iy   P                                                     / @     P  ma   P                                                     > @     P  qI   P                                                     > @     P  u1   P                                                     O_ @     P  y   P                                                     O_ @     P  }   P                                                      @     P     P                                                      @     P     P                                                     o @     P     P                                                     o @     P     P                                                      @     P     P                                                      @     P  q   P                                                      @     P  Y   P                                                      @     P  A   P                                                      @     P  )   P                                                      @     P     P                                                     " @     P     P                                                     " @     P     P                                                     ?C @     P     P                                                     ?C @     P     P                                                     c @     P     P                                                     c @     P     P                                                     _ @     P  i   P                                                     _ @     P  Q   P                                                      @     P  9   P                                                      @     P  !   P                                                      @     P  	   P                                                      @     P     P                                                      @     P     P                                                      @     P     P                                                      @     P  ީ   P                                                      @     P     P                                                     /' @     P  y   P                                                     /' @     P  a   P                                                     G @     P  I   P                                                     G @     P  1   P                                                     Oh @     P     P                                                     Oh @     P     P                                                     ߈ @     P     P                                                     ߈ @     P    P                                                     o @     P    P                                                     o @     P 	   P                                                      @     P    P                                                      @     P q   P                                                      @     P Y   P                                                      @     P A   P                                                      @     P )   P                                                      @     P !   P                                                     + @     P $   P                                                     + @     P (   P                                                     ?L @     P ,   P                                                     ?L @     P 0   P                                                     l @     P 4   P                                                     l @     P 8   P                                                     _ @     P <i   P                                                     _ @     P @Q   P                                                      @     P D9   P                                                      @     P H!   P                                                      @     P L	   P                                                      @     P O   P                                                      @     P S   P                                                      @     P W   P                                                      @     P [   P                                                      @     P _   P                                                     /0 @     P cy   P                                                     /0 @     P ga   P                                                     P @     P kI   P                                                     P @     P o1   P                                                     Oq @     P s   P                                                     Oq @     P w   P                                                     ߑ @     P z   P                                                     ߑ @     P ~   P                                                     o @     P    P                                                            P    P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state7-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                     @        P     P         _       P     P         /       P     P     
\ No newline at end of file
+ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                     @        P     P                P     P                P     P     
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap
--- ns-3.24.1/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3tcp/response-vectors/ns3tcp-state8-response-vectors.pcap	2016-03-23 21:36:53.000000000 -0700
@@ -1 +1 @@
-ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                            P     P     
\ No newline at end of file
+ò          @   F              P        `          O        P      P         O  @     P      P                                                     M  @     P     P                                                     M  @     P     P                                                     ?  @     P     P                                                     ?  @     P     P                                                 
\ No newline at end of file
diff -Naur ns-3.24.1/src/test/ns3wifi/wifi-interference-test-suite.cc ns-3.25/src/test/ns3wifi/wifi-interference-test-suite.cc
--- ns-3.24.1/src/test/ns3wifi/wifi-interference-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3wifi/wifi-interference-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,6 +30,7 @@
 #include "ns3/string.h"
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
+#include "ns3/boolean.h"
 #include "ns3/data-rate.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/internet-stack-helper.h"
@@ -43,7 +44,6 @@
 #include "ns3/wifi-net-device.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/constant-position-mobility-model.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/simulator.h"
 
 using namespace ns3;
@@ -168,14 +168,26 @@
   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));
-  // Set it to adhoc mode
-  wifiMac.SetType ("ns3::AdhocWifiMac");
+
+  // Set it to adhoc mode (and enable QOS for HT/VHT stations)
+  if (wifiStandard == WIFI_PHY_STANDARD_80211n_2_4GHZ
+      || wifiStandard == WIFI_PHY_STANDARD_80211n_5GHZ
+      || wifiStandard == WIFI_PHY_STANDARD_80211ac)
+    {
+      wifiMac.SetType ("ns3::AdhocWifiMac",
+                       "QosSupported", BooleanValue (true));
+    }
+  else
+    {
+      wifiMac.SetType ("ns3::AdhocWifiMac");
+    }
   NetDeviceContainer devices = wifi.Install (wifiPhy, wifiMac, c.Get (0));
+
   // This will disable these sending devices from detecting a signal 
   // so that they do not backoff
   wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (0.0) );
@@ -274,7 +286,7 @@
   NS_TEST_ASSERT_MSG_EQ (PERDiff1, PERDiff2, 
                          "The PER difference due to 1 microsecond difference in arrival shouldn't depend on absolute arrival");
   //Now rerun for 11n
-  wifiStandard=WIFI_PHY_STANDARD_80211n_2_4GHZ;
+  wifiStandard = WIFI_PHY_STANDARD_80211n_2_4GHZ;
   // Compute the packet error rate (PER) when delta=0 microseconds.  This
   // means that the interferer arrives at exactly the same time as the
   // intended packet
diff -Naur ns-3.24.1/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc ns-3.25/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc
--- ns-3.24.1/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -17,21 +17,19 @@
  *
  * Author: Dean Armstrong <deanarm@gmail.com>
  */
+
 #include "ns3/test.h"
 #include "ns3/simulator.h"
 #include "ns3/log.h"
-
+#include "ns3/uinteger.h"
 #include "ns3/boolean.h"
 #include "ns3/string.h"
 #include "ns3/double.h"
-
 #include "ns3/ssid.h"
 #include "ns3/data-rate.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/packet-sink.h"
-
 #include "ns3/wifi-helper.h"
-#include "ns3/qos-wifi-mac-helper.h"
 #include "ns3/yans-wifi-helper.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/internet-stack-helper.h"
@@ -62,9 +60,8 @@
 void
 WifiMsduAggregatorThroughputTest::DoRun (void)
 {
-  WifiHelper wifi = WifiHelper::Default ();
-
-  QosWifiMacHelper wifiMac = QosWifiMacHelper::Default ();
+  WifiHelper wifi;
+  WifiMacHelper wifiMac;
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
@@ -85,17 +82,19 @@
   NodeContainer ap;
   ap.Create (1);
   wifiMac.SetType ("ns3::ApWifiMac",
+                   "QosSupported", BooleanValue (true),
                    "Ssid", SsidValue (ssid),
                    "BeaconGeneration", BooleanValue (true),
-                   "BeaconInterval", TimeValue (MicroSeconds (102400)));
-  wifiMac.SetMsduAggregatorForAc (AC_BE, "ns3::MsduStandardAggregator",
-                                  "MaxAmsduSize", UintegerValue (4000));
+                   "BeaconInterval", TimeValue (MicroSeconds (102400)),
+                   "BE_MaxAmsduSize", UintegerValue (4000));
+
   NetDeviceContainer apDev = wifi.Install (wifiPhy, wifiMac, ap);
 
   // Setup one STA, which will be the sink for traffic in this test.
   NodeContainer sta;
   sta.Create (1);
   wifiMac.SetType ("ns3::StaWifiMac",
+                   "QosSupported", BooleanValue (true),
                    "Ssid", SsidValue (ssid),
                    "ActiveProbing", BooleanValue (false));
   NetDeviceContainer staDev = wifi.Install (wifiPhy, wifiMac, sta);
diff -Naur ns-3.24.1/src/test/traced/traced-callback-typedef-test-suite.cc ns-3.25/src/test/traced/traced-callback-typedef-test-suite.cc
--- ns-3.24.1/src/test/traced/traced-callback-typedef-test-suite.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/traced/traced-callback-typedef-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -609,7 +609,9 @@
          const WifiMacHeader &,
          empty, empty, empty, empty);
 
-  DUPE   (WifiPhyStateHelper::RxEndErrorTracedCallback, Packet::SinrTracedCallback);
+  CHECK (WifiPhyStateHelper::RxEndErrorTracedCallback,
+         Ptr<const Packet>, double, bool,
+         empty, empty);
 
   CHECK (WifiPhyStateHelper::RxOkTracedCallback,
          Ptr<const Packet>, double, WifiMode, WifiPreamble,
diff -Naur ns-3.24.1/src/test/wscript ns-3.25/src/test/wscript
--- ns-3.24.1/src/test/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/test/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -21,13 +21,15 @@
                                   'flow-monitor', 'internet', 'lr-wpan',
                                   'lte', 'mesh', 'mobility', 'olsr',
                                   'point-to-point', 'sixlowpan', 'stats',
-                                  'uan', 'wifi'])
+                                  'uan', 'wifi', 'internet-apps',
+                                  'point-to-point-layout', 'traffic-control'])
 
     headers = bld(features='ns3header')
     headers.module = 'test'
 
     test_test = bld.create_ns3_module_test_library('test')
     test_test.source = [
+        'adaptive-red-queue-disc-test-suite.cc',
         'csma-system-test-suite.cc',
         'ns3tcp/ns3tcp-cwnd-test-suite.cc',
         'ns3tcp/ns3tcp-interop-test-suite.cc',
diff -Naur ns-3.24.1/src/topology-read/bindings/callbacks_list.py ns-3.25/src/topology-read/bindings/callbacks_list.py
--- ns-3.24.1/src/topology-read/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/topology-read/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/topology-read/bindings/modulegen__gcc_ILP32.py ns-3.25/src/topology-read/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/topology-read/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/topology-read/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -86,6 +86,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]
@@ -136,10 +140,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'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## orbis-topology-reader.h (module 'topology-read'): ns3::OrbisTopologyReader [class]
     module.add_class('OrbisTopologyReader', parent=root_module['ns3::TopologyReader'])
+    ## 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> >'])
     ## rocketfuel-topology-reader.h (module 'topology-read'): ns3::RocketfuelTopologyReader [class]
     module.add_class('RocketfuelTopologyReader', parent=root_module['ns3::TopologyReader'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -242,6 +252,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_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -264,8 +276,11 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_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_Ns3OrbisTopologyReader_methods(root_module, root_module['ns3::OrbisTopologyReader'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RocketfuelTopologyReader_methods(root_module, root_module['ns3::RocketfuelTopologyReader'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -490,6 +505,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', 
@@ -505,6 +525,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', 
@@ -681,7 +706,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', 
@@ -1504,6 +1529,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([])
@@ -2190,7 +2239,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')], 
@@ -2317,6 +2366,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')])
@@ -2352,6 +2487,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', 
@@ -2415,6 +2555,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_Ns3RocketfuelTopologyReader_methods(root_module, cls):
     ## rocketfuel-topology-reader.h (module 'topology-read'): static ns3::TypeId ns3::RocketfuelTopologyReader::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
diff -Naur ns-3.24.1/src/topology-read/bindings/modulegen__gcc_LP64.py ns-3.25/src/topology-read/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/topology-read/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/topology-read/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -86,6 +86,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]
@@ -136,10 +140,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'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## orbis-topology-reader.h (module 'topology-read'): ns3::OrbisTopologyReader [class]
     module.add_class('OrbisTopologyReader', parent=root_module['ns3::TopologyReader'])
+    ## 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> >'])
     ## rocketfuel-topology-reader.h (module 'topology-read'): ns3::RocketfuelTopologyReader [class]
     module.add_class('RocketfuelTopologyReader', parent=root_module['ns3::TopologyReader'])
     ## nstime.h (module 'core'): ns3::TimeValue [class]
@@ -242,6 +252,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_Ns3TopologyReader_methods(root_module, root_module['ns3::TopologyReader'])
@@ -264,8 +276,11 @@
     register_Ns3Ipv6PrefixChecker_methods(root_module, root_module['ns3::Ipv6PrefixChecker'])
     register_Ns3Ipv6PrefixValue_methods(root_module, root_module['ns3::Ipv6PrefixValue'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_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_Ns3OrbisTopologyReader_methods(root_module, root_module['ns3::OrbisTopologyReader'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RocketfuelTopologyReader_methods(root_module, root_module['ns3::RocketfuelTopologyReader'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -490,6 +505,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', 
@@ -505,6 +525,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', 
@@ -681,7 +706,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', 
@@ -1504,6 +1529,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([])
@@ -2190,7 +2239,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')], 
@@ -2317,6 +2366,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')])
@@ -2352,6 +2487,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', 
@@ -2415,6 +2555,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_Ns3RocketfuelTopologyReader_methods(root_module, cls):
     ## rocketfuel-topology-reader.h (module 'topology-read'): static ns3::TypeId ns3::RocketfuelTopologyReader::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
diff -Naur ns-3.24.1/src/topology-read/examples/topology-example-sim.cc ns-3.25/src/topology-read/examples/topology-example-sim.cc
--- ns-3.24.1/src/topology-read/examples/topology-example-sim.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/topology-read/examples/topology-example-sim.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,8 +31,6 @@
 #include "ns3/internet-module.h"
 #include "ns3/point-to-point-module.h"
 #include "ns3/applications-module.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/ipv4-nix-vector-helper.h"
 
 #include "ns3/topology-read-module.h"
@@ -101,13 +99,7 @@
 
   // Setup NixVector Routing
   Ipv4NixVectorHelper nixRouting;
-  Ipv4StaticRoutingHelper staticRouting;
-
-  Ipv4ListRoutingHelper listRH;
-  listRH.Add (staticRouting, 0);
-  listRH.Add (nixRouting, 10);
-
-  stack.SetRoutingHelper (listRH);  // has effect on the next Install ()
+  stack.SetRoutingHelper (nixRouting);  // has effect on the next Install ()
   stack.Install (nodes);
 
   NS_LOG_INFO ("creating ip4 addresses");
diff -Naur ns-3.24.1/src/topology-read/examples/wscript ns-3.25/src/topology-read/examples/wscript
--- ns-3.24.1/src/topology-read/examples/wscript	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/topology-read/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -1,5 +1,5 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_program('topology-read', ['topology-read', 'internet', 'nix-vector-routing', 'point-to-point', 'applications'])
+    obj = bld.create_ns3_program('topology-example-sim', ['topology-read', 'internet', 'nix-vector-routing', 'point-to-point', 'applications'])
     obj.source = 'topology-example-sim.cc'
diff -Naur ns-3.24.1/src/traffic-control/bindings/callbacks_list.py ns-3.25/src/traffic-control/bindings/callbacks_list.py
--- ns-3.24.1/src/traffic-control/bindings/callbacks_list.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +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/traffic-control/bindings/modulegen__gcc_ILP32.py ns-3.25/src/traffic-control/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/traffic-control/bindings/modulegen__gcc_ILP32.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,6000 @@
+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.traffic_control', 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')
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
+    module.add_class('AttributeConstructionList', import_from_module='ns.core')
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
+    module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
+    ## buffer.h (module 'network'): ns3::Buffer [class]
+    module.add_class('Buffer', import_from_module='ns.network')
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
+    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
+    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
+    module.add_class('ByteTagIterator', import_from_module='ns.network')
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
+    module.add_class('ByteTagList', import_from_module='ns.network')
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
+    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
+    ## callback.h (module 'core'): ns3::CallbackBase [class]
+    module.add_class('CallbackBase', import_from_module='ns.core')
+    ## data-rate.h (module 'network'): ns3::DataRate [class]
+    module.add_class('DataRate', import_from_module='ns.network')
+    ## event-id.h (module 'core'): ns3::EventId [class]
+    module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    module.add_class('Ipv4Address', import_from_module='ns.network')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
+    module.add_class('Ipv4Mask', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    module.add_class('Ipv6Address', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
+    module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
+    module.add_class('NetDeviceContainer', import_from_module='ns.network')
+    ## object-base.h (module 'core'): ns3::ObjectBase [class]
+    module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
+    ## object.h (module 'core'): ns3::ObjectDeleter [struct]
+    module.add_class('ObjectDeleter', import_from_module='ns.core')
+    ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
+    module.add_class('ObjectFactory', import_from_module='ns.core')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
+    module.add_class('PacketMetadata', import_from_module='ns.network')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
+    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
+    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
+    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
+    module.add_class('PacketTagIterator', import_from_module='ns.network')
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
+    module.add_class('PacketTagList', import_from_module='ns.network')
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
+    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer [class]
+    module.add_class('QueueDiscContainer')
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory [class]
+    module.add_class('QueueDiscFactory')
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simulator.h (module 'core'): ns3::Simulator [class]
+    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## tag.h (module 'network'): ns3::Tag [class]
+    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
+    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## 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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper [class]
+    module.add_class('TrafficControlHelper')
+    ## type-id.h (module 'core'): ns3::TypeId [class]
+    module.add_class('TypeId', import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
+    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## empty.h (module 'core'): ns3::empty [class]
+    module.add_class('empty', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
+    module.add_class('int64x64_t', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
+    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## chunk.h (module 'network'): ns3::Chunk [class]
+    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## header.h (module 'network'): ns3::Header [class]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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', 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', 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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', 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'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc [class]
+    module.add_class('RedQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc [enumeration]
+    module.add_enum('', ['DTYPE_NONE', 'DTYPE_FORCED', 'DTYPE_UNFORCED'], outer_class=root_module['ns3::RedQueueDisc'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats [struct]
+    module.add_class('Stats', outer_class=root_module['ns3::RedQueueDisc'])
+    ## 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::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::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]
+    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> >'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
+    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', 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]
+    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'])
+    ## 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> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## callback.h (module 'core'): ns3::CallbackChecker [class]
+    module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## callback.h (module 'core'): ns3::CallbackImplBase [class]
+    module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    ## callback.h (module 'core'): ns3::CallbackValue [class]
+    module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc [class]
+    module.add_class('CoDelQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
+    module.add_class('DataRateChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## data-rate.h (module 'network'): ns3::DataRateValue [class]
+    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'])
+    ## 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'])
+    ## 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]
+    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'])
+    ## 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]
+    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]
+    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'])
+    ## packet.h (module 'network'): ns3::Packet [class]
+    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc [class]
+    module.add_class('PfifoFastQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## 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> >'])
+    ## 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'])
+    ## 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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::vector< short unsigned int >', 'short unsigned int', container_type=u'vector')
+    
+    ## 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)
+    
+    
+    ## 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()
+    
+
+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 ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( 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&')
+
+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'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
+    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
+    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
+    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
+    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
+    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
+    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
+    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
+    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
+    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
+    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
+    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
+    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
+    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
+    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
+    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
+    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
+    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
+    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
+    register_Ns3QueueDiscContainer_methods(root_module, root_module['ns3::QueueDiscContainer'])
+    register_Ns3QueueDiscFactory_methods(root_module, root_module['ns3::QueueDiscFactory'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
+    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
+    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
+    register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
+    register_Ns3TrafficControlHelper_methods(root_module, root_module['ns3::TrafficControlHelper'])
+    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
+    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
+    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_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_Ns3RedQueueDisc_methods(root_module, root_module['ns3::RedQueueDisc'])
+    register_Ns3RedQueueDiscStats_methods(root_module, root_module['ns3::RedQueueDisc::Stats'])
+    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__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__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
+    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
+    register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
+    register_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'])
+    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_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_Ns3CoDelQueueDisc_methods(root_module, root_module['ns3::CoDelQueueDisc'])
+    register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    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_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'])
+    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_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'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3PfifoFastQueueDisc_methods(root_module, root_module['ns3::PfifoFastQueueDisc'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
+    register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
+    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_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'])
+    return
+
+def register_Ns3Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## address.h (module 'network'): ns3::Address::Address() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
+    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
+    cls.add_constructor([param('ns3::Address const &', 'address')])
+    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
+    cls.add_method('CheckCompatible', 
+                   'bool', 
+                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyAllFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
+    cls.add_method('CopyAllTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')])
+    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
+    cls.add_method('IsInvalid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('uint8_t', 'type')], 
+                   is_const=True)
+    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
+    cls.add_method('Register', 
+                   'uint8_t', 
+                   [], 
+                   is_static=True)
+    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionList_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
+    return
+
+def register_Ns3Buffer_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    cls.add_method('AddAtEnd', 
+                   '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'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    cls.add_method('AddAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Buffer', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
+    cls.add_method('End', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3BufferIterator_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator const &', 'o')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
+    cls.add_method('IsEnd', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
+    cls.add_method('IsStart', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
+    cls.add_method('PeekU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
+    cls.add_method('ReadLsbtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
+    cls.add_method('ReadLsbtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
+    cls.add_method('ReadLsbtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
+    cls.add_method('ReadNtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
+    cls.add_method('ReadNtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
+    cls.add_method('ReadNtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
+    cls.add_method('WriteHtolsbU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
+    cls.add_method('WriteHtolsbU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
+    cls.add_method('WriteHtolsbU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
+    cls.add_method('WriteHtonU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
+    cls.add_method('WriteHtonU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
+    cls.add_method('WriteHtonU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
+    return
+
+def register_Ns3ByteTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
+    cls.add_method('GetEnd', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
+    cls.add_method('GetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ByteTagList_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
+    cls.add_constructor([])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
+    cls.add_method('Add', 
+                   'ns3::TagBuffer', 
+                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [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', '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', 
+                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIterator_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
+    cls.add_method('GetOffsetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagList::Iterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
+    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
+    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
+    cls.add_instance_attribute('end', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
+    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
+    cls.add_instance_attribute('start', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3CallbackBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
+                        visibility='protected')
+    return
+
+def register_Ns3DataRate_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('>=')
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(ns3::DataRate const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(uint64_t bps) [constructor]
+    cls.add_constructor([param('uint64_t', 'bps')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
+    cls.add_constructor([param('std::string', 'rate')])
+    ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBitsTxTime(uint32_t bits) const [member function]
+    cls.add_method('CalculateBitsTxTime', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'bits')], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBytesTxTime(uint32_t bytes) const [member function]
+    cls.add_method('CalculateBytesTxTime', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'bytes')], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
+    cls.add_method('CalculateTxTime', 
+                   'double', 
+                   [param('uint32_t', 'bytes')], 
+                   deprecated=True, is_const=True)
+    ## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
+    cls.add_method('GetBitRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=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_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_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3NetDeviceContainer_methods(root_module, cls):
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
+    cls.add_constructor([])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
+    cls.add_constructor([param('std::string', 'devName')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'other')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'deviceName')])
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_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_Ns3PacketMetadata_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
+    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::PacketMetadata const &', 'o')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [param('ns3::Buffer', 'buffer')], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::PacketMetadata', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
+    cls.add_method('RemoveHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3PacketMetadataItem_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
+    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
+    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
+    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
+    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
+    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
+    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
+    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::PacketMetadata::Item', 
+                   [])
+    return
+
+def register_Ns3PacketTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::PacketTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3PacketTagList_methods(root_module, cls):
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
+    cls.add_constructor([])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
+    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
+    cls.add_method('Head', 
+                   'ns3::PacketTagList::TagData const *', 
+                   [], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
+    cls.add_method('Peek', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
+    cls.add_method('Remove', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    return
+
+def register_Ns3PacketTagListTagData_methods(root_module, cls):
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
+    cls.add_constructor([])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
+    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
+    cls.add_instance_attribute('data', 'uint8_t [ 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_Ns3QueueDiscContainer_methods(root_module, cls):
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer(ns3::QueueDiscContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscContainer const &', 'arg0')])
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer() [constructor]
+    cls.add_constructor([])
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer(ns3::Ptr<ns3::QueueDisc> qDisc) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')])
+    ## queue-disc-container.h (module 'traffic-control'): void ns3::QueueDiscContainer::Add(ns3::QueueDiscContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::QueueDiscContainer', 'other')])
+    ## queue-disc-container.h (module 'traffic-control'): void ns3::QueueDiscContainer::Add(ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')])
+    ## queue-disc-container.h (module 'traffic-control'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::QueueDisc>*,std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > > ns3::QueueDiscContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::QueueDisc > const, std::vector< ns3::Ptr< ns3::QueueDisc > > >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::QueueDisc>*,std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > > ns3::QueueDiscContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::QueueDisc > const, std::vector< ns3::Ptr< ns3::QueueDisc > > >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): uint32_t ns3::QueueDiscContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3QueueDiscFactory_methods(root_module, cls):
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory::QueueDiscFactory(ns3::QueueDiscFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscFactory const &', 'arg0')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory::QueueDiscFactory(ns3::ObjectFactory factory) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::AddInternalQueue(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::AddPacketFilter(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::QueueDiscFactory::AddQueueDiscClass(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'uint16_t', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscFactory::CreateQueueDisc(std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > const & queueDiscs) [member function]
+    cls.add_method('CreateQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('std::vector< ns3::Ptr< ns3::QueueDisc > > const &', 'queueDiscs')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::SetChildQueueDisc(uint16_t classId, uint16_t handle) [member function]
+    cls.add_method('SetChildQueueDisc', 
+                   'void', 
+                   [param('uint16_t', 'classId'), param('uint16_t', 'handle')])
+    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_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_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__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_Ns3TrafficControlHelper_methods(root_module, cls):
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper::TrafficControlHelper(ns3::TrafficControlHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TrafficControlHelper const &', 'arg0')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper::TrafficControlHelper() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::TrafficControlHelper::AddChildQueueDisc(uint16_t handle, uint16_t classId, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddChildQueueDisc', 
+                   'uint16_t', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'classId'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): std::vector<short unsigned int,std::allocator<short unsigned int> > ns3::TrafficControlHelper::AddChildQueueDiscs(uint16_t handle, std::vector<short unsigned int,std::allocator<short unsigned int> > const & classes, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddChildQueueDiscs', 
+                   'std::vector< short unsigned int >', 
+                   [param('uint16_t', 'handle'), param('std::vector< short unsigned int > const &', 'classes'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::AddInternalQueues(uint16_t handle, uint16_t count, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddInternalQueues', 
+                   'void', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'count'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::AddPacketFilter(uint16_t handle, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('uint16_t', 'handle'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): std::vector<short unsigned int,std::allocator<short unsigned int> > ns3::TrafficControlHelper::AddQueueDiscClasses(uint16_t handle, uint16_t count, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddQueueDiscClasses', 
+                   'std::vector< short unsigned int >', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'count'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): static ns3::TrafficControlHelper ns3::TrafficControlHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::TrafficControlHelper', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscContainer ns3::TrafficControlHelper::Install(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::QueueDiscContainer', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscContainer ns3::TrafficControlHelper::Install(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('Install', 
+                   'ns3::QueueDiscContainer', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::TrafficControlHelper::SetRootQueueDisc(std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetRootQueueDisc', 
+                   'uint16_t', 
+                   [param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::Uninstall(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Uninstall', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::Uninstall(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('Uninstall', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    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::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_Ns3Empty_methods(root_module, cls):
+    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
+    cls.add_constructor([])
+    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::empty const &', 'arg0')])
+    return
+
+def register_Ns3Int64x64_t_methods(root_module, cls):
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    cls.add_constructor([])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long double v) [constructor]
+    cls.add_constructor([param('long double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    cls.add_method('MulByInvert', 
+                   'void', 
+                   [param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
+    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
+    return
+
+def register_Ns3Chunk_methods(root_module, cls):
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
+    cls.add_constructor([])
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
+    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Header_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## header.h (module 'network'): ns3::Header::Header() [constructor]
+    cls.add_constructor([])
+    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Header const &', 'arg0')])
+    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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_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', 
+                   '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_Ns3RedQueueDisc_methods(root_module, cls):
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::RedQueueDisc(ns3::RedQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RedQueueDisc const &', 'arg0')])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::RedQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## red-queue-disc.h (module 'traffic-control'): int64_t ns3::RedQueueDisc::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## red-queue-disc.h (module 'traffic-control'): double ns3::RedQueueDisc::GetAredAlpha() [member function]
+    cls.add_method('GetAredAlpha', 
+                   'double', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): double ns3::RedQueueDisc::GetAredBeta() [member function]
+    cls.add_method('GetAredBeta', 
+                   'double', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::RedQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): uint32_t ns3::RedQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats ns3::RedQueueDisc::GetStats() [member function]
+    cls.add_method('GetStats', 
+                   'ns3::RedQueueDisc::Stats', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::RedQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetAredAlpha(double alpha) [member function]
+    cls.add_method('SetAredAlpha', 
+                   'void', 
+                   [param('double', 'alpha')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetAredBeta(double beta) [member function]
+    cls.add_method('SetAredBeta', 
+                   'void', 
+                   [param('double', 'beta')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetQueueLimit(uint32_t lim) [member function]
+    cls.add_method('SetQueueLimit', 
+                   'void', 
+                   [param('uint32_t', 'lim')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetTh(double minTh, double maxTh) [member function]
+    cls.add_method('SetTh', 
+                   'void', 
+                   [param('double', 'minTh'), param('double', 'maxTh')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): bool ns3::RedQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::RedQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): bool ns3::RedQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::RedQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3RedQueueDiscStats_methods(root_module, cls):
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::Stats() [constructor]
+    cls.add_constructor([])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::Stats(ns3::RedQueueDisc::Stats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RedQueueDisc::Stats const &', 'arg0')])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::forcedDrop [variable]
+    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::qLimDrop [variable]
+    cls.add_instance_attribute('qLimDrop', 'uint32_t', is_const=False)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::unforcedDrop [variable]
+    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
+    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__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__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([])
+    ## 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_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_Ns3TracedValue__Ns3Time_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue(ns3::TracedValue<ns3::Time> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::Time > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue(ns3::Time const & v) [constructor]
+    cls.add_constructor([param('ns3::Time const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::Time>::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::Time>::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::Time>::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::Time>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::Time ns3::TracedValue<ns3::Time>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::Time>::Set(ns3::Time const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [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<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')], 
+                   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)
+    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   '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_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_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([])
+    ## 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_Ns3CoDelQueueDisc_methods(root_module, cls):
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc::CoDelQueueDisc(ns3::CoDelQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CoDelQueueDisc const &', 'arg0')])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc::CoDelQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropCount() [member function]
+    cls.add_method('GetDropCount', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropNext() [member function]
+    cls.add_method('GetDropNext', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropOverLimit() [member function]
+    cls.add_method('GetDropOverLimit', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Time ns3::CoDelQueueDisc::GetInterval() [member function]
+    cls.add_method('GetInterval', 
+                   'ns3::Time', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::CoDelQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Time ns3::CoDelQueueDisc::GetTarget() [member function]
+    cls.add_method('GetTarget', 
+                   'ns3::Time', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::CoDelQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## codel-queue-disc.h (module 'traffic-control'): void ns3::CoDelQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## codel-queue-disc.h (module 'traffic-control'): bool ns3::CoDelQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::CoDelQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): bool ns3::CoDelQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::CoDelQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): void ns3::CoDelQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   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', 
+                   '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_Ns3DataRateChecker_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker(ns3::DataRateChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateChecker const &', 'arg0')])
+    return
+
+def register_Ns3DataRateValue_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRateValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateValue const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRate const & value) [constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'value')])
+    ## data-rate.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::DataRateValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-rate.h (module 'network'): bool ns3::DataRateValue::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)
+    ## data-rate.h (module 'network'): ns3::DataRate ns3::DataRateValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DataRate', 
+                   [], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): std::string ns3::DataRateValue::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)
+    ## data-rate.h (module 'network'): void ns3::DataRateValue::Set(ns3::DataRate const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DataRate const &', 'value')])
+    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_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([])
+    ## 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_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', 
+                   '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_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([])
+    ## 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_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([])
+    ## 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_Ns3NixVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
+    cls.add_constructor([])
+    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
+    cls.add_constructor([param('ns3::NixVector const &', 'o')])
+    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
+    cls.add_method('AddNeighborIndex', 
+                   'void', 
+                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
+    cls.add_method('BitCount', 
+                   'uint32_t', 
+                   [param('uint32_t', 'numberOfNeighbors')], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
+    cls.add_method('ExtractNeighborIndex', 
+                   'uint32_t', 
+                   [param('uint32_t', 'numberOfBits')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
+    cls.add_method('GetRemainingBits', 
+                   'uint32_t', 
+                   [])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3Node_methods(root_module, cls):
+    ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Node const &', 'arg0')])
+    ## node.h (module 'network'): ns3::Node::Node() [constructor]
+    cls.add_constructor([])
+    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
+    cls.add_constructor([param('uint32_t', 'systemId')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('AddApplication', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddDevice', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
+    cls.add_method('ChecksumEnabled', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
+    cls.add_method('GetApplication', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): 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_Ns3Packet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+    cls.add_constructor([])
+    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Packet const &', 'o')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
+    cls.add_constructor([param('uint32_t', 'size')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddByteTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header')])
+    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddPacketTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer')])
+    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
+    cls.add_method('EnablePrinting', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
+    cls.add_method('FindFirstMatchingByteTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
+    cls.add_method('GetByteTagIterator', 
+                   'ns3::ByteTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
+    cls.add_method('GetNixVector', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
+    cls.add_method('GetPacketTagIterator', 
+                   'ns3::PacketTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
+    cls.add_method('PeekHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')], 
+                   is_const=True)
+    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+    cls.add_method('PeekPacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('PeekTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
+    cls.add_method('PrintByteTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
+    cls.add_method('PrintPacketTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
+    cls.add_method('RemoveAllByteTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
+    cls.add_method('RemoveAllPacketTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
+    cls.add_method('RemoveHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')])
+    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('RemovePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   '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_Ns3PfifoFastQueueDisc_methods(root_module, cls):
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc::PfifoFastQueueDisc(ns3::PfifoFastQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastQueueDisc const &', 'arg0')])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc::PfifoFastQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::PfifoFastQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): bool ns3::PfifoFastQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::PfifoFastQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): bool ns3::PfifoFastQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::PfifoFastQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): void ns3::PfifoFastQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   '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_Ns3StringChecker_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringChecker::StringChecker() [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')])
+    return
+
+def register_Ns3StringValue_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringValue::StringValue() [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 >', 
+                   [], 
+                   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', 
+                   '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', 
+                   'void', 
+                   [param('std::string const &', 'value')])
+    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_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([])
+    ## 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_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')])
+    ## 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)
+    register_functions_ns3_internal(module.get_submodule('internal'), 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 register_functions_ns3_internal(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/traffic-control/bindings/modulegen__gcc_LP64.py ns-3.25/src/traffic-control/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/traffic-control/bindings/modulegen__gcc_LP64.py	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,6000 @@
+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.traffic_control', 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')
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList [class]
+    module.add_class('AttributeConstructionList', import_from_module='ns.core')
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item [struct]
+    module.add_class('Item', import_from_module='ns.core', outer_class=root_module['ns3::AttributeConstructionList'])
+    ## buffer.h (module 'network'): ns3::Buffer [class]
+    module.add_class('Buffer', import_from_module='ns.network')
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator [class]
+    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::Buffer'])
+    ## packet.h (module 'network'): ns3::ByteTagIterator [class]
+    module.add_class('ByteTagIterator', import_from_module='ns.network')
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item [class]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagIterator'])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList [class]
+    module.add_class('ByteTagList', import_from_module='ns.network')
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator [class]
+    module.add_class('Iterator', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList'])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item [struct]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::ByteTagList::Iterator'])
+    ## callback.h (module 'core'): ns3::CallbackBase [class]
+    module.add_class('CallbackBase', import_from_module='ns.core')
+    ## data-rate.h (module 'network'): ns3::DataRate [class]
+    module.add_class('DataRate', import_from_module='ns.network')
+    ## event-id.h (module 'core'): ns3::EventId [class]
+    module.add_class('EventId', import_from_module='ns.core')
+    ## hash.h (module 'core'): ns3::Hasher [class]
+    module.add_class('Hasher', import_from_module='ns.core')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    module.add_class('Ipv4Address', import_from_module='ns.network')
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Address [class]
+    root_module['ns3::Ipv4Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv4-address.h (module 'network'): ns3::Ipv4Mask [class]
+    module.add_class('Ipv4Mask', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    module.add_class('Ipv6Address', import_from_module='ns.network')
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Address [class]
+    root_module['ns3::Ipv6Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## ipv6-address.h (module 'network'): ns3::Ipv6Prefix [class]
+    module.add_class('Ipv6Prefix', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    module.add_class('Mac48Address', import_from_module='ns.network')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address [class]
+    root_module['ns3::Mac48Address'].implicitly_converts_to(root_module['ns3::Address'])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer [class]
+    module.add_class('NetDeviceContainer', import_from_module='ns.network')
+    ## object-base.h (module 'core'): ns3::ObjectBase [class]
+    module.add_class('ObjectBase', allow_subclassing=True, import_from_module='ns.core')
+    ## object.h (module 'core'): ns3::ObjectDeleter [struct]
+    module.add_class('ObjectDeleter', import_from_module='ns.core')
+    ## object-factory.h (module 'core'): ns3::ObjectFactory [class]
+    module.add_class('ObjectFactory', import_from_module='ns.core')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata [class]
+    module.add_class('PacketMetadata', import_from_module='ns.network')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [struct]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item [enumeration]
+    module.add_enum('', ['PAYLOAD', 'HEADER', 'TRAILER'], outer_class=root_module['ns3::PacketMetadata::Item'], import_from_module='ns.network')
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator [class]
+    module.add_class('ItemIterator', import_from_module='ns.network', outer_class=root_module['ns3::PacketMetadata'])
+    ## packet.h (module 'network'): ns3::PacketTagIterator [class]
+    module.add_class('PacketTagIterator', import_from_module='ns.network')
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item [class]
+    module.add_class('Item', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagIterator'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList [class]
+    module.add_class('PacketTagList', import_from_module='ns.network')
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData [struct]
+    module.add_class('TagData', import_from_module='ns.network', outer_class=root_module['ns3::PacketTagList'])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData_e [enumeration]
+    module.add_enum('TagData_e', ['MAX_SIZE'], outer_class=root_module['ns3::PacketTagList::TagData'], import_from_module='ns.network')
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer [class]
+    module.add_class('QueueDiscContainer')
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory [class]
+    module.add_class('QueueDiscFactory')
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter> [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::Object', 'ns3::ObjectBase', 'ns3::ObjectDeleter'], parent=root_module['ns3::ObjectBase'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simulator.h (module 'core'): ns3::Simulator [class]
+    module.add_class('Simulator', destructor_visibility='private', import_from_module='ns.core')
+    ## tag.h (module 'network'): ns3::Tag [class]
+    module.add_class('Tag', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## tag-buffer.h (module 'network'): ns3::TagBuffer [class]
+    module.add_class('TagBuffer', import_from_module='ns.network')
+    ## nstime.h (module 'core'): ns3::TimeWithUnit [class]
+    module.add_class('TimeWithUnit', import_from_module='ns.core')
+    ## 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<unsigned int> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned int'])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper [class]
+    module.add_class('TrafficControlHelper')
+    ## type-id.h (module 'core'): ns3::TypeId [class]
+    module.add_class('TypeId', import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeFlag [enumeration]
+    module.add_enum('AttributeFlag', ['ATTR_GET', 'ATTR_SET', 'ATTR_CONSTRUCT', 'ATTR_SGC'], outer_class=root_module['ns3::TypeId'], import_from_module='ns.core')
+    ## type-id.h (module 'core'): ns3::TypeId::AttributeInformation [struct]
+    module.add_class('AttributeInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## type-id.h (module 'core'): ns3::TypeId::TraceSourceInformation [struct]
+    module.add_class('TraceSourceInformation', import_from_module='ns.core', outer_class=root_module['ns3::TypeId'])
+    ## empty.h (module 'core'): ns3::empty [class]
+    module.add_class('empty', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t [class]
+    module.add_class('int64x64_t', import_from_module='ns.core')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::impl_type [enumeration]
+    module.add_enum('impl_type', ['int128_impl', 'cairo_impl', 'ld_impl'], outer_class=root_module['ns3::int64x64_t'], import_from_module='ns.core')
+    ## chunk.h (module 'network'): ns3::Chunk [class]
+    module.add_class('Chunk', import_from_module='ns.network', parent=root_module['ns3::ObjectBase'])
+    ## header.h (module 'network'): ns3::Header [class]
+    module.add_class('Header', import_from_module='ns.network', parent=root_module['ns3::Chunk'])
+    ## 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', 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', 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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscClass [class]
+    module.add_class('QueueDiscClass', 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'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc [class]
+    module.add_class('RedQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc [enumeration]
+    module.add_enum('', ['DTYPE_NONE', 'DTYPE_FORCED', 'DTYPE_UNFORCED'], outer_class=root_module['ns3::RedQueueDisc'])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats [struct]
+    module.add_class('Stats', outer_class=root_module['ns3::RedQueueDisc'])
+    ## 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::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::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]
+    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> >'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time> [class]
+    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', 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]
+    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'])
+    ## 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> >'])
+    ## boolean.h (module 'core'): ns3::BooleanChecker [class]
+    module.add_class('BooleanChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## boolean.h (module 'core'): ns3::BooleanValue [class]
+    module.add_class('BooleanValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## callback.h (module 'core'): ns3::CallbackChecker [class]
+    module.add_class('CallbackChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
+    ## callback.h (module 'core'): ns3::CallbackImplBase [class]
+    module.add_class('CallbackImplBase', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> >'])
+    ## callback.h (module 'core'): ns3::CallbackValue [class]
+    module.add_class('CallbackValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc [class]
+    module.add_class('CoDelQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## random-variable-stream.h (module 'core'): ns3::ConstantRandomVariable [class]
+    module.add_class('ConstantRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker [class]
+    module.add_class('DataRateChecker', import_from_module='ns.network', parent=root_module['ns3::AttributeChecker'])
+    ## data-rate.h (module 'network'): ns3::DataRateValue [class]
+    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'])
+    ## 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'])
+    ## 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]
+    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'])
+    ## 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]
+    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]
+    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'])
+    ## packet.h (module 'network'): ns3::Packet [class]
+    module.add_class('Packet', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
+    ## random-variable-stream.h (module 'core'): ns3::ParetoRandomVariable [class]
+    module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc [class]
+    module.add_class('PfifoFastQueueDisc', parent=root_module['ns3::QueueDisc'])
+    ## 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> >'])
+    ## 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'])
+    ## 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'])
+    ## queue-disc.h (module 'traffic-control'): ns3::QueueDiscItem [class]
+    module.add_class('QueueDiscItem', parent=root_module['ns3::QueueItem'])
+    module.add_container('std::vector< ns3::Ptr< ns3::QueueDisc > >', 'ns3::Ptr< ns3::QueueDisc >', container_type=u'vector')
+    module.add_container('std::vector< short unsigned int >', 'short unsigned int', container_type=u'vector')
+    
+    ## 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)
+    
+    
+    ## 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()
+    
+
+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 ( * ) ( bool, bool ) *', u'ns3::TracedValueCallback::Bool')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) **', u'ns3::TracedValueCallback::Bool*')
+    typehandlers.add_type_alias(u'void ( * ) ( bool, bool ) *&', u'ns3::TracedValueCallback::Bool&')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *', u'ns3::TracedValueCallback::Double')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) **', u'ns3::TracedValueCallback::Double*')
+    typehandlers.add_type_alias(u'void ( * ) ( double, double ) *&', u'ns3::TracedValueCallback::Double&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *', u'ns3::TracedValueCallback::Uint8')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) **', u'ns3::TracedValueCallback::Uint8*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint8_t, uint8_t ) *&', u'ns3::TracedValueCallback::Uint8&')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *', u'ns3::TracedValueCallback::Uint32')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) **', u'ns3::TracedValueCallback::Uint32*')
+    typehandlers.add_type_alias(u'void ( * ) ( uint32_t, uint32_t ) *&', u'ns3::TracedValueCallback::Uint32&')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *', u'ns3::TracedValueCallback::Time')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) **', u'ns3::TracedValueCallback::Time*')
+    typehandlers.add_type_alias(u'void ( * ) ( ns3::Time, ns3::Time ) *&', u'ns3::TracedValueCallback::Time&')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *', u'ns3::TracedValueCallback::Int16')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) **', u'ns3::TracedValueCallback::Int16*')
+    typehandlers.add_type_alias(u'void ( * ) ( int16_t, int16_t ) *&', u'ns3::TracedValueCallback::Int16&')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *', u'ns3::TracedValueCallback::Int32')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) **', u'ns3::TracedValueCallback::Int32*')
+    typehandlers.add_type_alias(u'void ( * ) ( int32_t, int32_t ) *&', u'ns3::TracedValueCallback::Int32&')
+    typehandlers.add_type_alias(u'void ( * ) ( 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&')
+
+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'])
+    register_Ns3AttributeConstructionListItem_methods(root_module, root_module['ns3::AttributeConstructionList::Item'])
+    register_Ns3Buffer_methods(root_module, root_module['ns3::Buffer'])
+    register_Ns3BufferIterator_methods(root_module, root_module['ns3::Buffer::Iterator'])
+    register_Ns3ByteTagIterator_methods(root_module, root_module['ns3::ByteTagIterator'])
+    register_Ns3ByteTagIteratorItem_methods(root_module, root_module['ns3::ByteTagIterator::Item'])
+    register_Ns3ByteTagList_methods(root_module, root_module['ns3::ByteTagList'])
+    register_Ns3ByteTagListIterator_methods(root_module, root_module['ns3::ByteTagList::Iterator'])
+    register_Ns3ByteTagListIteratorItem_methods(root_module, root_module['ns3::ByteTagList::Iterator::Item'])
+    register_Ns3CallbackBase_methods(root_module, root_module['ns3::CallbackBase'])
+    register_Ns3DataRate_methods(root_module, root_module['ns3::DataRate'])
+    register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
+    register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
+    register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
+    register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
+    register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
+    register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
+    register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase'])
+    register_Ns3ObjectDeleter_methods(root_module, root_module['ns3::ObjectDeleter'])
+    register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory'])
+    register_Ns3PacketMetadata_methods(root_module, root_module['ns3::PacketMetadata'])
+    register_Ns3PacketMetadataItem_methods(root_module, root_module['ns3::PacketMetadata::Item'])
+    register_Ns3PacketMetadataItemIterator_methods(root_module, root_module['ns3::PacketMetadata::ItemIterator'])
+    register_Ns3PacketTagIterator_methods(root_module, root_module['ns3::PacketTagIterator'])
+    register_Ns3PacketTagIteratorItem_methods(root_module, root_module['ns3::PacketTagIterator::Item'])
+    register_Ns3PacketTagList_methods(root_module, root_module['ns3::PacketTagList'])
+    register_Ns3PacketTagListTagData_methods(root_module, root_module['ns3::PacketTagList::TagData'])
+    register_Ns3QueueDiscContainer_methods(root_module, root_module['ns3::QueueDiscContainer'])
+    register_Ns3QueueDiscFactory_methods(root_module, root_module['ns3::QueueDiscFactory'])
+    register_Ns3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_methods(root_module, root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
+    register_Ns3Simulator_methods(root_module, root_module['ns3::Simulator'])
+    register_Ns3Tag_methods(root_module, root_module['ns3::Tag'])
+    register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
+    register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
+    register_Ns3TracedValue__Bool_methods(root_module, root_module['ns3::TracedValue< bool >'])
+    register_Ns3TracedValue__Unsigned_int_methods(root_module, root_module['ns3::TracedValue< unsigned int >'])
+    register_Ns3TrafficControlHelper_methods(root_module, root_module['ns3::TrafficControlHelper'])
+    register_Ns3TypeId_methods(root_module, root_module['ns3::TypeId'])
+    register_Ns3TypeIdAttributeInformation_methods(root_module, root_module['ns3::TypeId::AttributeInformation'])
+    register_Ns3TypeIdTraceSourceInformation_methods(root_module, root_module['ns3::TypeId::TraceSourceInformation'])
+    register_Ns3Empty_methods(root_module, root_module['ns3::empty'])
+    register_Ns3Int64x64_t_methods(root_module, root_module['ns3::int64x64_t'])
+    register_Ns3Chunk_methods(root_module, root_module['ns3::Chunk'])
+    register_Ns3Header_methods(root_module, root_module['ns3::Header'])
+    register_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_Ns3RedQueueDisc_methods(root_module, root_module['ns3::RedQueueDisc'])
+    register_Ns3RedQueueDiscStats_methods(root_module, root_module['ns3::RedQueueDisc::Stats'])
+    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__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__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
+    register_Ns3Time_methods(root_module, root_module['ns3::Time'])
+    register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
+    register_Ns3TracedValue__Ns3Time_methods(root_module, root_module['ns3::TracedValue< ns3::Time >'])
+    register_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'])
+    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_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_Ns3CoDelQueueDisc_methods(root_module, root_module['ns3::CoDelQueueDisc'])
+    register_Ns3ConstantRandomVariable_methods(root_module, root_module['ns3::ConstantRandomVariable'])
+    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_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'])
+    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_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'])
+    register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
+    register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
+    register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
+    register_Ns3PfifoFastQueueDisc_methods(root_module, root_module['ns3::PfifoFastQueueDisc'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
+    register_Ns3StringChecker_methods(root_module, root_module['ns3::StringChecker'])
+    register_Ns3StringValue_methods(root_module, root_module['ns3::StringValue'])
+    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_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'])
+    return
+
+def register_Ns3Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## address.h (module 'network'): ns3::Address::Address() [constructor]
+    cls.add_constructor([])
+    ## address.h (module 'network'): ns3::Address::Address(uint8_t type, uint8_t const * buffer, uint8_t len) [constructor]
+    cls.add_constructor([param('uint8_t', 'type'), param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): ns3::Address::Address(ns3::Address const & address) [copy constructor]
+    cls.add_constructor([param('ns3::Address const &', 'address')])
+    ## address.h (module 'network'): bool ns3::Address::CheckCompatible(uint8_t type, uint8_t len) const [member function]
+    cls.add_method('CheckCompatible', 
+                   'bool', 
+                   [param('uint8_t', 'type'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyAllFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyAllTo(uint8_t * buffer, uint8_t len) const [member function]
+    cls.add_method('CopyAllTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint8_t', 'len')], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyFrom(uint8_t const * buffer, uint8_t len) [member function]
+    cls.add_method('CopyFrom', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint8_t', 'len')])
+    ## address.h (module 'network'): uint32_t ns3::Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## address.h (module 'network'): void ns3::Address::Deserialize(ns3::TagBuffer buffer) [member function]
+    cls.add_method('Deserialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')])
+    ## address.h (module 'network'): uint8_t ns3::Address::GetLength() const [member function]
+    cls.add_method('GetLength', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): uint32_t ns3::Address::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsInvalid() const [member function]
+    cls.add_method('IsInvalid', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## address.h (module 'network'): bool ns3::Address::IsMatchingType(uint8_t type) const [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('uint8_t', 'type')], 
+                   is_const=True)
+    ## address.h (module 'network'): static uint8_t ns3::Address::Register() [member function]
+    cls.add_method('Register', 
+                   'uint8_t', 
+                   [], 
+                   is_static=True)
+    ## address.h (module 'network'): void ns3::Address::Serialize(ns3::TagBuffer buffer) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::TagBuffer', 'buffer')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionList_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList(ns3::AttributeConstructionList const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::AttributeConstructionList() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): void ns3::AttributeConstructionList::Add(std::string name, ns3::Ptr<ns3::AttributeChecker const> checker, ns3::Ptr<ns3::AttributeValue> value) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'name'), param('ns3::Ptr< ns3::AttributeChecker const >', 'checker'), param('ns3::Ptr< ns3::AttributeValue >', 'value')])
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): std::_List_const_iterator<ns3::AttributeConstructionList::Item> ns3::AttributeConstructionList::End() const [member function]
+    cls.add_method('End', 
+                   'std::_List_const_iterator< ns3::AttributeConstructionList::Item >', 
+                   [], 
+                   is_const=True)
+    ## attribute-construction-list.h (module 'core'): ns3::Ptr<ns3::AttributeValue> ns3::AttributeConstructionList::Find(ns3::Ptr<ns3::AttributeChecker const> checker) const [member function]
+    cls.add_method('Find', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [param('ns3::Ptr< ns3::AttributeChecker const >', 'checker')], 
+                   is_const=True)
+    return
+
+def register_Ns3AttributeConstructionListItem_methods(root_module, cls):
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::Item(ns3::AttributeConstructionList::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::AttributeConstructionList::Item const &', 'arg0')])
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::checker [variable]
+    cls.add_instance_attribute('checker', 'ns3::Ptr< ns3::AttributeChecker const >', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::name [variable]
+    cls.add_instance_attribute('name', 'std::string', is_const=False)
+    ## attribute-construction-list.h (module 'core'): ns3::AttributeConstructionList::Item::value [variable]
+    cls.add_instance_attribute('value', 'ns3::Ptr< ns3::AttributeValue >', is_const=False)
+    return
+
+def register_Ns3Buffer_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(uint32_t dataSize, bool initialize) [constructor]
+    cls.add_constructor([param('uint32_t', 'dataSize'), param('bool', 'initialize')])
+    ## buffer.h (module 'network'): ns3::Buffer::Buffer(ns3::Buffer const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer const &', 'o')])
+    ## buffer.h (module 'network'): void ns3::Buffer::AddAtEnd(uint32_t end) [member function]
+    cls.add_method('AddAtEnd', 
+                   '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'): void ns3::Buffer::AddAtStart(uint32_t start) [member function]
+    cls.add_method('AddAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): ns3::Buffer ns3::Buffer::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Buffer', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator ns3::Buffer::End() const [member function]
+    cls.add_method('End', 
+                   'ns3::Buffer::Iterator', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint8_t const * ns3::Buffer::PeekData() const [member function]
+    cls.add_method('PeekData', 
+                   'uint8_t const *', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3BufferIterator_methods(root_module, cls):
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator(ns3::Buffer::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Buffer::Iterator const &', 'arg0')])
+    ## buffer.h (module 'network'): ns3::Buffer::Iterator::Iterator() [constructor]
+    cls.add_constructor([])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum) [member function]
+    cls.add_method('CalculateIpChecksum', 
+                   'uint16_t', 
+                   [param('uint16_t', 'size'), param('uint32_t', 'initialChecksum')])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetDistanceFrom(ns3::Buffer::Iterator const & o) const [member function]
+    cls.add_method('GetDistanceFrom', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator const &', 'o')], 
+                   is_const=True)
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsEnd() const [member function]
+    cls.add_method('IsEnd', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): bool ns3::Buffer::Iterator::IsStart() const [member function]
+    cls.add_method('IsStart', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Next(uint32_t delta) [member function]
+    cls.add_method('Next', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::PeekU8() [member function]
+    cls.add_method('PeekU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev() [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Prev(uint32_t delta) [member function]
+    cls.add_method('Prev', 
+                   'void', 
+                   [param('uint32_t', 'delta')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(uint8_t * buffer, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Read(ns3::Buffer::Iterator start, uint32_t size) [member function]
+    cls.add_method('Read', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadLsbtohU16() [member function]
+    cls.add_method('ReadLsbtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadLsbtohU32() [member function]
+    cls.add_method('ReadLsbtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadLsbtohU64() [member function]
+    cls.add_method('ReadLsbtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadNtohU16() [member function]
+    cls.add_method('ReadNtohU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadNtohU32() [member function]
+    cls.add_method('ReadNtohU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadNtohU64() [member function]
+    cls.add_method('ReadNtohU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint16_t ns3::Buffer::Iterator::ReadU16() [member function]
+    cls.add_method('ReadU16', 
+                   'uint16_t', 
+                   [])
+    ## buffer.h (module 'network'): uint32_t ns3::Buffer::Iterator::ReadU32() [member function]
+    cls.add_method('ReadU32', 
+                   'uint32_t', 
+                   [])
+    ## buffer.h (module 'network'): uint64_t ns3::Buffer::Iterator::ReadU64() [member function]
+    cls.add_method('ReadU64', 
+                   'uint64_t', 
+                   [])
+    ## buffer.h (module 'network'): uint8_t ns3::Buffer::Iterator::ReadU8() [member function]
+    cls.add_method('ReadU8', 
+                   'uint8_t', 
+                   [])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::Write(ns3::Buffer::Iterator start, ns3::Buffer::Iterator end) [member function]
+    cls.add_method('Write', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start'), param('ns3::Buffer::Iterator', 'end')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU16(uint16_t data) [member function]
+    cls.add_method('WriteHtolsbU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU32(uint32_t data) [member function]
+    cls.add_method('WriteHtolsbU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtolsbU64(uint64_t data) [member function]
+    cls.add_method('WriteHtolsbU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU16(uint16_t data) [member function]
+    cls.add_method('WriteHtonU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU32(uint32_t data) [member function]
+    cls.add_method('WriteHtonU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteHtonU64(uint64_t data) [member function]
+    cls.add_method('WriteHtonU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU16(uint16_t data) [member function]
+    cls.add_method('WriteU16', 
+                   'void', 
+                   [param('uint16_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU32(uint32_t data) [member function]
+    cls.add_method('WriteU32', 
+                   'void', 
+                   [param('uint32_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU64(uint64_t data) [member function]
+    cls.add_method('WriteU64', 
+                   'void', 
+                   [param('uint64_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data')])
+    ## buffer.h (module 'network'): void ns3::Buffer::Iterator::WriteU8(uint8_t data, uint32_t len) [member function]
+    cls.add_method('WriteU8', 
+                   'void', 
+                   [param('uint8_t', 'data'), param('uint32_t', 'len')])
+    return
+
+def register_Ns3ByteTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::ByteTagIterator(ns3::ByteTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::ByteTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item ns3::ByteTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::ByteTagIterator::Item::Item(ns3::ByteTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetEnd() const [member function]
+    cls.add_method('GetEnd', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::ByteTagIterator::Item::GetStart() const [member function]
+    cls.add_method('GetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::ByteTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::ByteTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ByteTagList_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList() [constructor]
+    cls.add_constructor([])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::ByteTagList(ns3::ByteTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): ns3::TagBuffer ns3::ByteTagList::Add(ns3::TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) [member function]
+    cls.add_method('Add', 
+                   'ns3::TagBuffer', 
+                   [param('ns3::TypeId', 'tid'), param('uint32_t', 'bufferSize'), param('int32_t', 'start'), param('int32_t', 'end')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::Add(ns3::ByteTagList const & o) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::ByteTagList const &', 'o')])
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::AddAtEnd(int32_t appendOffset) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [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', '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', 
+                   [param('int32_t', 'offsetStart'), param('int32_t', 'offsetEnd')], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): void ns3::ByteTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIterator_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Iterator(ns3::ByteTagList::Iterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): uint32_t ns3::ByteTagList::Iterator::GetOffsetStart() const [member function]
+    cls.add_method('GetOffsetStart', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): bool ns3::ByteTagList::Iterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item ns3::ByteTagList::Iterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::ByteTagList::Iterator::Item', 
+                   [])
+    return
+
+def register_Ns3ByteTagListIteratorItem_methods(root_module, cls):
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::ByteTagList::Iterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ByteTagList::Iterator::Item const &', 'arg0')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::Item(ns3::TagBuffer buf) [constructor]
+    cls.add_constructor([param('ns3::TagBuffer', 'buf')])
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::buf [variable]
+    cls.add_instance_attribute('buf', 'ns3::TagBuffer', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::end [variable]
+    cls.add_instance_attribute('end', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::size [variable]
+    cls.add_instance_attribute('size', 'uint32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::start [variable]
+    cls.add_instance_attribute('start', 'int32_t', is_const=False)
+    ## byte-tag-list.h (module 'network'): ns3::ByteTagList::Iterator::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3CallbackBase_methods(root_module, cls):
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::CallbackBase const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CallbackBase const &', 'arg0')])
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase() [constructor]
+    cls.add_constructor([])
+    ## callback.h (module 'core'): ns3::Ptr<ns3::CallbackImplBase> ns3::CallbackBase::GetImpl() const [member function]
+    cls.add_method('GetImpl', 
+                   'ns3::Ptr< ns3::CallbackImplBase >', 
+                   [], 
+                   is_const=True)
+    ## callback.h (module 'core'): ns3::CallbackBase::CallbackBase(ns3::Ptr<ns3::CallbackImplBase> impl) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::CallbackImplBase >', 'impl')], 
+                        visibility='protected')
+    return
+
+def register_Ns3DataRate_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('!=')
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('>=')
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(ns3::DataRate const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(uint64_t bps) [constructor]
+    cls.add_constructor([param('uint64_t', 'bps')])
+    ## data-rate.h (module 'network'): ns3::DataRate::DataRate(std::string rate) [constructor]
+    cls.add_constructor([param('std::string', 'rate')])
+    ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBitsTxTime(uint32_t bits) const [member function]
+    cls.add_method('CalculateBitsTxTime', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'bits')], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): ns3::Time ns3::DataRate::CalculateBytesTxTime(uint32_t bytes) const [member function]
+    cls.add_method('CalculateBytesTxTime', 
+                   'ns3::Time', 
+                   [param('uint32_t', 'bytes')], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): double ns3::DataRate::CalculateTxTime(uint32_t bytes) const [member function]
+    cls.add_method('CalculateTxTime', 
+                   'double', 
+                   [param('uint32_t', 'bytes')], 
+                   deprecated=True, is_const=True)
+    ## data-rate.h (module 'network'): uint64_t ns3::DataRate::GetBitRate() const [member function]
+    cls.add_method('GetBitRate', 
+                   'uint64_t', 
+                   [], 
+                   is_const=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_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_Ns3Mac48Address_methods(root_module, cls):
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('==')
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(ns3::Mac48Address const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Mac48Address const &', 'arg0')])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address() [constructor]
+    cls.add_constructor([])
+    ## mac48-address.h (module 'network'): ns3::Mac48Address::Mac48Address(char const * str) [constructor]
+    cls.add_constructor([param('char const *', 'str')])
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::Allocate() [member function]
+    cls.add_method('Allocate', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::ConvertFrom(ns3::Address const & address) [member function]
+    cls.add_method('ConvertFrom', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyFrom(uint8_t const * buffer) [member function]
+    cls.add_method('CopyFrom', 
+                   'void', 
+                   [param('uint8_t const *', 'buffer')])
+    ## mac48-address.h (module 'network'): void ns3::Mac48Address::CopyTo(uint8_t * buffer) const [member function]
+    cls.add_method('CopyTo', 
+                   'void', 
+                   [param('uint8_t *', 'buffer')], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetBroadcast() [member function]
+    cls.add_method('GetBroadcast', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv4Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv4Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast(ns3::Ipv6Address address) [member function]
+    cls.add_method('GetMulticast', 
+                   'ns3::Mac48Address', 
+                   [param('ns3::Ipv6Address', 'address')], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticast6Prefix() [member function]
+    cls.add_method('GetMulticast6Prefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): static ns3::Mac48Address ns3::Mac48Address::GetMulticastPrefix() [member function]
+    cls.add_method('GetMulticastPrefix', 
+                   'ns3::Mac48Address', 
+                   [], 
+                   is_static=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsBroadcast() const [member function]
+    cls.add_method('IsBroadcast', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): bool ns3::Mac48Address::IsGroup() const [member function]
+    cls.add_method('IsGroup', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## mac48-address.h (module 'network'): static bool ns3::Mac48Address::IsMatchingType(ns3::Address const & address) [member function]
+    cls.add_method('IsMatchingType', 
+                   'bool', 
+                   [param('ns3::Address const &', 'address')], 
+                   is_static=True)
+    return
+
+def register_Ns3NetDeviceContainer_methods(root_module, cls):
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer() [constructor]
+    cls.add_constructor([])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr<ns3::NetDevice> dev) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor]
+    cls.add_constructor([param('std::string', 'devName')])
+    ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor]
+    cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::NetDeviceContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'other')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## net-device-container.h (module 'network'): void ns3::NetDeviceContainer::Add(std::string deviceName) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('std::string', 'deviceName')])
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::NetDevice>*,std::vector<ns3::Ptr<ns3::NetDevice>, std::allocator<ns3::Ptr<ns3::NetDevice> > > > ns3::NetDeviceContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::NetDevice > const, std::vector< ns3::Ptr< ns3::NetDevice > > >', 
+                   [], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::NetDeviceContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## net-device-container.h (module 'network'): uint32_t ns3::NetDeviceContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_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_Ns3PacketMetadata_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(uint64_t uid, uint32_t size) [constructor]
+    cls.add_constructor([param('uint64_t', 'uid'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::PacketMetadata(ns3::PacketMetadata const & o) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata const &', 'o')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddAtEnd(ns3::PacketMetadata const & o) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::PacketMetadata const &', 'o')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddHeader(ns3::Header const & header, uint32_t size) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddPaddingAtEnd(uint32_t end) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::AddTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::PacketMetadata::BeginItem(ns3::Buffer buffer) const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [param('ns3::Buffer', 'buffer')], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata ns3::PacketMetadata::CreateFragment(uint32_t start, uint32_t end) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::PacketMetadata', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'end')], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Deserialize(uint8_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::Enable() [member function]
+    cls.add_method('Enable', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet-metadata.h (module 'network'): static void ns3::PacketMetadata::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): uint64_t ns3::PacketMetadata::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtEnd(uint32_t end) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'end')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveAtStart(uint32_t start) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'start')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveHeader(ns3::Header const & header, uint32_t size) [member function]
+    cls.add_method('RemoveHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): void ns3::PacketMetadata::RemoveTrailer(ns3::Trailer const & trailer, uint32_t size) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer'), param('uint32_t', 'size')])
+    ## packet-metadata.h (module 'network'): uint32_t ns3::PacketMetadata::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3PacketMetadataItem_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item() [constructor]
+    cls.add_constructor([])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::Item(ns3::PacketMetadata::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata::Item const &', 'arg0')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::current [variable]
+    cls.add_instance_attribute('current', 'ns3::Buffer::Iterator', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentSize [variable]
+    cls.add_instance_attribute('currentSize', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromEnd [variable]
+    cls.add_instance_attribute('currentTrimedFromEnd', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::currentTrimedFromStart [variable]
+    cls.add_instance_attribute('currentTrimedFromStart', 'uint32_t', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::isFragment [variable]
+    cls.add_instance_attribute('isFragment', 'bool', is_const=False)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item::tid [variable]
+    cls.add_instance_attribute('tid', 'ns3::TypeId', is_const=False)
+    return
+
+def register_Ns3PacketMetadataItemIterator_methods(root_module, cls):
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata::ItemIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketMetadata::ItemIterator const &', 'arg0')])
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::ItemIterator::ItemIterator(ns3::PacketMetadata const * metadata, ns3::Buffer buffer) [constructor]
+    cls.add_constructor([param('ns3::PacketMetadata const *', 'metadata'), param('ns3::Buffer', 'buffer')])
+    ## packet-metadata.h (module 'network'): bool ns3::PacketMetadata::ItemIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet-metadata.h (module 'network'): ns3::PacketMetadata::Item ns3::PacketMetadata::ItemIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::PacketMetadata::Item', 
+                   [])
+    return
+
+def register_Ns3PacketTagIterator_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::PacketTagIterator::PacketTagIterator(ns3::PacketTagIterator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagIterator const &', 'arg0')])
+    ## packet.h (module 'network'): bool ns3::PacketTagIterator::HasNext() const [member function]
+    cls.add_method('HasNext', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item ns3::PacketTagIterator::Next() [member function]
+    cls.add_method('Next', 
+                   'ns3::PacketTagIterator::Item', 
+                   [])
+    return
+
+def register_Ns3PacketTagIteratorItem_methods(root_module, cls):
+    ## packet.h (module 'network'): ns3::PacketTagIterator::Item::Item(ns3::PacketTagIterator::Item const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagIterator::Item const &', 'arg0')])
+    ## packet.h (module 'network'): void ns3::PacketTagIterator::Item::GetTag(ns3::Tag & tag) const [member function]
+    cls.add_method('GetTag', 
+                   'void', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::TypeId ns3::PacketTagIterator::Item::GetTypeId() const [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3PacketTagList_methods(root_module, cls):
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList() [constructor]
+    cls.add_constructor([])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::PacketTagList(ns3::PacketTagList const & o) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagList const &', 'o')])
+    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::Add(ns3::Tag const & tag) const [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData const * ns3::PacketTagList::Head() const [member function]
+    cls.add_method('Head', 
+                   'ns3::PacketTagList::TagData const *', 
+                   [], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Peek(ns3::Tag & tag) const [member function]
+    cls.add_method('Peek', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Remove(ns3::Tag & tag) [member function]
+    cls.add_method('Remove', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet-tag-list.h (module 'network'): void ns3::PacketTagList::RemoveAll() [member function]
+    cls.add_method('RemoveAll', 
+                   'void', 
+                   [])
+    ## packet-tag-list.h (module 'network'): bool ns3::PacketTagList::Replace(ns3::Tag & tag) [member function]
+    cls.add_method('Replace', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    return
+
+def register_Ns3PacketTagListTagData_methods(root_module, cls):
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData() [constructor]
+    cls.add_constructor([])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::TagData(ns3::PacketTagList::TagData const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PacketTagList::TagData const &', 'arg0')])
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::count [variable]
+    cls.add_instance_attribute('count', 'uint32_t', is_const=False)
+    ## packet-tag-list.h (module 'network'): ns3::PacketTagList::TagData::data [variable]
+    cls.add_instance_attribute('data', 'uint8_t [ 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_Ns3QueueDiscContainer_methods(root_module, cls):
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer(ns3::QueueDiscContainer const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscContainer const &', 'arg0')])
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer() [constructor]
+    cls.add_constructor([])
+    ## queue-disc-container.h (module 'traffic-control'): ns3::QueueDiscContainer::QueueDiscContainer(ns3::Ptr<ns3::QueueDisc> qDisc) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')])
+    ## queue-disc-container.h (module 'traffic-control'): void ns3::QueueDiscContainer::Add(ns3::QueueDiscContainer other) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::QueueDiscContainer', 'other')])
+    ## queue-disc-container.h (module 'traffic-control'): void ns3::QueueDiscContainer::Add(ns3::Ptr<ns3::QueueDisc> qDisc) [member function]
+    cls.add_method('Add', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::QueueDisc >', 'qDisc')])
+    ## queue-disc-container.h (module 'traffic-control'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::QueueDisc>*,std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > > ns3::QueueDiscContainer::Begin() const [member function]
+    cls.add_method('Begin', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::QueueDisc > const, std::vector< ns3::Ptr< ns3::QueueDisc > > >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): __gnu_cxx::__normal_iterator<const ns3::Ptr<ns3::QueueDisc>*,std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > > ns3::QueueDiscContainer::End() const [member function]
+    cls.add_method('End', 
+                   '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::QueueDisc > const, std::vector< ns3::Ptr< ns3::QueueDisc > > >', 
+                   [], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscContainer::Get(uint32_t i) const [member function]
+    cls.add_method('Get', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('uint32_t', 'i')], 
+                   is_const=True)
+    ## queue-disc-container.h (module 'traffic-control'): uint32_t ns3::QueueDiscContainer::GetN() const [member function]
+    cls.add_method('GetN', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3QueueDiscFactory_methods(root_module, cls):
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory::QueueDiscFactory(ns3::QueueDiscFactory const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QueueDiscFactory const &', 'arg0')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscFactory::QueueDiscFactory(ns3::ObjectFactory factory) [constructor]
+    cls.add_constructor([param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::AddInternalQueue(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddInternalQueue', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::AddPacketFilter(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::QueueDiscFactory::AddQueueDiscClass(ns3::ObjectFactory factory) [member function]
+    cls.add_method('AddQueueDiscClass', 
+                   'uint16_t', 
+                   [param('ns3::ObjectFactory', 'factory')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDisc> ns3::QueueDiscFactory::CreateQueueDisc(std::vector<ns3::Ptr<ns3::QueueDisc>, std::allocator<ns3::Ptr<ns3::QueueDisc> > > const & queueDiscs) [member function]
+    cls.add_method('CreateQueueDisc', 
+                   'ns3::Ptr< ns3::QueueDisc >', 
+                   [param('std::vector< ns3::Ptr< ns3::QueueDisc > > const &', 'queueDiscs')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::QueueDiscFactory::SetChildQueueDisc(uint16_t classId, uint16_t handle) [member function]
+    cls.add_method('SetChildQueueDisc', 
+                   'void', 
+                   [param('uint16_t', 'classId'), param('uint16_t', 'handle')])
+    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_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_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__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_Ns3TrafficControlHelper_methods(root_module, cls):
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper::TrafficControlHelper(ns3::TrafficControlHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::TrafficControlHelper const &', 'arg0')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::TrafficControlHelper::TrafficControlHelper() [constructor]
+    cls.add_constructor([])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::TrafficControlHelper::AddChildQueueDisc(uint16_t handle, uint16_t classId, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddChildQueueDisc', 
+                   'uint16_t', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'classId'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): std::vector<short unsigned int,std::allocator<short unsigned int> > ns3::TrafficControlHelper::AddChildQueueDiscs(uint16_t handle, std::vector<short unsigned int,std::allocator<short unsigned int> > const & classes, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddChildQueueDiscs', 
+                   'std::vector< short unsigned int >', 
+                   [param('uint16_t', 'handle'), param('std::vector< short unsigned int > const &', 'classes'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::AddInternalQueues(uint16_t handle, uint16_t count, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddInternalQueues', 
+                   'void', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'count'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::AddPacketFilter(uint16_t handle, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddPacketFilter', 
+                   'void', 
+                   [param('uint16_t', 'handle'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): std::vector<short unsigned int,std::allocator<short unsigned int> > ns3::TrafficControlHelper::AddQueueDiscClasses(uint16_t handle, uint16_t count, std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('AddQueueDiscClasses', 
+                   'std::vector< short unsigned int >', 
+                   [param('uint16_t', 'handle'), param('uint16_t', 'count'), param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): static ns3::TrafficControlHelper ns3::TrafficControlHelper::Default() [member function]
+    cls.add_method('Default', 
+                   'ns3::TrafficControlHelper', 
+                   [], 
+                   is_static=True)
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscContainer ns3::TrafficControlHelper::Install(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Install', 
+                   'ns3::QueueDiscContainer', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## traffic-control-helper.h (module 'traffic-control'): ns3::QueueDiscContainer ns3::TrafficControlHelper::Install(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('Install', 
+                   'ns3::QueueDiscContainer', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    ## traffic-control-helper.h (module 'traffic-control'): uint16_t ns3::TrafficControlHelper::SetRootQueueDisc(std::string type, std::string n01="", ns3::AttributeValue const & v01=ns3::EmptyAttributeValue(), std::string n02="", ns3::AttributeValue const & v02=ns3::EmptyAttributeValue(), std::string n03="", ns3::AttributeValue const & v03=ns3::EmptyAttributeValue(), std::string n04="", ns3::AttributeValue const & v04=ns3::EmptyAttributeValue(), std::string n05="", ns3::AttributeValue const & v05=ns3::EmptyAttributeValue(), std::string n06="", ns3::AttributeValue const & v06=ns3::EmptyAttributeValue(), std::string n07="", ns3::AttributeValue const & v07=ns3::EmptyAttributeValue(), std::string n08="", ns3::AttributeValue const & v08=ns3::EmptyAttributeValue(), std::string n09="", ns3::AttributeValue const & v09=ns3::EmptyAttributeValue(), std::string n10="", ns3::AttributeValue const & v10=ns3::EmptyAttributeValue(), std::string n11="", ns3::AttributeValue const & v11=ns3::EmptyAttributeValue(), std::string n12="", ns3::AttributeValue const & v12=ns3::EmptyAttributeValue(), std::string n13="", ns3::AttributeValue const & v13=ns3::EmptyAttributeValue(), std::string n14="", ns3::AttributeValue const & v14=ns3::EmptyAttributeValue(), std::string n15="", ns3::AttributeValue const & v15=ns3::EmptyAttributeValue()) [member function]
+    cls.add_method('SetRootQueueDisc', 
+                   'uint16_t', 
+                   [param('std::string', 'type'), param('std::string', 'n01', default_value='""'), param('ns3::AttributeValue const &', 'v01', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n02', default_value='""'), param('ns3::AttributeValue const &', 'v02', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n03', default_value='""'), param('ns3::AttributeValue const &', 'v03', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n04', default_value='""'), param('ns3::AttributeValue const &', 'v04', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n05', default_value='""'), param('ns3::AttributeValue const &', 'v05', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n06', default_value='""'), param('ns3::AttributeValue const &', 'v06', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n07', default_value='""'), param('ns3::AttributeValue const &', 'v07', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n08', default_value='""'), param('ns3::AttributeValue const &', 'v08', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n09', default_value='""'), param('ns3::AttributeValue const &', 'v09', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n10', default_value='""'), param('ns3::AttributeValue const &', 'v10', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n11', default_value='""'), param('ns3::AttributeValue const &', 'v11', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n12', default_value='""'), param('ns3::AttributeValue const &', 'v12', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n13', default_value='""'), param('ns3::AttributeValue const &', 'v13', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n14', default_value='""'), param('ns3::AttributeValue const &', 'v14', default_value='ns3::EmptyAttributeValue()'), param('std::string', 'n15', default_value='""'), param('ns3::AttributeValue const &', 'v15', default_value='ns3::EmptyAttributeValue()')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::Uninstall(ns3::NetDeviceContainer c) [member function]
+    cls.add_method('Uninstall', 
+                   'void', 
+                   [param('ns3::NetDeviceContainer', 'c')])
+    ## traffic-control-helper.h (module 'traffic-control'): void ns3::TrafficControlHelper::Uninstall(ns3::Ptr<ns3::NetDevice> d) [member function]
+    cls.add_method('Uninstall', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'd')])
+    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::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_Ns3Empty_methods(root_module, cls):
+    ## empty.h (module 'core'): ns3::empty::empty() [constructor]
+    cls.add_constructor([])
+    ## empty.h (module 'core'): ns3::empty::empty(ns3::empty const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::empty const &', 'arg0')])
+    return
+
+def register_Ns3Int64x64_t_methods(root_module, cls):
+    cls.add_binary_numeric_operator('*', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('+', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_numeric_operator('-', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_unary_numeric_operator('-')
+    cls.add_binary_numeric_operator('/', root_module['ns3::int64x64_t'], root_module['ns3::int64x64_t'], param('ns3::int64x64_t const &', u'right'))
+    cls.add_binary_comparison_operator('<')
+    cls.add_binary_comparison_operator('>')
+    cls.add_binary_comparison_operator('!=')
+    cls.add_inplace_numeric_operator('*=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('+=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('-=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_inplace_numeric_operator('/=', param('ns3::int64x64_t const &', u'right'))
+    cls.add_output_stream_operator()
+    cls.add_binary_comparison_operator('<=')
+    cls.add_binary_comparison_operator('==')
+    cls.add_binary_comparison_operator('>=')
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t() [constructor]
+    cls.add_constructor([])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(double v) [constructor]
+    cls.add_constructor([param('double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long double v) [constructor]
+    cls.add_constructor([param('long double', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int v) [constructor]
+    cls.add_constructor([param('int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long int v) [constructor]
+    cls.add_constructor([param('long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long int v) [constructor]
+    cls.add_constructor([param('long long int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(unsigned int v) [constructor]
+    cls.add_constructor([param('unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long unsigned int v) [constructor]
+    cls.add_constructor([param('long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(long long unsigned int v) [constructor]
+    cls.add_constructor([param('long long unsigned int', 'v')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(int64_t hi, uint64_t lo) [constructor]
+    cls.add_constructor([param('int64_t', 'hi'), param('uint64_t', 'lo')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::int64x64_t(ns3::int64x64_t const & o) [copy constructor]
+    cls.add_constructor([param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): double ns3::int64x64_t::GetDouble() const [member function]
+    cls.add_method('GetDouble', 
+                   'double', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): int64_t ns3::int64x64_t::GetHigh() const [member function]
+    cls.add_method('GetHigh', 
+                   'int64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): uint64_t ns3::int64x64_t::GetLow() const [member function]
+    cls.add_method('GetLow', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## int64x64-double.h (module 'core'): static ns3::int64x64_t ns3::int64x64_t::Invert(uint64_t v) [member function]
+    cls.add_method('Invert', 
+                   'ns3::int64x64_t', 
+                   [param('uint64_t', 'v')], 
+                   is_static=True)
+    ## int64x64-double.h (module 'core'): void ns3::int64x64_t::MulByInvert(ns3::int64x64_t const & o) [member function]
+    cls.add_method('MulByInvert', 
+                   'void', 
+                   [param('ns3::int64x64_t const &', 'o')])
+    ## int64x64-double.h (module 'core'): ns3::int64x64_t::implementation [variable]
+    cls.add_static_attribute('implementation', 'ns3::int64x64_t::impl_type const', is_const=True)
+    return
+
+def register_Ns3Chunk_methods(root_module, cls):
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk() [constructor]
+    cls.add_constructor([])
+    ## chunk.h (module 'network'): ns3::Chunk::Chunk(ns3::Chunk const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Chunk const &', 'arg0')])
+    ## chunk.h (module 'network'): uint32_t ns3::Chunk::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## chunk.h (module 'network'): static ns3::TypeId ns3::Chunk::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## chunk.h (module 'network'): void ns3::Chunk::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3Header_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## header.h (module 'network'): ns3::Header::Header() [constructor]
+    cls.add_constructor([])
+    ## header.h (module 'network'): ns3::Header::Header(ns3::Header const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Header const &', 'arg0')])
+    ## header.h (module 'network'): uint32_t ns3::Header::Deserialize(ns3::Buffer::Iterator start) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_virtual=True)
+    ## header.h (module 'network'): uint32_t ns3::Header::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## header.h (module 'network'): static ns3::TypeId ns3::Header::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## header.h (module 'network'): void ns3::Header::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    ## header.h (module 'network'): void ns3::Header::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_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_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', 
+                   '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_Ns3RedQueueDisc_methods(root_module, cls):
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::RedQueueDisc(ns3::RedQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RedQueueDisc const &', 'arg0')])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::RedQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## red-queue-disc.h (module 'traffic-control'): int64_t ns3::RedQueueDisc::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## red-queue-disc.h (module 'traffic-control'): double ns3::RedQueueDisc::GetAredAlpha() [member function]
+    cls.add_method('GetAredAlpha', 
+                   'double', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): double ns3::RedQueueDisc::GetAredBeta() [member function]
+    cls.add_method('GetAredBeta', 
+                   'double', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::RedQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): uint32_t ns3::RedQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats ns3::RedQueueDisc::GetStats() [member function]
+    cls.add_method('GetStats', 
+                   'ns3::RedQueueDisc::Stats', 
+                   [])
+    ## red-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::RedQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetAredAlpha(double alpha) [member function]
+    cls.add_method('SetAredAlpha', 
+                   'void', 
+                   [param('double', 'alpha')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetAredBeta(double beta) [member function]
+    cls.add_method('SetAredBeta', 
+                   'void', 
+                   [param('double', 'beta')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetQueueLimit(uint32_t lim) [member function]
+    cls.add_method('SetQueueLimit', 
+                   'void', 
+                   [param('uint32_t', 'lim')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::SetTh(double minTh, double maxTh) [member function]
+    cls.add_method('SetTh', 
+                   'void', 
+                   [param('double', 'minTh'), param('double', 'maxTh')])
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::DoDispose() [member function]
+    cls.add_method('DoDispose', 
+                   'void', 
+                   [], 
+                   visibility='protected', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): bool ns3::RedQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::RedQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): bool ns3::RedQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::RedQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## red-queue-disc.h (module 'traffic-control'): void ns3::RedQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    return
+
+def register_Ns3RedQueueDiscStats_methods(root_module, cls):
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::Stats() [constructor]
+    cls.add_constructor([])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::Stats(ns3::RedQueueDisc::Stats const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::RedQueueDisc::Stats const &', 'arg0')])
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::forcedDrop [variable]
+    cls.add_instance_attribute('forcedDrop', 'uint32_t', is_const=False)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::qLimDrop [variable]
+    cls.add_instance_attribute('qLimDrop', 'uint32_t', is_const=False)
+    ## red-queue-disc.h (module 'traffic-control'): ns3::RedQueueDisc::Stats::unforcedDrop [variable]
+    cls.add_instance_attribute('unforcedDrop', 'uint32_t', is_const=False)
+    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__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::SimpleRefCount(ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter< ns3::NixVector > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount() [constructor]
+    cls.add_constructor([])
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::SimpleRefCount(ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter< ns3::Packet > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >::Cleanup() [member function]
+    cls.add_method('Cleanup', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    return
+
+def register_Ns3SimpleRefCount__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([])
+    ## 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_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_Ns3TracedValue__Ns3Time_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue(ns3::TracedValue<ns3::Time> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< ns3::Time > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<ns3::Time>::TracedValue(ns3::Time const & v) [constructor]
+    cls.add_constructor([param('ns3::Time const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::Time>::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::Time>::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::Time>::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::Time>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): ns3::Time ns3::TracedValue<ns3::Time>::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::Time', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<ns3::Time>::Set(ns3::Time const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [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<const ns3::Packet> p, uint16_t protocol, ns3::Address const & from, ns3::Address const & to, ns3::NetDevice::PacketType packetType) [member function]
+    cls.add_method('Receive', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'p'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'from'), param('ns3::Address const &', 'to'), param('ns3::NetDevice::PacketType', 'packetType')], 
+                   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)
+    ## trailer.h (module 'network'): void ns3::Trailer::Serialize(ns3::Buffer::Iterator start) const [member function]
+    cls.add_method('Serialize', 
+                   'void', 
+                   [param('ns3::Buffer::Iterator', 'start')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
+    return
+
+def register_Ns3TriangularRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::TriangularRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   '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_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_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([])
+    ## 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_Ns3CoDelQueueDisc_methods(root_module, cls):
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc::CoDelQueueDisc(ns3::CoDelQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::CoDelQueueDisc const &', 'arg0')])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::CoDelQueueDisc::CoDelQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropCount() [member function]
+    cls.add_method('GetDropCount', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropNext() [member function]
+    cls.add_method('GetDropNext', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetDropOverLimit() [member function]
+    cls.add_method('GetDropOverLimit', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Time ns3::CoDelQueueDisc::GetInterval() [member function]
+    cls.add_method('GetInterval', 
+                   'ns3::Time', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Queue::QueueMode ns3::CoDelQueueDisc::GetMode() [member function]
+    cls.add_method('GetMode', 
+                   'ns3::Queue::QueueMode', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): uint32_t ns3::CoDelQueueDisc::GetQueueSize() [member function]
+    cls.add_method('GetQueueSize', 
+                   'uint32_t', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Time ns3::CoDelQueueDisc::GetTarget() [member function]
+    cls.add_method('GetTarget', 
+                   'ns3::Time', 
+                   [])
+    ## codel-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::CoDelQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## codel-queue-disc.h (module 'traffic-control'): void ns3::CoDelQueueDisc::SetMode(ns3::Queue::QueueMode mode) [member function]
+    cls.add_method('SetMode', 
+                   'void', 
+                   [param('ns3::Queue::QueueMode', 'mode')])
+    ## codel-queue-disc.h (module 'traffic-control'): bool ns3::CoDelQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::CoDelQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): bool ns3::CoDelQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::CoDelQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## codel-queue-disc.h (module 'traffic-control'): void ns3::CoDelQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   'void', 
+                   [], 
+                   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', 
+                   '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_Ns3DataRateChecker_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateChecker::DataRateChecker(ns3::DataRateChecker const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateChecker const &', 'arg0')])
+    return
+
+def register_Ns3DataRateValue_methods(root_module, cls):
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue() [constructor]
+    cls.add_constructor([])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRateValue const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::DataRateValue const &', 'arg0')])
+    ## data-rate.h (module 'network'): ns3::DataRateValue::DataRateValue(ns3::DataRate const & value) [constructor]
+    cls.add_constructor([param('ns3::DataRate const &', 'value')])
+    ## data-rate.h (module 'network'): ns3::Ptr<ns3::AttributeValue> ns3::DataRateValue::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::AttributeValue >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## data-rate.h (module 'network'): bool ns3::DataRateValue::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)
+    ## data-rate.h (module 'network'): ns3::DataRate ns3::DataRateValue::Get() const [member function]
+    cls.add_method('Get', 
+                   'ns3::DataRate', 
+                   [], 
+                   is_const=True)
+    ## data-rate.h (module 'network'): std::string ns3::DataRateValue::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)
+    ## data-rate.h (module 'network'): void ns3::DataRateValue::Set(ns3::DataRate const & value) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('ns3::DataRate const &', 'value')])
+    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_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([])
+    ## 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_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', 
+                   '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_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([])
+    ## 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_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([])
+    ## 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_Ns3NixVector_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector() [constructor]
+    cls.add_constructor([])
+    ## nix-vector.h (module 'network'): ns3::NixVector::NixVector(ns3::NixVector const & o) [copy constructor]
+    cls.add_constructor([param('ns3::NixVector const &', 'o')])
+    ## nix-vector.h (module 'network'): void ns3::NixVector::AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits) [member function]
+    cls.add_method('AddNeighborIndex', 
+                   'void', 
+                   [param('uint32_t', 'newBits'), param('uint32_t', 'numberOfBits')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::BitCount(uint32_t numberOfNeighbors) const [member function]
+    cls.add_method('BitCount', 
+                   'uint32_t', 
+                   [param('uint32_t', 'numberOfNeighbors')], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::NixVector::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Deserialize(uint32_t const * buffer, uint32_t size) [member function]
+    cls.add_method('Deserialize', 
+                   'uint32_t', 
+                   [param('uint32_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::ExtractNeighborIndex(uint32_t numberOfBits) [member function]
+    cls.add_method('ExtractNeighborIndex', 
+                   'uint32_t', 
+                   [param('uint32_t', 'numberOfBits')])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetRemainingBits() [member function]
+    cls.add_method('GetRemainingBits', 
+                   'uint32_t', 
+                   [])
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## nix-vector.h (module 'network'): uint32_t ns3::NixVector::Serialize(uint32_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint32_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    return
+
+def register_Ns3Node_methods(root_module, cls):
+    ## node.h (module 'network'): ns3::Node::Node(ns3::Node const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::Node const &', 'arg0')])
+    ## node.h (module 'network'): ns3::Node::Node() [constructor]
+    cls.add_constructor([])
+    ## node.h (module 'network'): ns3::Node::Node(uint32_t systemId) [constructor]
+    cls.add_constructor([param('uint32_t', 'systemId')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddApplication(ns3::Ptr<ns3::Application> application) [member function]
+    cls.add_method('AddApplication', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::Application >', 'application')])
+    ## node.h (module 'network'): uint32_t ns3::Node::AddDevice(ns3::Ptr<ns3::NetDevice> device) [member function]
+    cls.add_method('AddDevice', 
+                   'uint32_t', 
+                   [param('ns3::Ptr< ns3::NetDevice >', 'device')])
+    ## node.h (module 'network'): static bool ns3::Node::ChecksumEnabled() [member function]
+    cls.add_method('ChecksumEnabled', 
+                   'bool', 
+                   [], 
+                   is_static=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::Application> ns3::Node::GetApplication(uint32_t index) const [member function]
+    cls.add_method('GetApplication', 
+                   'ns3::Ptr< ns3::Application >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): ns3::Ptr<ns3::NetDevice> ns3::Node::GetDevice(uint32_t index) const [member function]
+    cls.add_method('GetDevice', 
+                   'ns3::Ptr< ns3::NetDevice >', 
+                   [param('uint32_t', 'index')], 
+                   is_const=True)
+    ## node.h (module 'network'): uint32_t ns3::Node::GetId() const [member function]
+    cls.add_method('GetId', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## node.h (module 'network'): 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_Ns3Packet_methods(root_module, cls):
+    cls.add_output_stream_operator()
+    ## packet.h (module 'network'): ns3::Packet::Packet() [constructor]
+    cls.add_constructor([])
+    ## packet.h (module 'network'): ns3::Packet::Packet(ns3::Packet const & o) [copy constructor]
+    cls.add_constructor([param('ns3::Packet const &', 'o')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint32_t size) [constructor]
+    cls.add_constructor([param('uint32_t', 'size')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size, bool magic) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size'), param('bool', 'magic')])
+    ## packet.h (module 'network'): ns3::Packet::Packet(uint8_t const * buffer, uint32_t size) [constructor]
+    cls.add_constructor([param('uint8_t const *', 'buffer'), param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddAtEnd(ns3::Ptr<const ns3::Packet> packet) [member function]
+    cls.add_method('AddAtEnd', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet')])
+    ## packet.h (module 'network'): void ns3::Packet::AddByteTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddByteTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddHeader(ns3::Header const & header) [member function]
+    cls.add_method('AddHeader', 
+                   'void', 
+                   [param('ns3::Header const &', 'header')])
+    ## packet.h (module 'network'): void ns3::Packet::AddPacketTag(ns3::Tag const & tag) const [member function]
+    cls.add_method('AddPacketTag', 
+                   'void', 
+                   [param('ns3::Tag const &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::AddPaddingAtEnd(uint32_t size) [member function]
+    cls.add_method('AddPaddingAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::AddTrailer(ns3::Trailer const & trailer) [member function]
+    cls.add_method('AddTrailer', 
+                   'void', 
+                   [param('ns3::Trailer const &', 'trailer')])
+    ## packet.h (module 'network'): ns3::PacketMetadata::ItemIterator ns3::Packet::BeginItem() const [member function]
+    cls.add_method('BeginItem', 
+                   'ns3::PacketMetadata::ItemIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::Copy() const [member function]
+    cls.add_method('Copy', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::CopyData(uint8_t * buffer, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::CopyData(std::ostream * os, uint32_t size) const [member function]
+    cls.add_method('CopyData', 
+                   'void', 
+                   [param('std::ostream *', 'os'), param('uint32_t', 'size')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::Packet> ns3::Packet::CreateFragment(uint32_t start, uint32_t length) const [member function]
+    cls.add_method('CreateFragment', 
+                   'ns3::Ptr< ns3::Packet >', 
+                   [param('uint32_t', 'start'), param('uint32_t', 'length')], 
+                   is_const=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnableChecking() [member function]
+    cls.add_method('EnableChecking', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): static void ns3::Packet::EnablePrinting() [member function]
+    cls.add_method('EnablePrinting', 
+                   'void', 
+                   [], 
+                   is_static=True)
+    ## packet.h (module 'network'): bool ns3::Packet::FindFirstMatchingByteTag(ns3::Tag & tag) const [member function]
+    cls.add_method('FindFirstMatchingByteTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::ByteTagIterator ns3::Packet::GetByteTagIterator() const [member function]
+    cls.add_method('GetByteTagIterator', 
+                   'ns3::ByteTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::Ptr<ns3::NixVector> ns3::Packet::GetNixVector() const [member function]
+    cls.add_method('GetNixVector', 
+                   'ns3::Ptr< ns3::NixVector >', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): ns3::PacketTagIterator ns3::Packet::GetPacketTagIterator() const [member function]
+    cls.add_method('GetPacketTagIterator', 
+                   'ns3::PacketTagIterator', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSerializedSize() const [member function]
+    cls.add_method('GetSerializedSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::GetSize() const [member function]
+    cls.add_method('GetSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint64_t ns3::Packet::GetUid() const [member function]
+    cls.add_method('GetUid', 
+                   'uint64_t', 
+                   [], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekHeader(ns3::Header & header) const [member function]
+    cls.add_method('PeekHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')], 
+                   is_const=True)
+    ## packet.h (module 'network'): bool ns3::Packet::PeekPacketTag(ns3::Tag & tag) const [member function]
+    cls.add_method('PeekPacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')], 
+                   is_const=True)
+    ## packet.h (module 'network'): uint32_t ns3::Packet::PeekTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('PeekTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): void ns3::Packet::Print(std::ostream & os) const [member function]
+    cls.add_method('Print', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintByteTags(std::ostream & os) const [member function]
+    cls.add_method('PrintByteTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::PrintPacketTags(std::ostream & os) const [member function]
+    cls.add_method('PrintPacketTags', 
+                   'void', 
+                   [param('std::ostream &', 'os')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllByteTags() [member function]
+    cls.add_method('RemoveAllByteTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAllPacketTags() [member function]
+    cls.add_method('RemoveAllPacketTags', 
+                   'void', 
+                   [])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtEnd(uint32_t size) [member function]
+    cls.add_method('RemoveAtEnd', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): void ns3::Packet::RemoveAtStart(uint32_t size) [member function]
+    cls.add_method('RemoveAtStart', 
+                   'void', 
+                   [param('uint32_t', 'size')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveHeader(ns3::Header & header) [member function]
+    cls.add_method('RemoveHeader', 
+                   'uint32_t', 
+                   [param('ns3::Header &', 'header')])
+    ## packet.h (module 'network'): bool ns3::Packet::RemovePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('RemovePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::RemoveTrailer(ns3::Trailer & trailer) [member function]
+    cls.add_method('RemoveTrailer', 
+                   'uint32_t', 
+                   [param('ns3::Trailer &', 'trailer')])
+    ## packet.h (module 'network'): bool ns3::Packet::ReplacePacketTag(ns3::Tag & tag) [member function]
+    cls.add_method('ReplacePacketTag', 
+                   'bool', 
+                   [param('ns3::Tag &', 'tag')])
+    ## packet.h (module 'network'): uint32_t ns3::Packet::Serialize(uint8_t * buffer, uint32_t maxSize) const [member function]
+    cls.add_method('Serialize', 
+                   'uint32_t', 
+                   [param('uint8_t *', 'buffer'), param('uint32_t', 'maxSize')], 
+                   is_const=True)
+    ## packet.h (module 'network'): void ns3::Packet::SetNixVector(ns3::Ptr<ns3::NixVector> nixVector) [member function]
+    cls.add_method('SetNixVector', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::NixVector >', 'nixVector')])
+    ## packet.h (module 'network'): std::string ns3::Packet::ToString() const [member function]
+    cls.add_method('ToString', 
+                   'std::string', 
+                   [], 
+                   is_const=True)
+    return
+
+def register_Ns3ParetoRandomVariable_methods(root_module, cls):
+    ## random-variable-stream.h (module 'core'): static ns3::TypeId ns3::ParetoRandomVariable::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   '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_Ns3PfifoFastQueueDisc_methods(root_module, cls):
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc::PfifoFastQueueDisc(ns3::PfifoFastQueueDisc const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::PfifoFastQueueDisc const &', 'arg0')])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::PfifoFastQueueDisc::PfifoFastQueueDisc() [constructor]
+    cls.add_constructor([])
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): static ns3::TypeId ns3::PfifoFastQueueDisc::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): bool ns3::PfifoFastQueueDisc::CheckConfig() [member function]
+    cls.add_method('CheckConfig', 
+                   'bool', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::Ptr<ns3::QueueDiscItem> ns3::PfifoFastQueueDisc::DoDequeue() [member function]
+    cls.add_method('DoDequeue', 
+                   'ns3::Ptr< ns3::QueueDiscItem >', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): bool ns3::PfifoFastQueueDisc::DoEnqueue(ns3::Ptr<ns3::QueueDiscItem> item) [member function]
+    cls.add_method('DoEnqueue', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::QueueDiscItem >', 'item')], 
+                   visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): ns3::Ptr<const ns3::QueueDiscItem> ns3::PfifoFastQueueDisc::DoPeek() const [member function]
+    cls.add_method('DoPeek', 
+                   'ns3::Ptr< ns3::QueueDiscItem const >', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## pfifo-fast-queue-disc.h (module 'traffic-control'): void ns3::PfifoFastQueueDisc::InitializeParams() [member function]
+    cls.add_method('InitializeParams', 
+                   '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_Ns3StringChecker_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringChecker::StringChecker() [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')])
+    return
+
+def register_Ns3StringValue_methods(root_module, cls):
+    ## string.h (module 'core'): ns3::StringValue::StringValue() [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 >', 
+                   [], 
+                   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', 
+                   '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', 
+                   'void', 
+                   [param('std::string const &', 'value')])
+    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_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([])
+    ## 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_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')])
+    ## 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)
+    register_functions_ns3_internal(module.get_submodule('internal'), 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 register_functions_ns3_internal(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/traffic-control/doc/classful-queue-disc.dia ns-3.25/src/traffic-control/doc/classful-queue-disc.dia
--- ns-3.24.1/src/traffic-control/doc/classful-queue-disc.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/classful-queue-disc.dia	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,10 @@
+     [s)4ڙ<)04dI>z(٥IE<m("AolpHpx(;\۸X$yv6B8$o'ϒ; ?-ܳeY^wzzwwGETIOitNO
+fQW,M*>NydT]ny1ҳᇋ՜ճhO8\5cjEE"+eR,?~<vh**ImM^iZhx&/77\گ_s:/"Jm<O([Z-x;ibV/.̟9(]Ҟ;/VdV^t{6Y$4uIVvV}7o~;z?}ekXֈe,_M2425]N0˗6`]H	ӃgM5'ei~7r)$Aׯ֦X
+Οarĉ`[AL&Bц31暘Ǚ|vНOJLzG.d~Y6APxPa8csQO ,P3wDc%Vl[֗)GeDۈY?E2ge'OGC, MV냋*ILl1,{T(2ˏ-No2F3j:f!\3\WjGXe;KP3r!9Uیhe'}ĨE)B>E#IB;cP Z k!(&0Nx13˓ox0Kw.F[8sŉG0+4{[_-$V%_hG,cG˄I;_`||_m2kA oBF`<~_9CáX/Fazgh0I^D54ګ	ƽ{ Hͯ   F	,QKj	XK&2DQ{uu`uh׀0C,fj0@צCX)0q{71Ka8j>s.m`W,*f]I\d{$'.Y"[ŝeKՑ289][gmՎWW8°Qlذ54GE5[=z/CiS5,0ͳ4v\b̫rPo}M;>ϲ>h	u)+(nsq8`F;uY(*n.}$Q{5Eb7}t"P?lDL5ĶQ֤O%)FfXqO5ipg-F`ϔ#|[Qyׅཪ
+Nf@YhA|
+اE+aBhRt\FWd׺M2 AQZqEeóRs61U
+Et1KO9>Fi&$2$틺muJdxuTSM_W*Nx)֖RAoA::4J3Ne>W%PFWc|T0RTN<dqm{,eVn2{lAQ$,Tvw tA 2pcnA.{uc3(NZ04i$;$
+vuBQmS&¤A2ɟqΨuJ3nhh}%mZs83-{]ov'NnrOUPcͪx`sBƢ⛴W7rGۜ#C@Jf{2]  d  {mi@0)怾@f uk cA&fsݢv0YMZ 	 {w wdʺAz[ iȁȑ"9e֙D
+43b9h}ߣQvԃ٭{jHJ1Fl-8˚\&w#7I1Id !%2B{ld2^t)@	^4E%4ź݄hب$eE5Q"Bt"*>.TQtwbUT (E#*JQ̸О5e;5E+#`d}阋C8cCi1IN借)@(a݆mec?8B񛷻(MkRǟ{b{evNgfuVb
+:>0+DvFt W]e{C{:?;*
+[:YitOOo^DWO5PP  
\ No newline at end of file
diff -Naur ns-3.24.1/src/traffic-control/doc/codel.rst ns-3.25/src/traffic-control/doc/codel.rst
--- ns-3.24.1/src/traffic-control/doc/codel.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/codel.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,150 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+CoDel queue disc
+----------------
+
+This chapter describes the CoDel ([Nic12]_, [Nic14]_) queue disc 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.
+
+Note that, starting from ns-3.25, CoDel is no longer a queue variant and
+cannot be installed as a NetDevice queue. Instead, CoDel is a queue disc
+and must be installed in the context of the traffic control (see the
+examples mentioned below).
+
+
+Model Description
+*****************
+
+The source code for the CoDel model is located in the directory ``src/traffic-control/model``
+and consists of 2 files `codel-queue-disc.h` and `codel-queue-disc.cc` defining a CoDelQueueDisc
+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:`CoDelQueueDisc`: This class implements the main CoDel algorithm:
+
+  * ``CoDelQueueDisc::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`.
+
+  * ``CoDelQueueDisc::ShouldDrop ()``: This routine is ``CoDelQueueDisc::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``. 
+
+  * ``CoDelQueueDisc::DoDequeue ()``: This routine performs the actual packet drop based on ``CoDelQueueDisc::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 ``CoDelQueueDisc::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 ``CoDelQueueDisc::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 ``CoDelQueueDisc::ShouldDrop ()`` routine; 
+    2. ``CoDelQueueDisc::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 ``CoDelQueueDisc::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). 
+
+The CoDel queue disc does not require packet filters, does not admit
+child queue discs and uses a single internal queue. If not provided by
+the user, a DropTail queue operating in the same mode (packet or byte)
+as the queue disc and having a size equal to the CoDel MaxPackets or
+MaxBytes attribute (depending on the mode) is created. If the user
+provides an internal queue, such a queue must operate in the same mode
+as the queue disc and have a size not less than the CoDel MaxPackets or
+MaxBytes attribute (depending on the mode).
+
+
+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-pfifo-basic-test.cc` located in ``src/traffic-control/examples``.  To run the file (the first invocation below shows the available
+command-line options):
+
+:: 
+
+   $ ./waf --run "codel-vs-pfifo-basic-test --PrintHelp"
+   $ ./waf --run "codel-vs-pfifo-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-pfifo-asymmetric.cc` located in ``src/traffic-control/examples``.  This example is intended to model a typical cable modem
+deployment scenario.  To run the file:
+
+::
+
+   $ ./waf --run "codel-vs-pfifo-asymmetric --PrintHelp"
+   $ ./waf --run codel-vs-pfifo-asymmetric
+
+The expected output from the previous commands is six pcap files:
+
+* codel-vs-pfifo-asymmetric-CoDel-server-lan.pcap
+* codel-vs-pfifo-asymmetric-CoDel-router-wan.pcap
+* codel-vs-pfifo-asymmetric-CoDel-router-lan.pcap
+* codel-vs-pfifo-asymmetric-CoDel-cmts-wan.pcap
+* codel-vs-pfifo-asymmetric-CoDel-cmts-lan.pcap
+* codel-vs-pfifo-asymmetric-CoDel-host-lan.pcap
+
+One attribute file:
+
+* codel-vs-pfifo-asymmetric-CoDel.attr 
+
+Five ASCII trace files:
+
+* codel-vs-pfifo-asymmetric-CoDel-drop.tr
+* codel-vs-pfifo-asymmetric-CoDel-drop-state.tr
+* codel-vs-pfifo-asymmetric-CoDel-sojourn.tr
+* codel-vs-pfifo-asymmetric-CoDel-length.tr
+* codel-vs-pfifo-asymmetric-CoDel-cwnd.tr 
+
+Validation
+**********
+
+The CoDel model is tested using :cpp:class:`CoDelQueueDiscTestSuite` class defined in `src/traffic-control/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-disc
+
+or  
+
+::
+
+  $ NS_LOG="CoDelQueueDisc" ./waf --run "test-runner --suite=codel-queue-disc"
+
diff -Naur ns-3.24.1/src/traffic-control/doc/multi-queue-aware-queue-disc.dia ns-3.25/src/traffic-control/doc/multi-queue-aware-queue-disc.dia
--- ns-3.24.1/src/traffic-control/doc/multi-queue-aware-queue-disc.dia	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/multi-queue-aware-queue-disc.dia	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,13 @@
+     [o6)O.nRl(۽>8ڣX$'}ϾCIM"&v(F!}{yͮ~/I2^ou'ILgU(|~~F<*#Ǘ4B^oITDݨ(dXĽYt_G4g~U.7,=EUmy/j.SC4Gy}ia9U?f<"Vz2u9M?.~cY׮m4RG4mہ{V7"M)!6XqEts#RrCy&GYѬZv(&ϭ^&E(@v;͓wDC-ɤvU8)'4uɬntJ^޲5T5ac0}L&@3[/P]]],w썩ڀui"^⼮%{\+N/=FEi<mk@Lwk?pv=d60$=V&f9ͦijÚ2hDT癋f;J#l&GdzW4#I. \j5ee$}"`B$癛e7;">C4#x˟3AP6hLӝ(ѵr1<MƽYghe )w]}w'\i4{*Lu_).q*_V;\puۭjaJ=='s:wnGZى&l_.u>Hkhad	H%4h$R)ZwҒWg;dCX	8&HɄ	{ggx$?(ɨpN.4#l 2\/m/ c!p !C9wI;_D5
+:_şd#`
+_u^ fL@7p0 , F<h`wHZK^L{5SwT+ , !#&2Jb	%H bv0/.^Ձֽ_\#40ٚaD+SI5' 0z@7cX`GYv3]]_ (Xtſ%qK2wLuE04!+eC
+a`Hf-,ϔQM9.:kvLQ$lRI'Px>um[.6LmI Mn<Ϟ=sQMϦ)ښ8#-4<|--ӻV"+W}18sZqA]ʊn++v
+\eR!BlHL4J%6eBKRW}ܥUb1W@^]eC)Bԫ!"E~,Q"2i!K;on$E@QQ 1Vb6T$1|CbW!S$eڃƀ%;1ЯT\jL;5	YWa˂Ad-A_>u`'p/@&Iei& ,%q9ϘXKXJ6HU$9ײAD_qvj~pIȦrOzDKjFá'#j#&{ʔ kըJPRǷʠR;:b^$C%v8.`p$LmI*d#Ys4N<fqm0<]NV6OPH6Iƻa|1;źp0@,@!!UX% |B.b`WJQQ汼'#+[CZ,rk$s1=)~mt#XsuD;j^XG~(WPm״DZQtc7%
+m DVah'^vmەe$!*`Ll`EMZhi16v@#"ՁtW xXZ!d  {k/a/.@BkVd<dFa_ 2	ZǁdXFHDcN~X3	fX/6SO=|Gͽq2=~kΧ"( Wb1vi;En79(P]no h`[hk?|W&]i
+<*8ՔrybUj
+ԛlyDvz&dD")`veP,7Uِ G;հ0$*Y˔aX[v(ȁp
+h˫A[>6ڢ\h߹;WCܮv_ɖ3x[Ζp0C!|MS
+oq*:۫XZ+i)WXwvrՁ
+:M`an}Yu-,ؖF^b[
+zj~6b@-R[}XJnQ$M/j` W כ+L<
+GpuE~yt}4 D  
\ No newline at end of file
diff -Naur ns-3.24.1/src/traffic-control/doc/pfifo-fast.rst ns-3.25/src/traffic-control/doc/pfifo-fast.rst
--- ns-3.24.1/src/traffic-control/doc/pfifo-fast.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/pfifo-fast.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,58 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+pfifo_fast queue disc
+---------------------
+
+Model Description
+*****************
+
+Linux pfifo_fast is the default priority queue enabled on Linux
+systems. Packets are enqueued in three FIFO droptail queues according
+to three priority bands based on the classification returned by
+the configured packet filters.
+
+The system behaves similar to three ns3::DropTail queues operating
+together, in which packets from higher priority bands are always
+dequeued before a packet from a lower priority band is dequeued.
+
+The queue disc capacity, i.e., the maximum number of packets that can
+be enqueued in the queue disc, is set through the limit attribute, which
+plays the same role as txqueuelen in Linux. If no internal queue is
+provided, three DropTail queues having each a capacity equal to limit are
+created by default. User is allowed to provide queues, but they must be
+three, operate in packet mode and each have a capacity not less
+than limit.
+
+It is necessary to provide at least one packet filter. To simulate the
+Linux behavior, the PfifoFastIpv4PacketFilter and/or the PfifoFastIpv6PacketFilter
+shall be provided. These filters classify packets based on their Type of
+Service bits or DSCP bits. If the filters are unable to classify a packet,
+i.e., they return -1 (PF_NO_MATCH), that packet is enqueued into band 1
+(normal service).
+
+
+
+Attributes
+==========
+
+The PfifoFastQueueDisc class holds a single attribute:
+
+* ``Limit:`` The maximum number of packets accepted by the queue disc. The default value is 1000.
+
+Examples
+========
+
+The traffic-control example located in ``examples/traffic-control`` shows how to configure
+and install a pfifo_fast queue on Ipv4 nodes.
+
+Validation
+**********
+
+The pfifo_fast model is tested using :cpp:class:`PfifoFastQueueDiscTestSuite` class defined
+in ``src/traffic-control/test/pfifo-fast-queue-disc-test-suite.cc``. The suite includes 4 test cases:
+
+* Test 1: The first test checks whether IPv4 packets are enqueued in the correct band based on the TOS byte
+* Test 2: The second test checks whether IPv4 packets are enqueued in the correct band based on the TOS byte
+* Test 3: The third test checks that the queue disc cannot enqueue more packets than its limit
+* Test 4: The fourth test checks that packets that the filters have not been able to classify are enqueued into the default band of 1
diff -Naur ns-3.24.1/src/traffic-control/doc/queue-discs.rst ns-3.25/src/traffic-control/doc/queue-discs.rst
--- ns-3.24.1/src/traffic-control/doc/queue-discs.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/queue-discs.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,241 @@
+Queue disciplines
+--------------------------------------------------------------
+
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+Model Description
+*****************
+
+Packets received by the Traffic Control layer for transmission to a netdevice
+can be passed to a Queue Discipline to perform scheduling and policing.
+A netdevice can have a single (root) queue disc installed on it.
+Installing a queue disc on a netdevice is not mandatory. If a netdevice does
+not have a queue disc installed on it, the traffic control layer sends the packets
+directly to the netdevice. This is the case, for instance, of the loopback netdevice.
+
+As in Linux, a queue disc may contain distinct elements:
+
+* queues, which actually store the packets waiting for transmission
+* classes, which allow to reserve a different treatment to different packets
+* filters, which determine the queue or class which a packet is destined to
+
+Notice that a child queue disc must be attached to every class and a packet
+filter is only able to classify packets of a single protocol. Also, while in Linux
+some queue discs (e.g., fq-codel) use an internal classifier and do not make use of
+packet filters, in ns-3 every queue disc including multiple queues or multiple classes
+needs an external filter to classify packets (this is to avoid having the traffic-control
+module depend on other modules such as internet).
+
+Queue disc configuration vary from queue disc to queue disc. A typical taxonomy divides
+queue discs in classful (i.e., support classes) and classless (i.e., do not support
+classes). More recently, after the appearance of multi-queue devices (such as Wi-Fi),
+some multi-queue aware queue discs have been introduced. Multi-queue aware queue discs
+handle as many queues (or queue discs -- without using classes) as the number of
+transmission queues used by the device on which the queue disc is installed.
+An attempt is made, also, to enqueue each packet in the "same" queue both within the
+queue disc and within the device.
+
+The traffic control layer interacts with a queue disc in a simple manner: after requesting
+to enqueue a packet, the traffic control layer requests the qdisc to "run", i.e., to
+dequeue a set of packets, until a predefined number ("quota") of packets is dequeued
+or the netdevice stops the queue disc. A netdevice may stop the queue disc when its
+transmission queue(s) is/are (almost) full. Also, a netdevice may wake the
+queue disc when its transmission queue(s) is/are (almost) empty. Waking a queue disc
+is equivalent to make it run.
+
+Design
+==========
+
+An abstract base class, class QueueDisc, is subclassed to implement a specific
+queue disc. A subclass is required to implement the following methods:
+
+* ``bool DoEnqueue (Ptr<QueueDiscItem> item)``:  Enqueue a packet
+* ``Ptr<QueueDiscItem> DoDequeue (void)``:  Dequeue a packet
+* ``Ptr<const QueueDiscItem> DoPeek (void) const``: Peek a packet
+* ``bool CheckConfig (void) const``: Check if the configuration is correct
+* ``void InitializeParams (void)``: Initialize queue disc parameters
+
+The base class QueueDisc implements:
+
+* methods to add/get a single queue, class or filter and methods to get the number \
+  of installed queues, classes or filters
+* a ``Classify`` method which classifies a packet by processing the list of filters \
+  until a filter able to classify the packet is found
+* methods to extract multiple packets from the queue disc, while handling transmission \
+  (to the device) failures by requeuing packets
+
+The base class QueueDisc provides many trace sources:
+
+* ``Enqueue``
+* ``Dequeue``
+* ``Requeue``
+* ``Drop``
+* ``PacketsInQueue``
+* ``BytesInQueue``
+
+The base class QueueDisc holds the list of attached queues, classes and filter
+by means of three vectors accessible through attributes (InternalQueueList,
+QueueDiscClassList and PacketFilterList).
+
+Internal queues are implemented as (subclasses of) Queue objects. A Queue stores
+QueueItem objects, which consist of just a Ptr<Packet>. Since a queue disc has to
+store at least the destination address and the protocol number for each enqueued
+packet, a new class, QueueDiscItem, is derived from QueueItem to store such
+additional information for each packet. Thus, internal queues are implemented as
+Queue objects storing QueueDiscItem objects. Also, there could be the need to store
+further information depending on the network layer protocol of the packet. For
+instance, for IPv4 and IPv6 packets it is needed to separately store the header
+and the payload, so that header fields can be manipulated, e.g., to support ECN.
+To this end, Ipv4QueueDiscItem and Ipv6QueueDiscItem are derived from QueueDiscItem
+to additionally store the packet header and provide protocol specific operations
+such as ECN marking.
+
+Classes are implemented via the QueueDiscClass class, which just consists of a pointer
+to the attached queue disc. Such a pointer is accessible through the QueueDisc attribute.
+Classful queue discs needing to set parameters for their classes can subclass
+QueueDiscClass and add the required parameters as attributes.
+
+An abstract base class, PacketFilter, is subclassed to implement specific filters.
+Subclasses are required to implement two virtual private pure methods:
+
+* ``bool CheckProtocol (Ptr<QueueDiscItem> item) const``: check whether the filter \
+  is able to classify packets of the same protocol as the given packet
+* ``int32_t DoClassify (Ptr<QueueDiscItem> item) const``: actually classify the packet
+
+PacketFilter provides a public method, ``Classify``, which first calls ``CheckProtocol``
+to check that the protocol of the packet matches the protocol of the filter and then
+calls ``DoClassify``. Specific filters subclassed from PacketFilter should not be
+placed in the traffic-control module but in the module corresponding to the protocol
+of the classified packets.
+
+
+Usage
+*****
+
+By default, the InternetStackHelper aggregates a TrafficControlLayer object to every
+node. When invoked to assign an IPv{4,6} address to a device, the Ipv{4,6}AddressHelper,
+besides creating a Ipv{4,6}Interface, also installs the default qdisc, PfifoFastQueueDisc,
+on the device, unless a queue disc has been already installed. Thus, devices get the default
+queue disc installed even if they are added to the node after the Internet stack has been
+installed on the node.
+
+To install a queue disc other than the default one, it is necessary to install such queue
+disc before an IP address is assigned to the device. Alternatively, the default queue disc
+can be removed from the device after assigning an IP address, by using the convenient
+Uninstall method of the TrafficControlHelper class, and then installing a different
+queue disc on the device. Clearly, it is also possible to have no queue disc installed on a device.
+
+Helpers
+=======
+
+A typical usage pattern is to create a traffic control helper and to configure type
+and attributes of queue discs, queues, classes and filters from the helper, For example,
+the default pfifo_fast can be configured as follows:
+
+.. sourcecode:: cpp
+
+  TrafficControlHelper tch;
+  uint16_t handle = tch.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tch.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+  tch.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+  QueueDiscContainer qdiscs = tch.Install (devices);
+
+The above code adds three internal queues and a packet filter to the root queue disc of type PfifoFast.
+With the above configuration, the config path of the root queue disc installed on the j-th
+device of the i-th node (the index of a device is the same as in DeviceList) is:
+
+/NodeList/[i]/$ns3::TrafficControlLayer/RootQueueDiscList/[j]
+
+and the config path of the second internal queue is:
+
+/NodeList/[i]/$ns3::TrafficControlLayer/RootQueueDiscList/[j]/InternalQueueList/1
+
+Implementation details
+**********************
+
+In Linux, the struct netdev_queue is used to store information about a single 
+transmission queue of a device: status (i.e., whether it has been stopped or not),
+data used by techniques such as Byte Queue Limits and a qdisc pointer field that
+is mainly used to solve the following problems:
+
+* if a device transmission queue is (almost) empty, identify the queue disc to wake
+* if a packet will be enqueued in a given device transmission queue, identify the \
+  queue disc which the packet must be enqueued into
+
+The latter problem arises because Linux attempts to determine the device transmission
+queue which a packet will be enqueued into before passing the packet to a queue disc.
+This is done by calling a specific function of the device driver, if implemented, or
+by employing fallback mechanisms (such as hashing of the addresses) otherwise. The
+identifier of the selected device transmission queue is stored in the queue_mapping \
+field of the struct sk_buff, so that both the queue disc and the device driver can
+get the same information. In ns-3, such identifier is stored in a member of the
+QueueDiscItem class.
+
+The NetDeviceQueue class in ns-3 is the equivalent of the Linux struct netdev_queue.
+The qdisc field of the Linux struct netdev_queue, however, cannot be
+similarly stored in a NetDeviceQueue object, because it would make the network module
+depend on the traffic-control module. Instead, this information is stored in the
+TrafficControlLayer object aggregated to each node. In particular, a TrafficControlLayer
+object holds a map which stores, for each NetDevice, a vector of Ptr<QueueDisc>.
+The size of such a vector is the number of device transmission queues and each
+element of this vector is a pointer to the queue disc to activate when the above
+problems occur. The traffic control layer takes care of configuring such a map
+at initialization time, based on the "wake mode" of the root queue disc. If the
+wake mode of the root queue disc is WAKE_ROOT, then all the elements of the vector
+are pointers to the root queue disc. If the wake mode of the root queue disc is
+WAKE_CHILD, then each element of the vector is a pointer to a distinct child queue
+disc. This requires that the number of child queue discs matches the number of
+netdevice queues. It follows that the wake mode of a classless queue disc must
+necessarily be WAKE_ROOT. These two configurations are illustrated by the figures below.
+
+:ref:`fig-classful-queue-disc` below shows how the TrafficControlLayer map looks like in
+case of a classful root queue disc whose wake mode is WAKE_ROOT.
+
+.. _fig-classful-queue-disc:
+
+.. figure:: figures/classful-queue-disc.*
+
+    Setup of a queue disc (wake mode: WAKE_ROOT)
+
+:ref:`fig-multi-queue-aware-queue-disc` below shows instead how the TrafficControlLayer
+map looks like in case of a classful root queue disc whose wake mode is WAKE_CHILD.
+
+.. _fig-multi-queue-aware-queue-disc:
+
+.. figure:: figures/multi-queue-aware-queue-disc.*
+
+    Setup of a multi-queue aware queue disc
+
+Besides the map described above, a TrafficControlLayer object also stores a vector
+of Ptr<QueueDisc> representing the root queue discs installed on all the devices of
+the node. This vector has as many elements as the number of devices. In this vector,
+devices are sorted as in Node::m_devices. This vector is accessible through the
+RootQueueDiscList attribute.
+
+A NetDeviceQueueInterface object is used by the traffic control layer to access the
+information stored in the NetDeviceQueue objects, retrieve the number of transmission
+queues of the device and get the transmission queue selected for the transmission of a
+given packet. A NetDeviceQueueInterface object must be therefore aggregated to all the
+devices having an interface supporting the traffic control layer (i.e., an IPv4 or IPv6
+interface). In particular:
+
+* a NetDeviceQueueInterface object is aggregated to all the devices as soon as an IPv4/v6 \
+  interface is added to the device. This is because Ipv{4,6}AddressHelper::Assign calls \
+  Ipv{4,6}L3Protocol::AddInterface, which calls TrafficControlLayer::SetupDevice, which \
+  creates the queue interface and aggregates it to device.
+
+* at initialization time, devices supporting flow control can cache the pointer to the \
+  netdevice queue interface created by the traffic contol layer into a member variable. \
+  Also, multi-queue devices can set the number of device transmission queues and set the \
+  select queue callback through the netdevice queue interface
+
+* at initialization time, the traffic control (after calling device->Initialize () to ensure \
+  that the netdevice has set the number of device transmission queues, if it has to do so) \
+  completes the installation of the queue discs by setting the wake callbacks on the device \
+  transmission queues (through the netdevice queue interface). Also, the traffic control \
+  sets a flag in the device queue interface if a queue disc is present on that device and \
+  calls the Initialize method of the queue disc.
diff -Naur ns-3.24.1/src/traffic-control/doc/red.rst ns-3.25/src/traffic-control/doc/red.rst
--- ns-3.24.1/src/traffic-control/doc/red.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/red.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,126 @@
+.. include:: replace.txt
+.. highlight:: cpp
+
+RED queue disc
+---------------------
+
+Model Description
+*****************
+
+Random Early Detection (RED) is a queue discipline that aims to provide
+early signals to transport protocol congestion control (e.g. TCP) that
+congestion is imminent, so that they back off their rate gracefully
+rather than with a bunch of tail-drop losses (possibly incurring
+TCP timeout).  The model in ns-3 is a port of Sally Floyd's ns-2
+RED model.
+
+Note that, starting from ns-3.25, RED is no longer a queue variant and
+cannot be installed as a NetDevice queue. Instead, RED is a queue disc
+and must be installed in the context of the traffic control (see the
+examples mentioned below).
+
+The RED queue disc does not require packet filters, does not admit
+child queue discs and uses a single internal queue. If not provided by
+the user, a DropTail queue operating in the same mode (packet or byte)
+as the queue disc and having a size equal to the RED QueueLimit attribute
+is created. If the user provides an internal queue, such a queue must
+operate in the same mode as the queue disc and have a size not less than
+the RED QueueLimit attribute.
+
+Adaptive Random Early Detection (ARED)
+======================================
+ARED is a variant of RED with two main features: (i) automatically sets Queue
+weight, MinTh and MaxTh and (ii) adapts maximum drop probability. The model
+in ns-3 contains implementation of both the features, and is a port of Sally
+Floyd's ns-2 ARED model. Note that the user is allowed to choose and explicitly
+configure the simulation by selecting feature (i) or feature (ii), or both.
+ 
+
+References
+==========
+
+The RED queue aims to be close to the results cited in:
+S.Floyd, K.Fall http://icir.org/floyd/papers/redsims.ps
+
+ARED queue implementation is based on the algorithm provided in:
+S. Floyd et al, http://www.icir.org/floyd/papers/adaptiveRed.pdf
+
+Attributes
+==========
+
+The RED queue contains a number of attributes that control the RED
+policies:
+
+* Mode (bytes or packets)
+* MeanPktSize
+* IdlePktSize
+* Wait (time)
+* Gentle mode
+* MinTh, MaxTh
+* QueueLimit
+* Queue weight
+* LInterm
+* LinkBandwidth
+* LinkDelay
+
+In addition to RED attributes, ARED queue requires following attributes:
+
+* ARED (Boolean attribute. Default: false)
+* AdaptMaxP (Boolean attribute to adapt m_curMaxP. Default: false)
+* Target Delay (time)
+* Interval (time)
+* LastSet (time)
+* Top (upper limit of m_curMaxP)
+* Bottom (lower limit of m_curMaxP)
+* Alpha (increment parameter for m_curMaxP)
+* Beta (decrement parameter for m_curMaxP)
+* RTT
+
+Consult the ns-3 documentation for explanation of these attributes.
+
+Simulating ARED
+===============
+
+To switch on ARED algorithm, the attribute ARED must be set to true,
+as done in ``src/traffic-control/examples/adaptive-red-tests.cc``:
+
+.. sourcecode:: cpp
+
+  Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+
+Setting ARED to true implicitly configures both: (i) automatic setting
+of Queue weight, MinTh and MaxTh and (ii) adapting m_curMaxP.
+
+NOTE: To explicitly configure (i) or (ii), set ARED attribute to false
+and follow the procedure described next:
+
+To configure (i); Queue weight, MinTh and MaxTh, all must be set to 0,
+as done in ``src/traffic-control/examples/adaptive-red-tests.cc``:
+
+.. sourcecode:: cpp
+
+  Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (0.0));
+  Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (0));
+  Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (0));
+
+To configure (ii); AdaptMaxP must be set to true, as done in
+``src/traffic-control/examples/adaptive-red-tests.cc``:
+
+.. sourcecode:: cpp
+
+  Config::SetDefault ("ns3::RedQueueDisc::AdaptMaxP", BooleanValue (true));
+
+Examples
+========
+
+The RED queue example is found at ``src/traffic-control/examples/red-tests.cc``.
+
+ARED queue examples can be found at:
+``src/traffic-control/examples/adaptive-red-tests.cc`` and 
+``src/traffic-control/examples/red-vs-ared.cc``
+
+Validation
+**********
+
+The RED model has been validated and the report is currently stored
+at: https://github.com/downloads/talau/ns-3-tcp-red/report-red-ns3.pdf 
diff -Naur ns-3.24.1/src/traffic-control/doc/traffic-control-layer.rst ns-3.25/src/traffic-control/doc/traffic-control-layer.rst
--- ns-3.24.1/src/traffic-control/doc/traffic-control-layer.rst	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/doc/traffic-control-layer.rst	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,127 @@
+Traffic Control Layer
+---------------------
+
+.. heading hierarchy:
+   ------------- Chapter
+   ************* Section (#.#)
+   ============= Subsection (#.#.#)
+   ############# Paragraph (no number)
+
+The Traffic Control layer aims at introducing an equivalent of the Linux Traffic
+Control infrastructure into ns-3. The Traffic Control layer sits in between
+the NetDevices (L2) and any network protocol (e.g. IP). It is in charge of processing
+packets and performing actions on them: scheduling, dropping, marking, policing, etc.
+
+
+Introducing the Traffic Control Layer
+*************************************
+
+The Traffic Control layer intercepts both outgoing packets flowing downwards from
+the network layer to the network device and incoming packets flowing in the opposite
+direction. Currently, only outgoing packets are processed by the Traffic Control layer.
+In particular, outgoing packets are enqueued in a queuing discipline, which can perform
+multiple actions on them.
+
+In the following, more details are given about how the Traffic Control layer intercepts
+outgoing and incoming packets and, more in general, about how the packets traverse the
+network stack.
+
+Transmitting packets
+====================
+
+The IPv{4,6} interfaces uses the aggregated object TrafficControlLayer to send
+down packets, instead of calling NetDevice::Send() directly. After the analysis
+and the process of the packet, when the backpressure mechanism allows it,
+TrafficControlLayer will call the Send() method on the right NetDevice.
+
+Receiving packets
+=================
+
+The callback chain that (in the past) involved IPv{4,6}L3Protocol and NetDevices,
+through ReceiveCallback, is extended to involve TrafficControlLayer. When an
+IPv{4,6}Interface is added in the IPv{4,6}L3Protocol, the callback chain is
+configured to have the following packet exchange:
+
+NetDevice --> Node --> TrafficControlLayer --> IPv{4,6}L3Protocol
+
+Brief description of old node/device/protocol interactions
+**************************************************************
+
+The main question that we would like to answer in the following paragraphs is:
+how a ns-3 node can send/receive packets?
+
+If we analyze any example out there, the ability of the node to receive/transmit
+packets derives from the interaction of two helper:
+
+* L2 Helper (something derived from NetDevice)
+* L3 Helper (usually from Internet module)
+
+L2 Helper main operations
+=========================
+
+Any good L2 Helper will do the following operations:
+
+* Create n netdevices (n>1)
+* Attach a channel between these devices
+* Call Node::AddDevice ()
+
+Obviously the last point is the most important.
+
+Node::AddDevice (network/model/node.cc:128) assigns an interface index to the
+device, calls NetDevice::SetNode, sets the receive callback of the device to
+Node::NonPromiscReceiveFromDevice. Then, it schedules NetDevice::Initialize() method at
+Seconds(0.0), then notify the registered DeviceAdditionListener handlers (not used BY ANYONE).
+
+Node::NonPromiscReceiveFromDevice calls Node::ReceiveFromDevice.
+
+Node::ReceiveFromDevice iterates through ProtocolHandlers, which are callbacks
+which accept as signature:
+
+ProtocolHandler (Ptr<NetDevice>, Ptr<const Packet>, protocol, from_addr, to_addr, packetType).
+
+If device, protocol number and promiscuous flag corresponds, the handler is
+invoked.
+
+Who is responsible to set ProtocolHandler ? We will analyze that in the next
+section.
+
+L3 Helper
+=========
+
+We have only internet which provides network protocol (IP). That module splits
+the operations between two helpers: InternetStackHelper and Ipv{4,6}AddressHelper.
+
+InternetStackHelper::Install (internet/helper/internet-stack-helper.cc:423)
+creates and aggregates protocols {ArpL3,Ipv4L3,Icmpv4}Protocol. It creates the
+routing protocol, and if Ipv6 is enabled it adds {Ipv6L3,Icmpv6L4}Protocol. In
+any case, it instantiates and aggregates an UdpL4Protocol object, along with a
+PacketSocketFactory.
+Ultimately, it creates the required objects and aggregates them to the node.
+
+Let's assume an Ipv4 environment (things are the same for Ipv6).
+
+Ipv4AddressHelper::Assign (src/internet/helper/ipv4-address-helper.cc:131)
+registers the handlers. The process is a bit long. The method is called with
+a list of NetDevice. For each of them, the node and Ipv4L3Protocol pointers are
+retrieved; if an Ipv4Interface is already registered for the device, on that the
+address is set. Otherwise, the method Ipv4L3Protocol::AddInterface is called,
+before adding the address.
+
+IP interfaces
+=============
+
+In Ipv4L3Protocol::AddInterface (src/internet/model/ipv4-l3-protocol.cc:300)
+two protocol handlers are installed: one that react to ipv4 protocol number,
+and one that react to arp protocol number (Ipv4L3Protocol::Receive and
+ArpL3Protocol::Receive, respectively). The interface is then created,
+initialized, and returned.
+
+Ipv4L3Protocol::Receive (src/internet/model/ipv4-l3-protocol.cc:472) iterates
+through the interface. Once it finds the Ipv4Interface which has the same device
+as the one passed as argument, invokes the rxTrace callback. If the interface is
+down, the packet is dropped. Then, it removes the header and trim any residual
+frame padding. If checksum is not OK, it drops the packet. Otherwise, forward
+the packet to the raw sockets (not used). Then, it ask the routing protocol what
+is the destiny of that packet. The choices are: Ipv4L3Protocol::{IpForward,
+IpMulticastForward,LocalDeliver,RouteInputError}.
+
diff -Naur ns-3.24.1/src/traffic-control/examples/adaptive-red-tests.cc ns-3.25/src/traffic-control/examples/adaptive-red-tests.cc
--- ns-3.24.1/src/traffic-control/examples/adaptive-red-tests.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/adaptive-red-tests.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,703 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 NITK Surathkal
+ *
+ * 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: Mohit P. Tahiliani <tahiliani@nitk.edu.in>
+ *
+ */
+
+/**
+ * NOTE: These validation tests are same as provided in ns-2 
+ * (ns/tcl/test/test-suite-adaptive-red.tcl)
+ *
+ * In this code, tests 1, 2, 6, 7, 8, 9, 10, 12, 13, 14 and 15 refer to tests
+ * named red1, red1Adapt, fastlink, fastlinkAutowq, fastlinkAutothresh,
+ * fastlinkAdaptive, fastlinkAllAdapt, fastlinkAllAdapt1, longlink,
+ * longlinkAdapt and longlinkAdapt1, respectively in the ns-2 file
+ * mentioned above.
+ */
+
+/** Network topology for tests: 1 and 2
+ *
+ *    10Mb/s, 2ms                            10Mb/s, 4ms
+ * n0--------------|                    |---------------n4
+ *                 |    1.5Mbps, 20ms   |
+ *                 n2------------------n3
+ *    10Mb/s, 3ms  |  QueueLimit = 25   |    10Mb/s, 5ms
+ * n1--------------|                    |---------------n5
+ *
+ */
+
+/** Network topology for tests: 6, 7, 8, 9, 10 and 12
+ *
+ *    100Mb/s, 2ms                          100Mb/s, 4ms
+ * n0--------------|                    |---------------n4
+ *                 |    15Mbps, 20ms    |
+ *                 n2------------------n3
+ *    100Mb/s, 3ms |  QueueLimit = 1000 |   100Mb/s, 5ms
+ * n1--------------|                    |---------------n5
+ *
+ */
+
+/** Network topology for tests: 13, 14 and 15
+*
+*    10Mb/s, 0ms                            10Mb/s, 2ms
+* n0--------------|                    |---------------n4
+*                 |    1.5Mbps, 100ms  |
+*                 n2------------------n3
+*    10Mb/s, 1ms  |  QueueLimit = 100  |    10Mb/s, 3ms
+* n1--------------|                    |---------------n5
+*
+*/
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/flow-monitor-helper.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/traffic-control-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("AdaptiveRedTests");
+
+uint32_t checkTimes;
+double avgQueueDiscSize;
+
+// The times
+double global_start_time;
+double global_stop_time;
+double sink_start_time;
+double sink_stop_time;
+double client_start_time;
+double client_stop_time;
+
+NodeContainer n0n2;
+NodeContainer n1n2;
+NodeContainer n2n3;
+NodeContainer n3n4;
+NodeContainer n3n5;
+
+Ipv4InterfaceContainer i0i2;
+Ipv4InterfaceContainer i1i2;
+Ipv4InterfaceContainer i2i3;
+Ipv4InterfaceContainer i3i4;
+Ipv4InterfaceContainer i3i5;
+
+std::stringstream filePlotQueueDisc;
+std::stringstream filePlotQueueDiscAvg;
+
+void
+CheckQueueDiscSize (Ptr<QueueDisc> queue)
+{
+  uint32_t qSize = StaticCast<RedQueueDisc> (queue)->GetQueueSize ();
+
+  avgQueueDiscSize += qSize;
+  checkTimes++;
+
+  // check queue disc size every 1/100 of a second
+  Simulator::Schedule (Seconds (0.01), &CheckQueueDiscSize, queue);
+
+  std::ofstream fPlotQueueDisc (filePlotQueueDisc.str ().c_str (), std::ios::out | std::ios::app);
+  fPlotQueueDisc << Simulator::Now ().GetSeconds () << " " << qSize << std::endl;
+  fPlotQueueDisc.close ();
+
+  std::ofstream fPlotQueueDiscAvg (filePlotQueueDiscAvg.str ().c_str (), std::ios::out | std::ios::app);
+  fPlotQueueDiscAvg << Simulator::Now ().GetSeconds () << " " << avgQueueDiscSize / checkTimes << std::endl;
+  fPlotQueueDiscAvg.close ();
+}
+
+void
+BuildAppsTest (uint32_t test)
+{
+  // SINK is in the right side
+  uint16_t port = 50000;
+  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
+  ApplicationContainer sinkApp = sinkHelper.Install (n3n4.Get (1));
+  sinkApp.Start (Seconds (sink_start_time));
+  sinkApp.Stop (Seconds (sink_stop_time));
+
+  // Connection one
+  // Clients are in left side
+  /*
+   * Create the OnOff applications to send TCP to the server
+   * onoffhelper is a client that send data to TCP destination
+  */
+  OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
+  clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  clientHelper1.SetAttribute ("PacketSize", UintegerValue (1000));
+
+  // Connection two
+  OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
+  clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+  clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+  clientHelper2.SetAttribute ("PacketSize", UintegerValue (1000));
+
+  if (test == 6 || test == 7 || test == 8 || test == 9 || test == 10 || test == 12)
+    {
+      clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mb/s")));
+      clientHelper2.SetAttribute ("DataRate", DataRateValue (DataRate ("100Mb/s")));
+    }
+  else
+    {
+      clientHelper1.SetAttribute ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper2.SetAttribute ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+    }
+
+  ApplicationContainer clientApps1;
+  AddressValue remoteAddress (InetSocketAddress (i3i4.GetAddress (1), port));
+  clientHelper1.SetAttribute ("Remote", remoteAddress);
+  clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
+  clientApps1.Start (Seconds (client_start_time));
+  clientApps1.Stop (Seconds (client_stop_time));
+
+  ApplicationContainer clientApps2;
+  clientHelper2.SetAttribute ("Remote", remoteAddress);
+  clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
+  clientApps2.Start (Seconds (client_start_time));
+  clientApps2.Stop (Seconds (client_stop_time));
+}
+
+int
+main (int argc, char *argv[])
+{
+  LogComponentEnable ("RedQueueDisc", LOG_LEVEL_INFO);
+
+  uint32_t aredTest;
+  std::string aredLinkDataRate = "1.5Mbps";
+  std::string aredLinkDelay = "20ms";
+
+  std::string pathOut;
+  bool writeForPlot = false;
+  bool writePcap = false;
+  bool flowMonitor = false;
+
+  bool printAredStats = true;
+
+  global_start_time = 0.0;
+  sink_start_time = global_start_time;
+  client_start_time = global_start_time + 1.5;
+  global_stop_time = 7.0;
+  sink_stop_time = global_stop_time + 3.0;
+  client_stop_time = global_stop_time - 2.0;
+
+  // Configuration and command line parameter parsing
+  aredTest = 1;
+  // Will only save in the directory if enable opts below
+  pathOut = "."; // Current directory
+  CommandLine cmd;
+  cmd.AddValue ("testNumber", "Run test 1, 2, 6, 7, 8, 9, 10, 12, 13, 14 or 15", aredTest);
+  cmd.AddValue ("pathOut", "Path to save results from --writeForPlot/--writePcap/--writeFlowMonitor", pathOut);
+  cmd.AddValue ("writeForPlot", "<0/1> to write results for plot (gnuplot)", writeForPlot);
+  cmd.AddValue ("writePcap", "<0/1> to write results in pcapfile", writePcap);
+  cmd.AddValue ("writeFlowMonitor", "<0/1> to enable Flow Monitor and write their results", flowMonitor);
+
+  cmd.Parse (argc, argv);
+  if ( (aredTest != 1) && (aredTest != 2) && (aredTest != 6) && (aredTest != 7) && (aredTest != 8) && (aredTest != 9) && (aredTest != 10) && (aredTest != 12) && (aredTest != 13) && (aredTest != 14) && (aredTest != 15) )
+    {
+      std::cout << "Invalid test number. Supported tests are 1, 2, 6, 7, 8, 9, 10, 12, 13, 14 or 15" << std::endl;
+      exit (1);
+    }
+
+  NS_LOG_INFO ("Create nodes");
+  NodeContainer c;
+  c.Create (6);
+  Names::Add ( "N0", c.Get (0));
+  Names::Add ( "N1", c.Get (1));
+  Names::Add ( "N2", c.Get (2));
+  Names::Add ( "N3", c.Get (3));
+  Names::Add ( "N4", c.Get (4));
+  Names::Add ( "N5", c.Get (5));
+  n0n2 = NodeContainer (c.Get (0), c.Get (2));
+  n1n2 = NodeContainer (c.Get (1), c.Get (2));
+  n2n3 = NodeContainer (c.Get (2), c.Get (3));
+  n3n4 = NodeContainer (c.Get (3), c.Get (4));
+  n3n5 = NodeContainer (c.Get (3), c.Get (5));
+
+  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
+  // 42 = headers size
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000 - 42));
+  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
+  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (false));
+
+  uint32_t meanPktSize = 1000;
+
+  // RED params
+  NS_LOG_INFO ("Set RED params");
+  Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::RedQueueDisc::MeanPktSize", UintegerValue (meanPktSize));
+  Config::SetDefault ("ns3::RedQueueDisc::Wait", BooleanValue (true));
+  Config::SetDefault ("ns3::RedQueueDisc::Gentle", BooleanValue (true));
+  Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (0.002));
+  Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (5));
+  Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (15));
+  Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (1000));
+
+  if (aredTest == 1) // test 1: red1
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (25));
+    }
+  else if (aredTest == 2) // test 2: red1Adapt
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (25));
+    }
+  else if (aredTest == 7) // test 7: fastlinkAutowq
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (0.0));
+    }
+  else if (aredTest == 8) // test 8: fastlinkAutothresh
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (0));
+      Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (0));
+    }
+  else if (aredTest == 9) // test 9: fastlinkAdaptive
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::AdaptMaxP", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+    }
+  else if (aredTest == 10) // test 10: fastlinkAllAdapt
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+    }
+  else if (aredTest == 12) // test 12: fastlinkAllAdapt1
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+      Config::SetDefault ("ns3::RedQueueDisc::TargetDelay", TimeValue (Seconds (0.2)));
+    }
+  else if (aredTest == 13) // test 13: longlink
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (100));
+    }
+  else if (aredTest == 14) // test 14: longlinkAdapt
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (100));
+    }
+  else if (aredTest == 15) // test 15: longlinkAdapt1
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (-1.0));
+      Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (0));
+      Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (0));
+      Config::SetDefault ("ns3::RedQueueDisc::AdaptMaxP", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (100));
+    }
+
+  NS_LOG_INFO ("Install internet stack on all nodes.");
+  InternetStackHelper internet;
+  internet.Install (c);
+
+  TrafficControlHelper tchPfifo;
+  uint16_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+
+  TrafficControlHelper tchRed;
+  tchRed.SetRootQueueDisc ("ns3::RedQueueDisc", "LinkBandwidth", StringValue (aredLinkDataRate),
+                           "LinkDelay", StringValue (aredLinkDelay));
+
+  NS_LOG_INFO ("Create channels");
+  PointToPointHelper p2p;
+
+  NetDeviceContainer devn0n2;
+  NetDeviceContainer devn1n2;
+  NetDeviceContainer devn2n3;
+  NetDeviceContainer devn3n4;
+  NetDeviceContainer devn3n5;
+
+  QueueDiscContainer queueDiscs;
+
+  if (aredTest == 1 || aredTest == 2)
+    {
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
+      devn0n2 = p2p.Install (n0n2);
+      tchPfifo.Install (devn0n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
+      devn1n2 = p2p.Install (n1n2);
+      tchPfifo.Install (devn1n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue (aredLinkDataRate));
+      p2p.SetChannelAttribute ("Delay", StringValue (aredLinkDelay));
+      devn2n3 = p2p.Install (n2n3);
+      // only backbone link has ARED queue disc
+      queueDiscs = tchRed.Install (devn2n3);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("4ms"));
+      devn3n4 = p2p.Install (n3n4);
+      tchPfifo.Install (devn3n4);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("5ms"));
+      devn3n5 = p2p.Install (n3n5);
+      tchPfifo.Install (devn3n5);
+    }
+  else if (aredTest == 13 || aredTest == 14 || aredTest == 15)
+    {
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("0ms"));
+      devn0n2 = p2p.Install (n0n2);
+      tchPfifo.Install (devn0n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("1ms"));
+      devn1n2 = p2p.Install (n1n2);
+      tchPfifo.Install (devn1n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue (aredLinkDataRate));
+      p2p.SetChannelAttribute ("Delay", StringValue ("100ms"));
+      devn2n3 = p2p.Install (n2n3);
+      // only backbone link has ARED queue disc
+      queueDiscs = tchRed.Install (devn2n3);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
+      devn3n4 = p2p.Install (n3n4);
+      tchPfifo.Install (devn3n4);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
+      devn3n5 = p2p.Install (n3n5);
+      tchPfifo.Install (devn3n5);
+    }
+  else if (aredTest == 6 || aredTest == 7 || aredTest == 8 || aredTest == 9 || aredTest == 10 || aredTest == 12)
+    {
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
+      devn0n2 = p2p.Install (n0n2);
+      tchPfifo.Install (devn0n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
+      devn1n2 = p2p.Install (n1n2);
+      tchPfifo.Install (devn1n2);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("15Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue (aredLinkDelay));
+      devn2n3 = p2p.Install (n2n3);
+      // only backbone link has ARED queue disc
+      queueDiscs = tchRed.Install (devn2n3);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("4ms"));
+      devn3n4 = p2p.Install (n3n4);
+      tchPfifo.Install (devn3n4);
+
+      p2p.SetQueue ("ns3::DropTailQueue");
+      p2p.SetDeviceAttribute ("DataRate", StringValue ("100Mbps"));
+      p2p.SetChannelAttribute ("Delay", StringValue ("5ms"));
+      devn3n5 = p2p.Install (n3n5);
+      tchPfifo.Install (devn3n5);
+    }
+
+  NS_LOG_INFO ("Assign IP Addresses");
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  i0i2 = ipv4.Assign (devn0n2);
+
+  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
+  i1i2 = ipv4.Assign (devn1n2);
+
+  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
+  i2i3 = ipv4.Assign (devn2n3);
+
+  ipv4.SetBase ("10.1.4.0", "255.255.255.0");
+  i3i4 = ipv4.Assign (devn3n4);
+
+  ipv4.SetBase ("10.1.5.0", "255.255.255.0");
+  i3i5 = ipv4.Assign (devn3n5);
+
+  // Set up the routing
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  BuildAppsTest (aredTest);
+
+  if (writePcap)
+    {
+      PointToPointHelper ptp;
+      std::stringstream stmp;
+      stmp << pathOut << "/ared";
+      ptp.EnablePcapAll (stmp.str ().c_str ());
+    }
+
+  Ptr<FlowMonitor> flowmon;
+  if (flowMonitor)
+    {
+      FlowMonitorHelper flowmonHelper;
+      flowmon = flowmonHelper.InstallAll ();
+    }
+
+  if (writeForPlot)
+    {
+      filePlotQueueDisc << pathOut << "/" << "ared-queue-disc.plotme";
+      filePlotQueueDiscAvg << pathOut << "/" << "ared-queue-disc_avg.plotme";
+
+      remove (filePlotQueueDisc.str ().c_str ());
+      remove (filePlotQueueDiscAvg.str ().c_str ());
+      Ptr<QueueDisc> queue = queueDiscs.Get (0);
+      Simulator::ScheduleNow (&CheckQueueDiscSize, queue);
+    }
+
+  Simulator::Stop (Seconds (sink_stop_time));
+  Simulator::Run ();
+
+  RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queueDiscs.Get (0))->GetStats ();
+
+  if (aredTest == 1)
+    {
+      if (st.unforcedDrop > 2)
+        {
+          std::cout << "Drops due to prob mark should be around 1" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 137 || st.forcedDrop > 139)
+        {
+          std::cout << "Drops due to hard mark not in expected range, should be around 138" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop < 137 || st.qLimDrop > 139)
+        {
+          std::cout << "Drops due to queue full not in expected range, should be around 138" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 2)
+    {
+      if (st.unforcedDrop < 6 || st.unforcedDrop > 17)
+        {
+          std::cout << "Drops due to prob mark not in expected range, should be around 14" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 122 || st.forcedDrop > 133)
+        {
+          std::cout << "Drops due to hard mark not in expected range, should be around 126" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop < 122 || st.qLimDrop > 133)
+        {
+          std::cout << "Drops due to queue full not in expected range, should be around 126" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 6)
+    {
+      if (st.unforcedDrop < 32 || st.unforcedDrop > 56)
+        {
+          std::cout << "Drops due to prob mark not in expected range, should be around 48" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 185 || st.forcedDrop > 202)
+        {
+          std::cout << "Drops due to hard mark not in expected range, should be around 201" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 7)
+    {
+      if (st.unforcedDrop < 76 || st.unforcedDrop > 119)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 110" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 133 || st.forcedDrop > 138)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 137" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 8)
+    {
+      if (st.unforcedDrop < 32 || st.unforcedDrop > 56)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 48" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 185 || st.forcedDrop > 202)
+        {
+          std::cout << "Drops due to hard mark not in expected range, should be around 201" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 9)
+    {
+      if (st.unforcedDrop < 38 || st.unforcedDrop > 69)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 61" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 178 || st.forcedDrop > 191)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 187" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 10)
+    {
+      if (st.unforcedDrop < 82 || st.unforcedDrop > 185)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 89" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 129 || st.forcedDrop > 133)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 129" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 12)
+    {
+      if (st.unforcedDrop < 162 || st.unforcedDrop > 204)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 181" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop > 43)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 12" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 13)
+    {
+      if (st.unforcedDrop < 30 || st.unforcedDrop > 49)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 36" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 240 || st.forcedDrop > 259)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 253" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop < 12 || st.qLimDrop > 31)
+        {
+          std::cout << "Number of drops due to queue full is not in expected range, should be around 25" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 14)
+    {
+      if (st.unforcedDrop < 83 || st.unforcedDrop > 90)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 88" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 127 || st.forcedDrop > 132)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 129" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+  else if (aredTest == 15)
+    {
+      if (st.unforcedDrop < 83 || st.unforcedDrop > 90)
+        {
+          std::cout << "Number of drops due to prob mark is not in expected range, should be around 88" << std::endl;
+          exit (-1);
+        }
+      else if (st.forcedDrop < 127 || st.forcedDrop > 132)
+        {
+          std::cout << "Number of drops due to hard mark is not in expected range, should be around 129" << std::endl;
+          exit (-1);
+        }
+      else if (st.qLimDrop != 0)
+        {
+          std::cout << "There should be no drops due to queue full" << std::endl;
+          exit (-1);
+        }
+    }
+
+  if (flowMonitor)
+    {
+      std::stringstream stmp;
+      stmp << pathOut << "/ared.flowmon";
+
+      flowmon->SerializeToXmlFile (stmp.str ().c_str (), false, false);
+    }
+
+  if (printAredStats)
+    {
+      std::cout << "*** ARED stats from Node 2 queue ***" << std::endl;
+      std::cout << "\t " << st.unforcedDrop << " drops due to prob mark" << std::endl;
+      std::cout << "\t " << st.forcedDrop << " drops due to hard mark" << std::endl;
+      std::cout << "\t " << st.qLimDrop << " drops due to queue full" << std::endl;
+    }
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.24.1/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc ns-3.25/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc
--- ns-3.24.1/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,447 @@
+/* -*- 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>
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+/*
+ * This is an example that compares CoDel and PfifoFast 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) PfifoFast queue , 256K bytes
+ * (2) PfifoFast, CoDel
+ *
+ * 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"
+#include "ns3/traffic-control-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("CoDelPfifoFastAsymmetricTest");
+
+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/$ns3::TrafficControlLayer/RootQueueDiscList/0/$ns3::CoDelQueueDisc/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/$ns3::TrafficControlLayer/RootQueueDiscList/0/BytesInQueue", MakeBoundCallback (&QueueLengthTracer, stream));
+    }
+}
+
+static void
+EveryDropTracer (Ptr<OutputStreamWrapper>stream, Ptr<const QueueItem> item)
+{
+  *stream->GetStream () << Simulator::Now ().GetSeconds () << " " << item << 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/$ns3::TrafficControlLayer/RootQueueDiscList/0/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/$ns3::TrafficControlLayer/RootQueueDiscList/0/$ns3::CoDelQueueDisc/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 routerWanQueueDiscType = "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-pfifo-fast-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 ("routerWanQueueDiscType", "Router WAN queue disc type: "
+                "PfifoFast, CoDel", routerWanQueueDiscType);
+  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 + "-" + routerWanQueueDiscType;
+  std::string cwndTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-cwnd" + ".tr";
+  std::string attributeFileName = fileNamePrefix + "-" + routerWanQueueDiscType + ".attr";
+  std::string sojournTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-sojourn" + ".tr";
+  std::string queueLengthTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-length" + ".tr";
+  std::string everyDropTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-drop" + ".tr";
+  std::string dropStateTrFileName = fileNamePrefix + "-" + routerWanQueueDiscType + "-drop-state" + ".tr";
+  if (logging)
+    {
+      //LogComponentEnable ("CoDelPfifoFastAsymmetricTest", LOG_LEVEL_ALL);
+      //LogComponentEnable ("BulkSendApplication", LOG_LEVEL_INFO);
+      //LogComponentEnable ("PfifoFastQueue", LOG_LEVEL_ALL);
+      LogComponentEnable ("CoDelQueueDisc", LOG_LEVEL_FUNCTION);
+    }
+
+  // Queue defaults
+  Config::SetDefault ("ns3::PfifoFastQueueDisc::Limit", UintegerValue (queueSize));
+  Config::SetDefault ("ns3::CoDelQueueDisc::MaxPackets", UintegerValue (queueSize));
+  Config::SetDefault ("ns3::CoDelQueueDisc::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 ("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<PointToPointNetDevice> routerWanDev = DynamicCast<PointToPointNetDevice> (cmtsRouterDev.Get (1));
+  routerWanDev->SetAttribute ("DataRate", StringValue (routerWanDataRate));
+
+  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 ("Install Internet stack on all nodes");
+  InternetStackHelper stack;
+  stack.InstallAll ();
+
+  TrafficControlHelper tchPfifo;
+  uint32_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+
+  TrafficControlHelper tchCoDel;
+  tchCoDel.SetRootQueueDisc ("ns3::CoDelQueueDisc");
+
+  tchPfifo.Install (serverCmtsDev);
+  tchPfifo.Install (cmtsWanDev);
+  if (routerWanQueueDiscType.compare ("PfifoFast") == 0)
+    {
+      tchPfifo.Install (routerWanDev);
+    }
+  else if (routerWanQueueDiscType.compare ("CoDel") == 0)
+    {
+      tchCoDel.Install (routerWanDev);
+    }
+  else
+    {
+      NS_LOG_DEBUG ("Invalid router WAN queue disc type");
+      exit (1);
+    }  
+  tchPfifo.Install (routerHostDev);
+
+  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 (routerWanQueueDiscType.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/traffic-control/examples/codel-vs-pfifo-basic-test.cc ns-3.25/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc
--- ns-3.24.1/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,227 @@
+/* -*- 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>
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+/*
+ * This is a basic example that compares CoDel and PfifoFast queues using a simple, single-flow topology:
+ *
+ * source -------------------------- router ------------------------ sink
+ *          100 Mb/s, 0.1 ms       pfifofast       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"
+#include "ns3/traffic-control-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("CoDelPfifoFastBasicTest");
+
+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 queueDiscType = "PfifoFast";       //PfifoFast 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 = "pcapFilePfifoFast.pcap";
+  std::string cwndTrFileName = "cwndPfifoFast.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 ("queueDiscType", "Queue disc type: PfifoFast, CoDel", queueDiscType);
+  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 ("CoDelPfifoFastBasicTest", LOG_LEVEL_ALL);
+      LogComponentEnable ("BulkSendApplication", LOG_LEVEL_INFO);
+      LogComponentEnable ("PfifoFastQueueDisc", LOG_LEVEL_ALL);
+      LogComponentEnable ("CoDelQueueDisc", LOG_LEVEL_ALL);
+    }
+
+  // Enable checksum
+  if (isPcapEnabled)
+    {
+      GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
+    }
+
+  Config::SetDefault ("ns3::Queue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (queueSize));
+
+  // 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));
+
+  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");
+
+  // Configure the source and sink net devices
+  // and the channels between the source/sink and the gateway
+  Ipv4InterfaceContainer sinkInterface;
+
+  NetDeviceContainer devicesAccessLink, devicesBottleneckLink;
+
+  devicesAccessLink = accessLink.Install (source.Get (0), gateway.Get (0));
+  tchPfifo.Install (devicesAccessLink);
+  address.NewNetwork ();
+  Ipv4InterfaceContainer interfaces = address.Assign (devicesAccessLink);
+
+  devicesBottleneckLink = bottleneckLink.Install (gateway.Get (0), sink.Get (0));
+  address.NewNetwork ();
+  if (queueDiscType.compare ("PfifoFast") == 0)
+    {
+      tchPfifo.Install (devicesBottleneckLink);
+    }
+  else if (queueDiscType.compare ("CoDel") == 0)
+    {
+      tchCoDel.Install (devicesBottleneckLink);
+    }
+  else
+    {
+      NS_ABORT_MSG ("Invalid queue disc type: Use --queueDiscType=PfifoFast or --queueDiscType=CoDel");
+    }
+  interfaces = address.Assign (devicesBottleneckLink);
+
+  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/traffic-control/examples/pfifo-vs-red.cc ns-3.25/src/traffic-control/examples/pfifo-vs-red.cc
--- ns-3.24.1/src/traffic-control/examples/pfifo-vs-red.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/pfifo-vs-red.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,186 @@
+/* -*- 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
+ *
+ * Author: John Abraham <john.abraham@gatech.edu> 
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+
+#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/point-to-point-layout-module.h"
+#include "ns3/traffic-control-module.h"
+
+#include <iostream>
+#include <iomanip>
+#include <map>
+
+using namespace ns3;
+
+
+int main (int argc, char *argv[])
+{
+  uint32_t    nLeaf = 5; 
+  uint32_t    maxPackets = 100;
+  uint32_t    modeBytes  = 0;
+  uint32_t    queueDiscLimitPackets = 1000;
+  double      minTh = 50;
+  double      maxTh = 80;
+  uint32_t    pktSize = 512;
+  std::string appDataRate = "10Mbps";
+  std::string queueDiscType = "PfifoFast";
+  uint16_t port = 5001;
+  std::string bottleNeckLinkBw = "1Mbps";
+  std::string bottleNeckLinkDelay = "50ms";
+
+  CommandLine cmd;
+  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
+  cmd.AddValue ("maxPackets","Max Packets allowed in the device queue", maxPackets);
+  cmd.AddValue ("queueDiscLimitPackets","Max Packets allowed in the queue disc", queueDiscLimitPackets);
+  cmd.AddValue ("queueDiscType", "Set QueueDisc type to PfifoFast or RED", queueDiscType);
+  cmd.AddValue ("appPktSize", "Set OnOff App Packet Size", pktSize);
+  cmd.AddValue ("appDataRate", "Set OnOff App DataRate", appDataRate);
+  cmd.AddValue ("modeBytes", "Set QueueDisc mode to Packets <0> or bytes <1>", modeBytes);
+
+  cmd.AddValue ("redMinTh", "RED queue minimum threshold", minTh);
+  cmd.AddValue ("redMaxTh", "RED queue maximum threshold", maxTh);
+  cmd.Parse (argc,argv);
+
+  if ((queueDiscType != "RED") && (queueDiscType != "PfifoFast"))
+    {
+      NS_ABORT_MSG ("Invalid queue disc type: Use --queueDiscType=RED or --queueDiscType=PfifoFast");
+    }
+
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (pktSize));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue (appDataRate));
+
+  Config::SetDefault ("ns3::Queue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (maxPackets));
+
+  if (!modeBytes)
+  {
+    Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+    Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (queueDiscLimitPackets));
+    Config::SetDefault ("ns3::PfifoFastQueueDisc::Limit", UintegerValue (queueDiscLimitPackets));
+  }
+  else 
+  {
+    Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_BYTES"));
+    Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (queueDiscLimitPackets * pktSize));
+    minTh *= pktSize;
+    maxTh *= pktSize;
+  }
+
+  Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (minTh));
+  Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (maxTh));
+  Config::SetDefault ("ns3::RedQueueDisc::LinkBandwidth", StringValue (bottleNeckLinkBw));
+  Config::SetDefault ("ns3::RedQueueDisc::LinkDelay", StringValue (bottleNeckLinkDelay));
+
+  // Create the point-to-point link helpers
+  PointToPointHelper bottleNeckLink;
+  bottleNeckLink.SetDeviceAttribute  ("DataRate", StringValue (bottleNeckLinkBw));
+  bottleNeckLink.SetChannelAttribute ("Delay", StringValue (bottleNeckLinkDelay));
+
+  PointToPointHelper pointToPointLeaf;
+  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
+  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
+
+  PointToPointDumbbellHelper d (nLeaf, pointToPointLeaf,
+                                nLeaf, pointToPointLeaf,
+                                bottleNeckLink);
+
+  // Install Stack
+  InternetStackHelper stack;
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+     stack.Install (d.GetLeft (i));
+    }
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+     stack.Install (d.GetRight (i));
+    }
+
+  if (queueDiscType == "PfifoFast")
+    {
+      stack.Install (d.GetLeft ());
+      stack.Install (d.GetRight ());
+    }
+  else if (queueDiscType == "RED")
+    {
+      stack.Install (d.GetLeft ());
+      stack.Install (d.GetRight ());
+      TrafficControlHelper tchBottleneck;
+      tchBottleneck.SetRootQueueDisc ("ns3::RedQueueDisc");
+      tchBottleneck.Install (d.GetLeft ()->GetDevice (0));
+      tchBottleneck.Install (d.GetRight ()->GetDevice (0));
+    }
+
+  // Assign IP Addresses
+  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
+
+  // Install on/off app on all right side nodes
+  OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());
+  clientHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  clientHelper.SetAttribute ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
+  ApplicationContainer sinkApps; 
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+      sinkApps.Add (packetSinkHelper.Install (d.GetLeft (i)));
+    }
+  sinkApps.Start (Seconds (0.0));
+  sinkApps.Stop (Seconds (30.0));
+
+  ApplicationContainer clientApps;
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      // Create an on/off app sending packets to the left side
+      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), port));
+      clientHelper.SetAttribute ("Remote", remoteAddress);
+      clientApps.Add (clientHelper.Install (d.GetRight (i)));
+    }
+  clientApps.Start (Seconds (1.0)); // Start 1 second after sink
+  clientApps.Stop (Seconds (15.0)); // Stop before the sink
+
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  std::cout << "Running the simulation" << std::endl;
+  Simulator::Run ();
+
+  uint32_t totalRxBytesCounter = 0;
+  for (uint32_t i = 0; i < sinkApps.GetN (); i++)
+    {
+      Ptr <Application> app = sinkApps.Get (i);
+      Ptr <PacketSink> pktSink = DynamicCast <PacketSink> (app);
+      totalRxBytesCounter += pktSink->GetTotalRx ();
+    }
+  NS_LOG_UNCOND ("----------------------------\nQueueDisc Type:" 
+                 << queueDiscType 
+                 << "\nGoodput Bytes/sec:" 
+                 << totalRxBytesCounter/Simulator::Now ().GetSeconds ()); 
+  NS_LOG_UNCOND ("----------------------------");
+
+
+  std::cout << "Destroying the simulation" << std::endl;
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.24.1/src/traffic-control/examples/red-tests.cc ns-3.25/src/traffic-control/examples/red-tests.cc
--- ns-3.24.1/src/traffic-control/examples/red-tests.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/red-tests.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,478 @@
+/* -*- 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: Marcos Talau <talau@users.sourceforge.net>
+ *          Duy Nguyen <duy@soe.ucsc.edu>
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+/**
+ * These validation tests are detailed in http://icir.org/floyd/papers/redsims.ps
+ *
+ * In this code the tests 1, 3, 4 and 5 refer to the tests corresponding to
+ * Figure 1, 3, 4, and 5 respectively from the document mentioned above.
+ */
+
+/** Network topology
+ *
+ *    10Mb/s, 2ms                            10Mb/s, 4ms
+ * n0--------------|                    |---------------n4
+ *                 |   1.5Mbps/s, 20ms  |
+ *                 n2------------------n3
+ *    10Mb/s, 3ms  |                    |    10Mb/s, 5ms
+ * n1--------------|                    |---------------n5
+ *
+ *
+ */
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/flow-monitor-helper.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/applications-module.h"
+#include "ns3/traffic-control-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("RedTests");
+
+uint32_t checkTimes;
+double avgQueueSize;
+
+// The times
+double global_start_time;
+double global_stop_time;
+double sink_start_time;
+double sink_stop_time;
+double client_start_time;
+double client_stop_time;
+
+NodeContainer n0n2;
+NodeContainer n1n2;
+NodeContainer n2n3;
+NodeContainer n3n4;
+NodeContainer n3n5;
+
+Ipv4InterfaceContainer i0i2;
+Ipv4InterfaceContainer i1i2;
+Ipv4InterfaceContainer i2i3;
+Ipv4InterfaceContainer i3i4;
+Ipv4InterfaceContainer i3i5;
+
+std::stringstream filePlotQueue;
+std::stringstream filePlotQueueAvg;
+
+void
+CheckQueueSize (Ptr<QueueDisc> queue)
+{
+  uint32_t qSize = StaticCast<RedQueueDisc> (queue)->GetQueueSize ();
+
+  avgQueueSize += qSize;
+  checkTimes++;
+
+  // check queue size every 1/100 of a second
+  Simulator::Schedule (Seconds (0.01), &CheckQueueSize, queue);
+
+  std::ofstream fPlotQueue (filePlotQueue.str ().c_str (), std::ios::out|std::ios::app);
+  fPlotQueue << Simulator::Now ().GetSeconds () << " " << qSize << std::endl;
+  fPlotQueue.close ();
+
+  std::ofstream fPlotQueueAvg (filePlotQueueAvg.str ().c_str (), std::ios::out|std::ios::app);
+  fPlotQueueAvg << Simulator::Now ().GetSeconds () << " " << avgQueueSize / checkTimes << std::endl;
+  fPlotQueueAvg.close ();
+}
+
+void
+BuildAppsTest (uint32_t test)
+{
+  if ( (test == 1) || (test == 3) )
+    {
+      // SINK is in the right side
+      uint16_t port = 50000;
+      Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+      PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
+      ApplicationContainer sinkApp = sinkHelper.Install (n3n4.Get (1));
+      sinkApp.Start (Seconds (sink_start_time));
+      sinkApp.Stop (Seconds (sink_stop_time));
+
+      // Connection one
+      // Clients are in left side
+      /*
+       * Create the OnOff applications to send TCP to the server
+       * onoffhelper is a client that send data to TCP destination
+       */
+      OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
+      clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper1.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper1.SetAttribute 
+        ("PacketSize", UintegerValue (1000));
+
+      ApplicationContainer clientApps1;
+      AddressValue remoteAddress
+        (InetSocketAddress (i3i4.GetAddress (1), port));
+      clientHelper1.SetAttribute ("Remote", remoteAddress);
+      clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
+      clientApps1.Start (Seconds (client_start_time));
+      clientApps1.Stop (Seconds (client_stop_time));
+
+      // Connection two
+      OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
+      clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper2.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper2.SetAttribute 
+        ("PacketSize", UintegerValue (1000));
+
+      ApplicationContainer clientApps2;
+      clientHelper2.SetAttribute ("Remote", remoteAddress);
+      clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
+      clientApps2.Start (Seconds (3.0));
+      clientApps2.Stop (Seconds (client_stop_time));
+    }
+  else // 4 or 5
+    {
+      // SINKs
+      // #1
+      uint16_t port1 = 50001;
+      Address sinkLocalAddress1 (InetSocketAddress (Ipv4Address::GetAny (), port1));
+      PacketSinkHelper sinkHelper1 ("ns3::TcpSocketFactory", sinkLocalAddress1);
+      ApplicationContainer sinkApp1 = sinkHelper1.Install (n3n4.Get (1));
+      sinkApp1.Start (Seconds (sink_start_time));
+      sinkApp1.Stop (Seconds (sink_stop_time));
+      // #2
+      uint16_t port2 = 50002;
+      Address sinkLocalAddress2 (InetSocketAddress (Ipv4Address::GetAny (), port2));
+      PacketSinkHelper sinkHelper2 ("ns3::TcpSocketFactory", sinkLocalAddress2);
+      ApplicationContainer sinkApp2 = sinkHelper2.Install (n3n5.Get (1));
+      sinkApp2.Start (Seconds (sink_start_time));
+      sinkApp2.Stop (Seconds (sink_stop_time));
+      // #3
+      uint16_t port3 = 50003;
+      Address sinkLocalAddress3 (InetSocketAddress (Ipv4Address::GetAny (), port3));
+      PacketSinkHelper sinkHelper3 ("ns3::TcpSocketFactory", sinkLocalAddress3);
+      ApplicationContainer sinkApp3 = sinkHelper3.Install (n0n2.Get (0));
+      sinkApp3.Start (Seconds (sink_start_time));
+      sinkApp3.Stop (Seconds (sink_stop_time));
+      // #4
+      uint16_t port4 = 50004;
+      Address sinkLocalAddress4 (InetSocketAddress (Ipv4Address::GetAny (), port4));
+      PacketSinkHelper sinkHelper4 ("ns3::TcpSocketFactory", sinkLocalAddress4);
+      ApplicationContainer sinkApp4 = sinkHelper4.Install (n1n2.Get (0));
+      sinkApp4.Start (Seconds (sink_start_time));
+      sinkApp4.Stop (Seconds (sink_stop_time));
+
+      // Connection #1
+      /*
+       * Create the OnOff applications to send TCP to the server
+       * onoffhelper is a client that send data to TCP destination
+       */
+      OnOffHelper clientHelper1 ("ns3::TcpSocketFactory", Address ());
+      clientHelper1.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper1.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper1.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper1.SetAttribute 
+        ("PacketSize", UintegerValue (1000));
+
+      ApplicationContainer clientApps1;
+      AddressValue remoteAddress1
+        (InetSocketAddress (i3i4.GetAddress (1), port1));
+      clientHelper1.SetAttribute ("Remote", remoteAddress1);
+      clientApps1.Add (clientHelper1.Install (n0n2.Get (0)));
+      clientApps1.Start (Seconds (client_start_time));
+      clientApps1.Stop (Seconds (client_stop_time));
+
+      // Connection #2
+      OnOffHelper clientHelper2 ("ns3::TcpSocketFactory", Address ());
+      clientHelper2.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper2.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper2.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper2.SetAttribute 
+        ("PacketSize", UintegerValue (1000));
+
+      ApplicationContainer clientApps2;
+      AddressValue remoteAddress2
+        (InetSocketAddress (i3i5.GetAddress (1), port2));
+      clientHelper2.SetAttribute ("Remote", remoteAddress2);
+      clientApps2.Add (clientHelper2.Install (n1n2.Get (0)));
+      clientApps2.Start (Seconds (2.0));
+      clientApps2.Stop (Seconds (client_stop_time));
+
+      // Connection #3
+      OnOffHelper clientHelper3 ("ns3::TcpSocketFactory", Address ());
+      clientHelper3.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper3.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper3.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("10Mb/s")));
+      clientHelper3.SetAttribute 
+        ("PacketSize", UintegerValue (1000));
+
+      ApplicationContainer clientApps3;
+      AddressValue remoteAddress3
+        (InetSocketAddress (i0i2.GetAddress (0), port3));
+      clientHelper3.SetAttribute ("Remote", remoteAddress3);
+      clientApps3.Add (clientHelper3.Install (n3n4.Get (1)));
+      clientApps3.Start (Seconds (3.5));
+      clientApps3.Stop (Seconds (client_stop_time));
+
+      // Connection #4
+      OnOffHelper clientHelper4 ("ns3::TcpSocketFactory", Address ());
+      clientHelper4.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
+      clientHelper4.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
+      clientHelper4.SetAttribute 
+        ("DataRate", DataRateValue (DataRate ("40b/s")));
+      clientHelper4.SetAttribute 
+        ("PacketSize", UintegerValue (5 * 8)); // telnet
+
+      ApplicationContainer clientApps4;
+      AddressValue remoteAddress4
+        (InetSocketAddress (i1i2.GetAddress (0), port4));
+      clientHelper4.SetAttribute ("Remote", remoteAddress4);
+      clientApps4.Add (clientHelper4.Install (n3n5.Get (1)));
+      clientApps4.Start (Seconds (1.0));
+      clientApps4.Stop (Seconds (client_stop_time));
+    }
+}
+
+int
+main (int argc, char *argv[])
+{
+  LogComponentEnable ("RedQueueDisc", LOG_LEVEL_INFO);
+
+  uint32_t redTest;
+  std::string redLinkDataRate = "1.5Mbps";
+  std::string redLinkDelay = "20ms";
+
+  std::string pathOut;
+  bool writeForPlot = false;
+  bool writePcap = false;
+  bool flowMonitor = false;
+
+  bool printRedStats = true;
+
+  global_start_time = 0.0;
+  global_stop_time = 11; 
+  sink_start_time = global_start_time;
+  sink_stop_time = global_stop_time + 3.0;
+  client_start_time = sink_start_time + 0.2;
+  client_stop_time = global_stop_time - 2.0;
+
+  // Configuration and command line parameter parsing
+  redTest = 1;
+  // Will only save in the directory if enable opts below
+  pathOut = "."; // Current directory
+  CommandLine cmd;
+  cmd.AddValue ("testNumber", "Run test 1, 3, 4 or 5", redTest);
+  cmd.AddValue ("pathOut", "Path to save results from --writeForPlot/--writePcap/--writeFlowMonitor", pathOut);
+  cmd.AddValue ("writeForPlot", "<0/1> to write results for plot (gnuplot)", writeForPlot);
+  cmd.AddValue ("writePcap", "<0/1> to write results in pcapfile", writePcap);
+  cmd.AddValue ("writeFlowMonitor", "<0/1> to enable Flow Monitor and write their results", flowMonitor);
+
+  cmd.Parse (argc, argv);
+  if ( (redTest != 1) && (redTest != 3) && (redTest != 4) && (redTest != 5) )
+    {
+      NS_ABORT_MSG ("Invalid test number. Supported tests are 1, 3, 4 or 5");
+    }
+
+  NS_LOG_INFO ("Create nodes");
+  NodeContainer c;
+  c.Create (6);
+  Names::Add ( "N0", c.Get (0));
+  Names::Add ( "N1", c.Get (1));
+  Names::Add ( "N2", c.Get (2));
+  Names::Add ( "N3", c.Get (3));
+  Names::Add ( "N4", c.Get (4));
+  Names::Add ( "N5", c.Get (5));
+  n0n2 = NodeContainer (c.Get (0), c.Get (2));
+  n1n2 = NodeContainer (c.Get (1), c.Get (2));
+  n2n3 = NodeContainer (c.Get (2), c.Get (3));
+  n3n4 = NodeContainer (c.Get (3), c.Get (4));
+  n3n5 = NodeContainer (c.Get (3), c.Get (5));
+
+  Config::SetDefault ("ns3::TcpL4Protocol::SocketType", StringValue ("ns3::TcpNewReno"));
+  // 42 = headers size
+  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000 - 42));
+  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
+  GlobalValue::Bind ("ChecksumEnabled", BooleanValue (false));
+
+  uint32_t meanPktSize = 500;
+
+  // RED params
+  NS_LOG_INFO ("Set RED params");
+  Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::RedQueueDisc::MeanPktSize", UintegerValue (meanPktSize));
+  Config::SetDefault ("ns3::RedQueueDisc::Wait", BooleanValue (true));
+  Config::SetDefault ("ns3::RedQueueDisc::Gentle", BooleanValue (true));
+  Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (0.002));
+  Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (5));
+  Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (15));
+  Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (1000));
+
+  if (redTest == 3) // test like 1, but with bad params
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (10));
+      Config::SetDefault ("ns3::RedQueueDisc::QW", DoubleValue (0.003));
+    }
+  else if (redTest == 5) // test 5, same of test 4, but in byte mode
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_BYTES"));
+      Config::SetDefault ("ns3::RedQueueDisc::Ns1Compat", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (5 * meanPktSize));
+      Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (15 * meanPktSize));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (1000 * meanPktSize));
+    }
+
+  NS_LOG_INFO ("Install internet stack on all nodes.");
+  InternetStackHelper internet;
+  internet.Install (c);
+
+  TrafficControlHelper tchPfifo;
+  uint16_t handle = tchPfifo.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  tchPfifo.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+  tchPfifo.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+
+  TrafficControlHelper tchRed;
+  tchRed.SetRootQueueDisc ("ns3::RedQueueDisc", "LinkBandwidth", StringValue (redLinkDataRate),
+                           "LinkDelay", StringValue (redLinkDelay));
+
+  NS_LOG_INFO ("Create channels");
+  PointToPointHelper p2p;
+
+  p2p.SetQueue ("ns3::DropTailQueue");
+  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
+  NetDeviceContainer devn0n2 = p2p.Install (n0n2);
+  tchPfifo.Install (devn0n2);
+
+  p2p.SetQueue ("ns3::DropTailQueue");
+  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  p2p.SetChannelAttribute ("Delay", StringValue ("3ms"));
+  NetDeviceContainer devn1n2 = p2p.Install (n1n2);
+  tchPfifo.Install (devn1n2);
+
+  p2p.SetQueue ("ns3::DropTailQueue");
+  p2p.SetDeviceAttribute ("DataRate", StringValue (redLinkDataRate));
+  p2p.SetChannelAttribute ("Delay", StringValue (redLinkDelay));
+  NetDeviceContainer devn2n3 = p2p.Install (n2n3);
+  // only backbone link has RED queue disc
+  QueueDiscContainer queueDiscs = tchRed.Install (devn2n3);
+
+  p2p.SetQueue ("ns3::DropTailQueue");
+  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  p2p.SetChannelAttribute ("Delay", StringValue ("4ms"));
+  NetDeviceContainer devn3n4 = p2p.Install (n3n4);
+  tchPfifo.Install (devn3n4);
+
+  p2p.SetQueue ("ns3::DropTailQueue");
+  p2p.SetDeviceAttribute ("DataRate", StringValue ("10Mbps"));
+  p2p.SetChannelAttribute ("Delay", StringValue ("5ms"));
+  NetDeviceContainer devn3n5 = p2p.Install (n3n5);
+  tchPfifo.Install (devn3n5);
+
+  NS_LOG_INFO ("Assign IP Addresses");
+  Ipv4AddressHelper ipv4;
+
+  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
+  i0i2 = ipv4.Assign (devn0n2);
+
+  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
+  i1i2 = ipv4.Assign (devn1n2);
+
+  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
+  i2i3 = ipv4.Assign (devn2n3);
+
+  ipv4.SetBase ("10.1.4.0", "255.255.255.0");
+  i3i4 = ipv4.Assign (devn3n4);
+
+  ipv4.SetBase ("10.1.5.0", "255.255.255.0");
+  i3i5 = ipv4.Assign (devn3n5);
+
+  // Set up the routing
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  if (redTest == 5) 
+    {
+      // like in ns2 test, r2 -> r1, have a queue in packet mode
+      Ptr<QueueDisc> queue = queueDiscs.Get (1);
+
+      StaticCast<RedQueueDisc> (queue)->SetMode (Queue::QUEUE_MODE_PACKETS);
+      StaticCast<RedQueueDisc> (queue)->SetTh (5, 15);
+      StaticCast<RedQueueDisc> (queue)->SetQueueLimit (1000);
+    }
+
+  BuildAppsTest (redTest);
+
+  if (writePcap)
+    {
+      PointToPointHelper ptp;
+      std::stringstream stmp;
+      stmp << pathOut << "/red";
+      ptp.EnablePcapAll (stmp.str ().c_str ());
+    }
+
+  Ptr<FlowMonitor> flowmon;
+  if (flowMonitor)
+    {
+      FlowMonitorHelper flowmonHelper;
+      flowmon = flowmonHelper.InstallAll ();
+    }
+
+  if (writeForPlot)
+    {
+      filePlotQueue << pathOut << "/" << "red-queue.plotme";
+      filePlotQueueAvg << pathOut << "/" << "red-queue_avg.plotme";
+
+      remove (filePlotQueue.str ().c_str ());
+      remove (filePlotQueueAvg.str ().c_str ());
+      Ptr<QueueDisc> queue = queueDiscs.Get (0);
+      Simulator::ScheduleNow (&CheckQueueSize, queue);
+    }
+
+  Simulator::Stop (Seconds (sink_stop_time));
+  Simulator::Run ();
+
+  if (flowMonitor)
+    {
+      std::stringstream stmp;
+      stmp << pathOut << "/red.flowmon";
+
+      flowmon->SerializeToXmlFile (stmp.str ().c_str (), false, false);
+    }
+
+  if (printRedStats)
+    {
+      RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queueDiscs.Get (0))->GetStats ();
+      std::cout << "*** RED stats from Node 2 queue ***" << std::endl;
+      std::cout << "\t " << st.unforcedDrop << " drops due prob mark" << std::endl;
+      std::cout << "\t " << st.forcedDrop << " drops due hard mark" << std::endl;
+      std::cout << "\t " << st.qLimDrop << " drops due queue full" << std::endl;
+
+      st = StaticCast<RedQueueDisc> (queueDiscs.Get (1))->GetStats ();
+      std::cout << "*** RED stats from Node 3 queue ***" << std::endl;
+      std::cout << "\t " << st.unforcedDrop << " drops due prob mark" << std::endl;
+      std::cout << "\t " << st.forcedDrop << " drops due hard mark" << std::endl;
+      std::cout << "\t " << st.qLimDrop << " drops due queue full" << std::endl;
+    }
+
+  Simulator::Destroy ();
+
+  return 0;
+}
diff -Naur ns-3.24.1/src/traffic-control/examples/red-vs-ared.cc ns-3.25/src/traffic-control/examples/red-vs-ared.cc
--- ns-3.24.1/src/traffic-control/examples/red-vs-ared.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/red-vs-ared.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,244 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 NITK Surathkal
+ *
+ * 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: Mohit P. Tahiliani <tahiliani@nitk.edu.in>
+ *
+ */
+
+#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/point-to-point-layout-module.h"
+#include "ns3/traffic-control-module.h"
+
+#include <iostream>
+#include <iomanip>
+#include <map>
+
+using namespace ns3;
+
+int main (int argc, char *argv[])
+{
+  uint32_t    nLeaf = 10;
+  uint32_t    maxPackets = 100;
+  bool        modeBytes  = false;
+  uint32_t    queueDiscLimitPackets = 1000;
+  double      minTh = 5;
+  double      maxTh = 15;
+  uint32_t    pktSize = 512;
+  std::string appDataRate = "10Mbps";
+  std::string queueDiscType = "RED";
+  uint16_t port = 5001;
+  std::string bottleNeckLinkBw = "1Mbps";
+  std::string bottleNeckLinkDelay = "50ms";
+
+  CommandLine cmd;
+  cmd.AddValue ("nLeaf",     "Number of left and right side leaf nodes", nLeaf);
+  cmd.AddValue ("maxPackets","Max Packets allowed in the device queue", maxPackets);
+  cmd.AddValue ("queueDiscLimitPackets","Max Packets allowed in the queue disc", queueDiscLimitPackets);
+  cmd.AddValue ("queueDiscType", "Set Queue disc type to RED or ARED", queueDiscType);
+  cmd.AddValue ("appPktSize", "Set OnOff App Packet Size", pktSize);
+  cmd.AddValue ("appDataRate", "Set OnOff App DataRate", appDataRate);
+  cmd.AddValue ("modeBytes", "Set Queue disc mode to Packets <false> or bytes <true>", modeBytes);
+
+  cmd.AddValue ("redMinTh", "RED queue minimum threshold", minTh);
+  cmd.AddValue ("redMaxTh", "RED queue maximum threshold", maxTh);
+  cmd.Parse (argc,argv);
+
+  if ((queueDiscType != "RED") && (queueDiscType != "ARED"))
+    {
+      std::cout << "Invalid queue disc type: Use --queueDiscType=RED or --queueDiscType=ARED" << std::endl;
+      exit (1);
+    }
+
+  Config::SetDefault ("ns3::OnOffApplication::PacketSize", UintegerValue (pktSize));
+  Config::SetDefault ("ns3::OnOffApplication::DataRate", StringValue (appDataRate));
+
+  Config::SetDefault ("ns3::Queue::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+  Config::SetDefault ("ns3::Queue::MaxPackets", UintegerValue (maxPackets));
+
+  if (!modeBytes)
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_PACKETS"));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (queueDiscLimitPackets));
+    }
+  else
+    {
+      Config::SetDefault ("ns3::RedQueueDisc::Mode", StringValue ("QUEUE_MODE_BYTES"));
+      Config::SetDefault ("ns3::RedQueueDisc::QueueLimit", UintegerValue (queueDiscLimitPackets * pktSize));
+      minTh *= pktSize;
+      maxTh *= pktSize;
+    }
+
+  Config::SetDefault ("ns3::RedQueueDisc::MinTh", DoubleValue (minTh));
+  Config::SetDefault ("ns3::RedQueueDisc::MaxTh", DoubleValue (maxTh));
+  Config::SetDefault ("ns3::RedQueueDisc::LinkBandwidth", StringValue (bottleNeckLinkBw));
+  Config::SetDefault ("ns3::RedQueueDisc::LinkDelay", StringValue (bottleNeckLinkDelay));
+  Config::SetDefault ("ns3::RedQueueDisc::MeanPktSize", UintegerValue (pktSize));
+
+  if (queueDiscType == "ARED")
+    {
+      // Turn on ARED
+      Config::SetDefault ("ns3::RedQueueDisc::ARED", BooleanValue (true));
+      Config::SetDefault ("ns3::RedQueueDisc::LInterm", DoubleValue (10.0));
+    }
+
+  // Create the point-to-point link helpers
+  PointToPointHelper bottleNeckLink;
+  bottleNeckLink.SetDeviceAttribute  ("DataRate", StringValue (bottleNeckLinkBw));
+  bottleNeckLink.SetChannelAttribute ("Delay", StringValue (bottleNeckLinkDelay));
+
+  PointToPointHelper pointToPointLeaf;
+  pointToPointLeaf.SetDeviceAttribute    ("DataRate", StringValue ("10Mbps"));
+  pointToPointLeaf.SetChannelAttribute   ("Delay", StringValue ("1ms"));
+
+  PointToPointDumbbellHelper d (nLeaf, pointToPointLeaf,
+                                nLeaf, pointToPointLeaf,
+                                bottleNeckLink);
+
+  // Install Stack
+  InternetStackHelper stack;
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+      stack.Install (d.GetLeft (i));
+    }
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      stack.Install (d.GetRight (i));
+    }
+
+  stack.Install (d.GetLeft ());
+  stack.Install (d.GetRight ());
+  TrafficControlHelper tchBottleneck;
+  tchBottleneck.SetRootQueueDisc ("ns3::RedQueueDisc");
+  tchBottleneck.Install (d.GetLeft ()->GetDevice (0));
+  tchBottleneck.Install (d.GetRight ()->GetDevice (0));
+
+  // Assign IP Addresses
+  d.AssignIpv4Addresses (Ipv4AddressHelper ("10.1.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.2.1.0", "255.255.255.0"),
+                         Ipv4AddressHelper ("10.3.1.0", "255.255.255.0"));
+
+  // Install on/off app on all right side nodes
+  OnOffHelper clientHelper ("ns3::TcpSocketFactory", Address ());
+  clientHelper.SetAttribute ("OnTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  clientHelper.SetAttribute ("OffTime", StringValue ("ns3::UniformRandomVariable[Min=0.,Max=1.]"));
+  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), port));
+  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
+  ApplicationContainer sinkApps;
+  for (uint32_t i = 0; i < d.LeftCount (); ++i)
+    {
+      sinkApps.Add (packetSinkHelper.Install (d.GetLeft (i)));
+    }
+  sinkApps.Start (Seconds (0.0));
+  sinkApps.Stop (Seconds (30.0));
+
+  ApplicationContainer clientApps;
+  for (uint32_t i = 0; i < d.RightCount (); ++i)
+    {
+      // Create an on/off app sending packets to the left side
+      AddressValue remoteAddress (InetSocketAddress (d.GetLeftIpv4Address (i), port));
+      clientHelper.SetAttribute ("Remote", remoteAddress);
+      clientApps.Add (clientHelper.Install (d.GetRight (i)));
+    }
+  clientApps.Start (Seconds (1.0)); // Start 1 second after sink
+  clientApps.Stop (Seconds (15.0)); // Stop before the sink
+
+  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+
+  std::cout << "Running the simulation" << std::endl;
+  Simulator::Run ();
+
+  uint32_t totalRxBytesCounter = 0;
+  for (uint32_t i = 0; i < sinkApps.GetN (); i++)
+    {
+      Ptr <Application> app = sinkApps.Get (i);
+      Ptr <PacketSink> pktSink = DynamicCast <PacketSink> (app);
+      totalRxBytesCounter += pktSink->GetTotalRx ();
+    }
+
+  if (queueDiscType == "RED")
+    {
+      if (modeBytes)
+        {
+          if (totalRxBytesCounter > 2772992)
+            {
+              std::cout << "RED Goodput is too high, should be about 10403.2 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+          else if (totalRxBytesCounter < 2661888)
+            {
+              std::cout << "RED Goodput is too low, should be about 10403.2 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+        }
+      else
+        {
+          if (totalRxBytesCounter > 2759680)
+            {
+              std::cout << "RED Goodput is too high, should be about 10355.1 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+          else if (totalRxBytesCounter < 2666496)
+            {
+              std::cout << "RED Goodput is too low, should be about 10355.1 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+        }
+    }
+  else if (queueDiscType == "ARED")
+    {
+      if (modeBytes)
+        {
+          if (totalRxBytesCounter > 2771968)
+            {
+              std::cout << "ARED Goodput is too high, should be about 10366.7 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+          else if (totalRxBytesCounter < 2654208)
+            {
+              std::cout << "ARED Goodput is too low, should be about 10366.7 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+        }
+      else
+        {
+          if (totalRxBytesCounter > 2765824)
+            {
+              std::cout << "ARED Goodput is too high, should be about 10317.4 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+          else if (totalRxBytesCounter < 2636800)
+            {
+              std::cout << "ARED Goodput is too low, should be about 10317.4 Bytes/sec" << std::endl;
+              exit (-1);
+            }
+        }
+    }
+
+  std::cout << "----------------------------\nQueue disc Type:"
+            << queueDiscType
+            << "\nGoodput Bytes/sec:"
+            << totalRxBytesCounter / Simulator::Now ().GetSeconds () << std::endl;
+  std::cout << "----------------------------" << std::endl;
+  std::cout << "Destroying the simulation" << std::endl;
+
+  Simulator::Destroy ();
+  return 0;
+}
diff -Naur ns-3.24.1/src/traffic-control/examples/wscript ns-3.25/src/traffic-control/examples/wscript
--- ns-3.24.1/src/traffic-control/examples/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,23 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+def build(bld):
+    pass
+
+    obj = bld.create_ns3_program('red-tests', ['point-to-point', 'internet', 'applications', 'flow-monitor', 'traffic-control'])
+    obj.source = 'red-tests.cc'
+
+    obj = bld.create_ns3_program('red-vs-ared', ['point-to-point', 'point-to-point-layout', 'internet', 'applications', 'traffic-control'])
+    obj.source = 'red-vs-ared.cc'
+
+    obj = bld.create_ns3_program('adaptive-red-tests', ['point-to-point', 'internet', 'applications', 'flow-monitor', 'traffic-control'])
+    obj.source = 'adaptive-red-tests.cc'
+
+    obj = bld.create_ns3_program('pfifo-vs-red', ['point-to-point', 'point-to-point-layout', 'internet', 'applications', 'traffic-control'])
+    obj.source = 'pfifo-vs-red.cc'
+
+    obj = bld.create_ns3_program('codel-vs-pfifo-basic-test', ['point-to-point','network', 'internet', 'applications', 'traffic-control'])
+    obj.source = 'codel-vs-pfifo-basic-test.cc'
+    
+    obj = bld.create_ns3_program('codel-vs-pfifo-asymmetric', ['point-to-point','network', 'internet', 'applications', 'traffic-control'])
+    obj.source = 'codel-vs-pfifo-asymmetric.cc'
+
diff -Naur ns-3.24.1/src/traffic-control/helper/queue-disc-container.cc ns-3.25/src/traffic-control/helper/queue-disc-container.cc
--- ns-3.24.1/src/traffic-control/helper/queue-disc-container.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/helper/queue-disc-container.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) 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: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "queue-disc-container.h"
+
+namespace ns3 {
+
+QueueDiscContainer::QueueDiscContainer ()
+{
+}
+
+QueueDiscContainer::QueueDiscContainer (Ptr<QueueDisc> qDisc)
+{
+  m_queueDiscs.push_back (qDisc);
+}
+
+QueueDiscContainer::ConstIterator
+QueueDiscContainer::Begin (void) const
+{
+  return m_queueDiscs.begin ();
+}
+
+QueueDiscContainer::ConstIterator
+QueueDiscContainer::End (void) const
+{
+  return m_queueDiscs.end ();
+}
+
+uint32_t
+QueueDiscContainer::GetN (void) const
+{
+  return m_queueDiscs.size ();
+}
+
+Ptr<QueueDisc>
+QueueDiscContainer::Get (uint32_t i) const
+{
+  return m_queueDiscs[i];
+}
+
+void
+QueueDiscContainer::Add (QueueDiscContainer other)
+{
+  for (ConstIterator i = other.Begin (); i != other.End (); i++)
+    {
+      m_queueDiscs.push_back (*i);
+    }
+}
+
+void
+QueueDiscContainer::Add (Ptr<QueueDisc> qDisc)
+{
+  m_queueDiscs.push_back (qDisc);
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/helper/queue-disc-container.h ns-3.25/src/traffic-control/helper/queue-disc-container.h
--- ns-3.24.1/src/traffic-control/helper/queue-disc-container.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/helper/queue-disc-container.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,171 @@
+/* -*- 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: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef QUEUE_DISC_CONTAINER_H
+#define QUEUE_DISC_CONTAINER_H
+
+#include <stdint.h>
+#include <vector>
+#include "ns3/queue-disc.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief Holds a vector of ns3::QueueDisc pointers.
+ *
+ * Typically ns-3 QueueDiscs are installed on net devices using a traffic control
+ * helper. The helper Install method takes a NetDeviceContainer which holds
+ * some number of Ptr<NetDevice>. For each of the net devices in the
+ * NetDeviceContainer the helper will instantiate a queue disc and install
+ * it to the net device. For each of the queue discs, the helper also
+ * adds the queue disc into a Container for later use by the caller.
+ * This is that container used to hold the Ptr<QueueDisc> which are
+ * instantiated by the traffic control helper.
+ */
+class QueueDiscContainer
+{
+public:
+  /// QueueDisc container const iterator
+  typedef std::vector<Ptr<QueueDisc> >::const_iterator ConstIterator;
+
+  /**
+   * Create an empty QueueDiscContainer.
+   */
+  QueueDiscContainer ();
+
+  /**
+   * \param qDisc a queue disc to add to the container
+   *
+   * Create a QueueDiscContainer with exactly one queue disc that has previously
+   * been instantiated
+   */
+  QueueDiscContainer (Ptr<QueueDisc> qDisc);
+
+  /**
+   * \brief Get a const iterator which refers to the first QueueDisc in the
+   * container.
+   *
+   * QueueDiscs can be retrieved from the container in two ways. First,
+   * directly by an index into the container, and second, using an iterator.
+   * This method is used in the iterator method and is typically used in a
+   * for-loop to run through the QueueDiscs
+   *
+   * \code
+   *   QueueDiscContainer::ConstIterator i;
+   *   for (i = container.Begin (); i != container.End (); ++i)
+   *     {
+   *       (*i)->method ();  // some QueueDisc method
+   *     }
+   * \endcode
+   *
+   * \returns a const iterator which refers to the first QueueDisc in the container.
+   */
+  ConstIterator Begin (void) const;
+
+  /**
+   * \brief Get a const iterator which indicates past-the-last QueueDisc in the
+   * container.
+   *
+   * QueueDiscs can be retrieved from the container in two ways. First,
+   * directly by an index into the container, and second, using an iterator.
+   * This method is used in the iterator method and is typically used in a
+   * for-loop to run through the QueueDiscs
+   *
+   * \code
+   *   QueueDiscContainer::ConstIterator i;
+   *   for (i = container.Begin (); i != container.End (); ++i)
+   *     {
+   *       (*i)->method ();  // some QueueDisc method
+   *     }
+   * \endcode
+   *
+   * \returns a const iterator which indicates an ending condition for a loop.
+   */
+  ConstIterator End (void) const;
+
+  /**
+   * \brief Get the number of Ptr<QueueDisc> stored in this container.
+   *
+   * QueueDiscs can be retrieved from the container in two ways. First,
+   * directly by an index into the container, and second, using an iterator.
+   * This method is used in the direct method and is typically used to
+   * define an ending condition in a for-loop that runs through the stored
+   * QueueDiscs
+   *
+   * \code
+   *   uint32_t nQueueDiscs = container.GetN ();
+   *   for (uint32_t i = 0 i < nQueueDiscs; ++i)
+   *     {
+   *       Ptr<QueueDisc> p = container.Get (i)
+   *       i->method ();  // some QueueDisc method
+   *     }
+   * \endcode
+   *
+   * \returns the number of Ptr<QueueDisc> stored in this container.
+   */
+  uint32_t GetN (void) const;
+
+  /**
+   * \brief Get the Ptr<QueueDisc> stored in this container at a given
+   * index.
+   *
+   * QueueDiscs can be retrieved from the container in two ways. First,
+   * directly by an index into the container, and second, using an iterator.
+   * This method is used in the direct method and is used to retrieve the
+   * indexed Ptr<QueueDisc>.
+   *
+   * \code
+   *   uint32_t nQueueDiscs = container.GetN ();
+   *   for (uint32_t i = 0 i < nQueueDiscs; ++i)
+   *     {
+   *       Ptr<QueueDisc> p = container.Get (i)
+   *       i->method ();  // some QueueDisc method
+   *     }
+   * \endcode
+   *
+   * \param i the index of the requested queue disc pointer.
+   * \returns the requested queue disc pointer.
+   */
+  Ptr<QueueDisc> Get (uint32_t i) const;
+
+  /**
+   * \brief Append the contents of another QueueDiscContainer to the end of
+   * this container.
+   *
+   * \param other The QueueDiscContainer to append.
+   */
+  void Add (QueueDiscContainer other);
+
+  /**
+   * \brief Append a single Ptr<QueueDisc> to this container.
+   *
+   * \param qDisc The Ptr<QueueDisc> to append.
+   */
+  void Add (Ptr<QueueDisc> qDisc);
+
+private:
+  std::vector<Ptr<QueueDisc> > m_queueDiscs; //!< QueueDiscs smart pointers
+};
+
+} // namespace ns3
+
+#endif /* QUEUE_DISC_CONTAINER_H */
diff -Naur ns-3.24.1/src/traffic-control/helper/traffic-control-helper.cc ns-3.25/src/traffic-control/helper/traffic-control-helper.cc
--- ns-3.24.1/src/traffic-control/helper/traffic-control-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/helper/traffic-control-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,393 @@
+/* -*- 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: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/queue-disc.h"
+#include "ns3/uinteger.h"
+#include "ns3/pointer.h"
+#include "ns3/traffic-control-layer.h"
+#include "traffic-control-helper.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TrafficControlHelper");
+
+QueueDiscFactory::QueueDiscFactory (ObjectFactory factory)
+  : m_queueDiscFactory (factory)
+{
+}
+
+void
+QueueDiscFactory::AddInternalQueue (ObjectFactory factory)
+{
+  m_internalQueuesFactory.push_back (factory);
+}
+
+void
+QueueDiscFactory::AddPacketFilter (ObjectFactory factory)
+{
+  m_packetFiltersFactory.push_back (factory);
+}
+
+uint16_t
+QueueDiscFactory::AddQueueDiscClass (ObjectFactory factory)
+{
+  m_queueDiscClassesFactory.push_back (factory);
+  return m_queueDiscClassesFactory.size () - 1;
+}
+
+void
+QueueDiscFactory::SetChildQueueDisc (uint16_t classId, uint16_t handle)
+{
+  NS_ABORT_MSG_IF (classId >= m_queueDiscClassesFactory.size (),
+                   "Cannot attach a queue disc to a non existing class");
+  m_classIdChildHandleMap[classId] = handle;
+}
+
+Ptr<QueueDisc>
+QueueDiscFactory::CreateQueueDisc (const std::vector<Ptr<QueueDisc> > & queueDiscs)
+{
+  // create the queue disc
+  Ptr<QueueDisc> qd = m_queueDiscFactory.Create<QueueDisc> ();
+
+  // create and add the internal queues
+  for (std::vector<ObjectFactory>::iterator i = m_internalQueuesFactory.begin ();
+       i != m_internalQueuesFactory.end (); i++ )
+    {
+      qd->AddInternalQueue (i->Create<Queue> ());
+    }
+
+  // create and add the packet filters
+  for (std::vector<ObjectFactory>::iterator i = m_packetFiltersFactory.begin ();
+       i != m_packetFiltersFactory.end (); i++ )
+    {
+      qd->AddPacketFilter (i->Create<PacketFilter> ());
+    }
+
+  // create and add the queue disc classes
+  for (uint32_t i = 0; i < m_queueDiscClassesFactory.size (); i++)
+    {
+      // the class ID is given by the index i of the vector
+      NS_ABORT_MSG_IF (m_classIdChildHandleMap.find (i) == m_classIdChildHandleMap.end (),
+                       "Cannot create a queue disc class with no attached queue disc");
+
+      uint16_t handle = m_classIdChildHandleMap[i];
+      NS_ABORT_MSG_IF (handle >= queueDiscs.size () || queueDiscs[handle] == 0, 
+                       "A queue disc with handle " << handle << " has not been created yet");
+
+      m_queueDiscClassesFactory[i].Set ("QueueDisc", PointerValue (queueDiscs[handle]));
+      qd->AddQueueDiscClass (m_queueDiscClassesFactory[i].Create<QueueDiscClass> ());
+    }
+
+  return qd;
+}
+
+
+TrafficControlHelper::TrafficControlHelper ()
+{
+}
+
+TrafficControlHelper
+TrafficControlHelper::Default (void)
+{
+  TrafficControlHelper helper;
+  uint16_t handle = helper.SetRootQueueDisc ("ns3::PfifoFastQueueDisc");
+  helper.AddInternalQueues (handle, 3, "ns3::DropTailQueue", "MaxPackets", UintegerValue (1000));
+  helper.AddPacketFilter (handle, "ns3::PfifoFastIpv4PacketFilter");
+  helper.AddPacketFilter (handle, "ns3::PfifoFastIpv6PacketFilter");
+  return helper;
+}
+
+uint16_t
+TrafficControlHelper::SetRootQueueDisc (std::string type,
+                                        std::string n01, const AttributeValue& v01,
+                                        std::string n02, const AttributeValue& v02,
+                                        std::string n03, const AttributeValue& v03,
+                                        std::string n04, const AttributeValue& v04,
+                                        std::string n05, const AttributeValue& v05,
+                                        std::string n06, const AttributeValue& v06,
+                                        std::string n07, const AttributeValue& v07,
+                                        std::string n08, const AttributeValue& v08,
+                                        std::string n09, const AttributeValue& v09,
+                                        std::string n10, const AttributeValue& v10,
+                                        std::string n11, const AttributeValue& v11,
+                                        std::string n12, const AttributeValue& v12,
+                                        std::string n13, const AttributeValue& v13,
+                                        std::string n14, const AttributeValue& v14,
+                                        std::string n15, const AttributeValue& v15)
+{
+  NS_ABORT_MSG_UNLESS (m_queueDiscFactory.empty (), "A root queue disc has been already added to this factory");
+
+  ObjectFactory factory;
+  factory.SetTypeId (type);
+  factory.Set (n01, v01);
+  factory.Set (n02, v02);
+  factory.Set (n03, v03);
+  factory.Set (n04, v04);
+  factory.Set (n05, v05);
+  factory.Set (n06, v06);
+  factory.Set (n07, v07);
+  factory.Set (n08, v08);
+  factory.Set (n09, v09);
+  factory.Set (n10, v10);
+  factory.Set (n11, v11);
+  factory.Set (n12, v12);
+  factory.Set (n13, v13);
+  factory.Set (n14, v14);
+  factory.Set (n15, v15);
+
+  m_queueDiscFactory.push_back (QueueDiscFactory (factory));
+  return 0;
+}
+
+void
+TrafficControlHelper::AddInternalQueues (uint16_t handle, uint16_t count, std::string type,
+                                         std::string n01, const AttributeValue& v01,
+                                         std::string n02, const AttributeValue& v02,
+                                         std::string n03, const AttributeValue& v03,
+                                         std::string n04, const AttributeValue& v04,
+                                         std::string n05, const AttributeValue& v05,
+                                         std::string n06, const AttributeValue& v06,
+                                         std::string n07, const AttributeValue& v07,
+                                         std::string n08, const AttributeValue& v08)
+{
+  NS_ABORT_MSG_IF (handle >= m_queueDiscFactory.size (), "A queue disc with handle "
+                   << handle << " does not exist");
+
+  ObjectFactory factory;
+  factory.SetTypeId (type);
+  factory.Set (n01, v01);
+  factory.Set (n02, v02);
+  factory.Set (n03, v03);
+  factory.Set (n04, v04);
+  factory.Set (n05, v05);
+  factory.Set (n06, v06);
+  factory.Set (n07, v07);
+  factory.Set (n08, v08);
+
+  for (int i = 0; i < count; i++)
+    {
+      m_queueDiscFactory[handle].AddInternalQueue (factory);
+    }
+}
+
+void
+TrafficControlHelper::AddPacketFilter (uint16_t handle, std::string type,
+                                       std::string n01, const AttributeValue& v01,
+                                       std::string n02, const AttributeValue& v02,
+                                       std::string n03, const AttributeValue& v03,
+                                       std::string n04, const AttributeValue& v04,
+                                       std::string n05, const AttributeValue& v05,
+                                       std::string n06, const AttributeValue& v06,
+                                       std::string n07, const AttributeValue& v07,
+                                       std::string n08, const AttributeValue& v08)
+{
+  NS_ABORT_MSG_IF (handle >= m_queueDiscFactory.size (), "A queue disc with handle "
+                   << handle << " does not exist");
+
+  ObjectFactory factory;
+  factory.SetTypeId (type);
+  factory.Set (n01, v01);
+  factory.Set (n02, v02);
+  factory.Set (n03, v03);
+  factory.Set (n04, v04);
+  factory.Set (n05, v05);
+  factory.Set (n06, v06);
+  factory.Set (n07, v07);
+  factory.Set (n08, v08);
+
+  m_queueDiscFactory[handle].AddPacketFilter (factory);
+}
+
+TrafficControlHelper::ClassIdList
+TrafficControlHelper::AddQueueDiscClasses (uint16_t handle, uint16_t count, std::string type,
+                                           std::string n01, const AttributeValue& v01,
+                                           std::string n02, const AttributeValue& v02,
+                                           std::string n03, const AttributeValue& v03,
+                                           std::string n04, const AttributeValue& v04,
+                                           std::string n05, const AttributeValue& v05,
+                                           std::string n06, const AttributeValue& v06,
+                                           std::string n07, const AttributeValue& v07,
+                                           std::string n08, const AttributeValue& v08)
+{
+  NS_ABORT_MSG_IF (handle >= m_queueDiscFactory.size (), "A queue disc with handle "
+                   << handle << " does not exist");
+
+  ObjectFactory factory;
+  factory.SetTypeId (type);
+  factory.Set (n01, v01);
+  factory.Set (n02, v02);
+  factory.Set (n03, v03);
+  factory.Set (n04, v04);
+  factory.Set (n05, v05);
+  factory.Set (n06, v06);
+  factory.Set (n07, v07);
+  factory.Set (n08, v08);
+
+  ClassIdList list;
+  uint16_t classId;
+
+  for (int i = 0; i < count; i++)
+    {
+      classId = m_queueDiscFactory[handle].AddQueueDiscClass (factory);
+      list.push_back (classId);
+    }
+  return list;
+}
+
+uint16_t
+TrafficControlHelper::AddChildQueueDisc (uint16_t handle, uint16_t classId, std::string type,
+                                         std::string n01, const AttributeValue& v01,
+                                         std::string n02, const AttributeValue& v02,
+                                         std::string n03, const AttributeValue& v03,
+                                         std::string n04, const AttributeValue& v04,
+                                         std::string n05, const AttributeValue& v05,
+                                         std::string n06, const AttributeValue& v06,
+                                         std::string n07, const AttributeValue& v07,
+                                         std::string n08, const AttributeValue& v08,
+                                         std::string n09, const AttributeValue& v09,
+                                         std::string n10, const AttributeValue& v10,
+                                         std::string n11, const AttributeValue& v11,
+                                         std::string n12, const AttributeValue& v12,
+                                         std::string n13, const AttributeValue& v13,
+                                         std::string n14, const AttributeValue& v14,
+                                         std::string n15, const AttributeValue& v15)
+{
+  NS_ABORT_MSG_IF (handle >= m_queueDiscFactory.size (), "A queue disc with handle "
+                   << handle << " does not exist");
+
+  ObjectFactory factory;
+  factory.SetTypeId (type);
+  factory.Set (n01, v01);
+  factory.Set (n02, v02);
+  factory.Set (n03, v03);
+  factory.Set (n04, v04);
+  factory.Set (n05, v05);
+  factory.Set (n06, v06);
+  factory.Set (n07, v07);
+  factory.Set (n08, v08);
+  factory.Set (n09, v09);
+  factory.Set (n10, v10);
+  factory.Set (n11, v11);
+  factory.Set (n12, v12);
+  factory.Set (n13, v13);
+  factory.Set (n14, v14);
+  factory.Set (n15, v15);
+
+  uint16_t childHandle = m_queueDiscFactory.size ();
+  m_queueDiscFactory.push_back (QueueDiscFactory (factory));
+  m_queueDiscFactory[handle].SetChildQueueDisc (classId, childHandle);
+
+  return childHandle;
+}
+
+TrafficControlHelper::HandleList
+TrafficControlHelper::AddChildQueueDiscs (uint16_t handle, const TrafficControlHelper::ClassIdList &classes,
+                                          std::string type,
+                                          std::string n01, const AttributeValue& v01,
+                                          std::string n02, const AttributeValue& v02,
+                                          std::string n03, const AttributeValue& v03,
+                                          std::string n04, const AttributeValue& v04,
+                                          std::string n05, const AttributeValue& v05,
+                                          std::string n06, const AttributeValue& v06,
+                                          std::string n07, const AttributeValue& v07,
+                                          std::string n08, const AttributeValue& v08,
+                                          std::string n09, const AttributeValue& v09,
+                                          std::string n10, const AttributeValue& v10,
+                                          std::string n11, const AttributeValue& v11,
+                                          std::string n12, const AttributeValue& v12,
+                                          std::string n13, const AttributeValue& v13,
+                                          std::string n14, const AttributeValue& v14,
+                                          std::string n15, const AttributeValue& v15)
+{
+  HandleList list;
+  for (ClassIdList::const_iterator c = classes.begin (); c != classes.end (); c++)
+    {
+      uint16_t childHandle = AddChildQueueDisc (handle, *c, type, n01, v01, n02, v02, n03, v03,
+                                                n04, v04, n05, v05, n06, v06, n07, v07, n08, v08, n09, v09,
+                                                n10, v10, n11, v11, n12, v12, n13, v13, n14, v14, n15, v15);
+      list.push_back (childHandle);
+    }
+  return list;
+}
+
+QueueDiscContainer
+TrafficControlHelper::Install (Ptr<NetDevice> d)
+{
+  QueueDiscContainer container;
+
+  // A TrafficControlLayer object is aggregated by the InternetStackHelper, but check
+  // anyway because a queue disc has no effect without a TrafficControlLayer object
+  Ptr<TrafficControlLayer> tc = d->GetNode ()->GetObject<TrafficControlLayer> ();
+  NS_ASSERT (tc != 0);
+
+  // Start from an empty vector of queue discs
+  m_queueDiscs.clear ();
+  m_queueDiscs.resize (m_queueDiscFactory.size ());
+
+  // Create queue discs (from leaves to root)
+  for (int i = m_queueDiscFactory.size () - 1; i >= 0; i--)
+    {
+      Ptr<QueueDisc> q = m_queueDiscFactory[i].CreateQueueDisc (m_queueDiscs);
+      q->SetNetDevice (d);
+      m_queueDiscs[i] = q;
+      container.Add (q);
+    }
+
+  // Set the root queue disc on the device
+  tc->SetRootQueueDiscOnDevice (d, m_queueDiscs[0]);
+
+  return container;
+}
+
+QueueDiscContainer
+TrafficControlHelper::Install (NetDeviceContainer c)
+{
+  QueueDiscContainer container;
+
+  for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      container.Add (Install (*i));
+    }
+
+  return container;
+}
+
+void
+TrafficControlHelper::Uninstall (Ptr<NetDevice> d)
+{
+  Ptr<TrafficControlLayer> tc = d->GetNode ()->GetObject<TrafficControlLayer> ();
+  NS_ASSERT (tc != 0);
+
+  tc->DeleteRootQueueDiscOnDevice (d);
+}
+
+void
+TrafficControlHelper::Uninstall (NetDeviceContainer c)
+{
+  for (NetDeviceContainer::Iterator i = c.Begin (); i != c.End (); ++i)
+    {
+      Uninstall (*i);
+    }
+}
+
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/helper/traffic-control-helper.h ns-3.25/src/traffic-control/helper/traffic-control-helper.h
--- ns-3.24.1/src/traffic-control/helper/traffic-control-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/helper/traffic-control-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,462 @@
+/* -*- 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: Stefano Avallone <stavallo@unina.it>
+ */
+#ifndef TRAFFIC_CONTROL_HELPER_H
+#define TRAFFIC_CONTROL_HELPER_H
+
+#include <string>
+#include <vector>
+#include <map>
+#include "ns3/object-factory.h"
+#include "ns3/net-device-container.h"
+#include "ns3/queue-disc-container.h"
+
+namespace ns3 {
+
+class QueueDisc;
+
+/**
+ * \ingroup traffic-control
+ *
+ * This class stores object factories required to create a queue disc and all of
+ * its components (packet filters, internal queues, classes).
+ */
+class QueueDiscFactory
+{
+public:
+  /**
+   * \brief Constructor
+   *
+   * \param factory the factory used to create this queue disc
+   */
+  QueueDiscFactory (ObjectFactory factory);
+
+  virtual ~QueueDiscFactory () {}
+
+  /**
+   * \brief Add a factory to create an internal queue
+   *
+   * \param factory the factory used to create an internal queue
+   */
+  void AddInternalQueue (ObjectFactory factory);
+
+  /**
+   * \brief Add a factory to create a packet filter
+   *
+   * \param factory the factory used to create a packet filter
+   */
+  void AddPacketFilter (ObjectFactory factory);
+
+  /**
+   * \brief Add a factory to create a queue disc class
+   *
+   * \param factory the factory used to create a queue disc class
+   * \return the class ID of the created queue disc class
+   */
+  uint16_t AddQueueDiscClass (ObjectFactory factory);
+
+  /**
+   * \brief Set the (child) queue disc to attach to a class
+   *
+   * \param classId the id of the class to attach a child queue disc to
+   * \param handle the handle of the child queue disc to attach to the class
+   */
+  void SetChildQueueDisc (uint16_t classId, uint16_t handle);
+
+  /**
+   * \brief Create a queue disc with the currently stored configuration.
+   *
+   * \param queueDiscs the vector of queue discs held by the helper
+   * \return the created queue disc
+   */
+  Ptr<QueueDisc> CreateQueueDisc (const std::vector<Ptr<QueueDisc> > & queueDiscs);
+
+private:
+  /**
+   * \brief Default constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  QueueDiscFactory ();
+
+  /// Factory to create this queue disc
+  ObjectFactory m_queueDiscFactory;
+  /// Vector of factories to create internal queues
+  std::vector<ObjectFactory> m_internalQueuesFactory;
+  /// Vector of factories to create packet filters
+  std::vector<ObjectFactory> m_packetFiltersFactory;
+  /// Vector of factories to create queue disc classes
+  std::vector<ObjectFactory> m_queueDiscClassesFactory;
+  /// Map storing the associations between class IDs and child queue disc handles
+  std::map<uint16_t, uint16_t> m_classIdChildHandleMap;
+};
+
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief Build a set of QueueDisc objects
+ *
+ * This class can help to create QueueDisc objects and map them to
+ * the corresponding devices. This map is stored at the Traffic Control
+ * layer.
+ */
+class TrafficControlHelper
+{
+public:
+  /**
+   * Create a TrafficControlHelper to make life easier when creating QueueDisc
+   * objects.
+   */
+  TrafficControlHelper ();
+  virtual ~TrafficControlHelper () {}
+
+  /**
+   * \returns a new TrafficControlHelper with a default configuration
+   *
+   * The default configuration is a PfifoFastQueueDisc with three internal queues
+   * of type DropTailQueue and size 1000 packets, and a PfifoFastIpv4PacketFilter.
+   */
+  static TrafficControlHelper Default (void);
+
+  /**
+   * Helper function used to set a root queue disc of the given type and with the
+   * given attributes. To set the InternalQueueList, PacketFilterList and ChildQueueDiscList
+   * attributes, use the AddInternalQueue, AddPacketFilter and AddChildQueueDisc methods.
+   *
+   * \param type the type of queue disc
+   * \param n01 the name of the attribute to set on the queue disc
+   * \param v01 the value of the attribute to set on the queue disc
+   * \param n02 the name of the attribute to set on the queue disc
+   * \param v02 the value of the attribute to set on the queue disc
+   * \param n03 the name of the attribute to set on the queue disc
+   * \param v03 the value of the attribute to set on the queue disc
+   * \param n04 the name of the attribute to set on the queue disc
+   * \param v04 the value of the attribute to set on the queue disc
+   * \param n05 the name of the attribute to set on the queue disc
+   * \param v05 the value of the attribute to set on the queue disc
+   * \param n06 the name of the attribute to set on the queue disc
+   * \param v06 the value of the attribute to set on the queue disc
+   * \param n07 the name of the attribute to set on the queue disc
+   * \param v07 the value of the attribute to set on the queue disc
+   * \param n08 the name of the attribute to set on the queue disc
+   * \param v08 the value of the attribute to set on the queue disc
+   * \param n09 the name of the attribute to set on the queue disc
+   * \param v09 the value of the attribute to set on the queue disc
+   * \param n10 the name of the attribute to set on the queue disc
+   * \param v10 the value of the attribute to set on the queue disc
+   * \param n11 the name of the attribute to set on the queue disc
+   * \param v11 the value of the attribute to set on the queue disc
+   * \param n12 the name of the attribute to set on the queue disc
+   * \param v12 the value of the attribute to set on the queue disc
+   * \param n13 the name of the attribute to set on the queue disc
+   * \param v13 the value of the attribute to set on the queue disc
+   * \param n14 the name of the attribute to set on the queue disc
+   * \param v14 the value of the attribute to set on the queue disc
+   * \param n15 the name of the attribute to set on the queue disc
+   * \param v15 the value of the attribute to set on the queue disc
+   * \return the handle of the root queue disc (zero)
+   */
+  uint16_t SetRootQueueDisc (std::string type,
+                             std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                             std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                             std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                             std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                             std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                             std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                             std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                             std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue (),
+                             std::string n09 = "", const AttributeValue &v09 = EmptyAttributeValue (),
+                             std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue (),
+                             std::string n11 = "", const AttributeValue &v11 = EmptyAttributeValue (),
+                             std::string n12 = "", const AttributeValue &v12 = EmptyAttributeValue (),
+                             std::string n13 = "", const AttributeValue &v13 = EmptyAttributeValue (),
+                             std::string n14 = "", const AttributeValue &v14 = EmptyAttributeValue (),
+                             std::string n15 = "", const AttributeValue &v15 = EmptyAttributeValue ());
+
+  /**
+   * Helper function used to add the given number of internal queues (of the given
+   * type and with the given attributes) to the queue disc having the given handle.
+   *
+   * \param handle the handle of the parent queue disc
+   * \param count the number of queues to add
+   * \param type the type of queue
+   * \param n01 the name of the attribute to set on the queue
+   * \param v01 the value of the attribute to set on the queue
+   * \param n02 the name of the attribute to set on the queue
+   * \param v02 the value of the attribute to set on the queue
+   * \param n03 the name of the attribute to set on the queue
+   * \param v03 the value of the attribute to set on the queue
+   * \param n04 the name of the attribute to set on the queue
+   * \param v04 the value of the attribute to set on the queue
+   * \param n05 the name of the attribute to set on the queue
+   * \param v05 the value of the attribute to set on the queue
+   * \param n06 the name of the attribute to set on the queue
+   * \param v06 the value of the attribute to set on the queue
+   * \param n07 the name of the attribute to set on the queue
+   * \param v07 the value of the attribute to set on the queue
+   * \param n08 the name of the attribute to set on the queue
+   * \param v08 the value of the attribute to set on the queue
+   */
+  void AddInternalQueues (uint16_t handle, uint16_t count, std::string type,
+                          std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                          std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                          std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                          std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                          std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                          std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                          std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                          std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue ());
+
+  /**
+   * Helper function used to add a packet filter (of the given type and with
+   * the given attributes) to the queue disc having the given handle.
+   *
+   * \param handle the handle of the parent queue disc
+   * \param type the type of packet filter
+   * \param n01 the name of the attribute to set on the packet filter
+   * \param v01 the value of the attribute to set on the packet filter
+   * \param n02 the name of the attribute to set on the packet filter
+   * \param v02 the value of the attribute to set on the packet filter
+   * \param n03 the name of the attribute to set on the packet filter
+   * \param v03 the value of the attribute to set on the packet filter
+   * \param n04 the name of the attribute to set on the packet filter
+   * \param v04 the value of the attribute to set on the packet filter
+   * \param n05 the name of the attribute to set on the packet filter
+   * \param v05 the value of the attribute to set on the packet filter
+   * \param n06 the name of the attribute to set on the packet filter
+   * \param v06 the value of the attribute to set on the packet filter
+   * \param n07 the name of the attribute to set on the packet filter
+   * \param v07 the value of the attribute to set on the packet filter
+   * \param n08 the name of the attribute to set on the packet filter
+   * \param v08 the value of the attribute to set on the packet filter
+   */
+  void AddPacketFilter (uint16_t handle, std::string type,
+                        std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                        std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                        std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                        std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                        std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                        std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                        std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                        std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue ());
+
+  typedef std::vector<uint16_t> ClassIdList;
+
+  /**
+   * Helper function used to add the given number of queue disc classes (of the given
+   * type and with the given attributes) to the queue disc having the given handle.
+   *
+   * \param handle the handle of the parent queue disc
+   * \param count the number of queue disc classes to add
+   * \param type the type of queue disc class
+   * \param n01 the name of the attribute to set on the queue disc class
+   * \param v01 the value of the attribute to set on the queue disc class
+   * \param n02 the name of the attribute to set on the queue disc class
+   * \param v02 the value of the attribute to set on the queue disc class
+   * \param n03 the name of the attribute to set on the queue disc class
+   * \param v03 the value of the attribute to set on the queue disc class
+   * \param n04 the name of the attribute to set on the queue disc class
+   * \param v04 the value of the attribute to set on the queue disc class
+   * \param n05 the name of the attribute to set on the queue disc class
+   * \param v05 the value of the attribute to set on the queue disc class
+   * \param n06 the name of the attribute to set on the queue disc class
+   * \param v06 the value of the attribute to set on the queue disc class
+   * \param n07 the name of the attribute to set on the queue disc class
+   * \param v07 the value of the attribute to set on the queue disc class
+   * \param n08 the name of the attribute to set on the queue disc class
+   * \param v08 the value of the attribute to set on the queue disc class
+   * \return the list of class IDs
+   */
+  ClassIdList AddQueueDiscClasses (uint16_t handle, uint16_t count, std::string type,
+                                   std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                                   std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                                   std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                                   std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                                   std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                                   std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                                   std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                                   std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue ());
+
+  /**
+   * Helper function used to attach a child queue disc (of the given type and with
+   * the given attributes) to a given class (included in the queue disc
+   * having the given handle).
+   *
+   * \param handle the handle of the parent queue disc
+   * \param classId the class ID of the class to attach the queue disc to
+   * \param type the type of queue disc
+   * \param n01 the name of the attribute to set on the queue disc
+   * \param v01 the value of the attribute to set on the queue disc
+   * \param n02 the name of the attribute to set on the queue disc
+   * \param v02 the value of the attribute to set on the queue disc
+   * \param n03 the name of the attribute to set on the queue disc
+   * \param v03 the value of the attribute to set on the queue disc
+   * \param n04 the name of the attribute to set on the queue disc
+   * \param v04 the value of the attribute to set on the queue disc
+   * \param n05 the name of the attribute to set on the queue disc
+   * \param v05 the value of the attribute to set on the queue disc
+   * \param n06 the name of the attribute to set on the queue disc
+   * \param v06 the value of the attribute to set on the queue disc
+   * \param n07 the name of the attribute to set on the queue disc
+   * \param v07 the value of the attribute to set on the queue disc
+   * \param n08 the name of the attribute to set on the queue disc
+   * \param v08 the value of the attribute to set on the queue disc
+   * \param n09 the name of the attribute to set on the queue disc
+   * \param v09 the value of the attribute to set on the queue disc
+   * \param n10 the name of the attribute to set on the queue disc
+   * \param v10 the value of the attribute to set on the queue disc
+   * \param n11 the name of the attribute to set on the queue disc
+   * \param v11 the value of the attribute to set on the queue disc
+   * \param n12 the name of the attribute to set on the queue disc
+   * \param v12 the value of the attribute to set on the queue disc
+   * \param n13 the name of the attribute to set on the queue disc
+   * \param v13 the value of the attribute to set on the queue disc
+   * \param n14 the name of the attribute to set on the queue disc
+   * \param v14 the value of the attribute to set on the queue disc
+   * \param n15 the name of the attribute to set on the queue disc
+   * \param v15 the value of the attribute to set on the queue disc
+   * \return the handle of the created child queue disc
+   */
+  uint16_t AddChildQueueDisc (uint16_t handle, uint16_t classId, std::string type,
+                              std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                              std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                              std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                              std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                              std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                              std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                              std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                              std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue (),
+                              std::string n09 = "", const AttributeValue &v09 = EmptyAttributeValue (),
+                              std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue (),
+                              std::string n11 = "", const AttributeValue &v11 = EmptyAttributeValue (),
+                              std::string n12 = "", const AttributeValue &v12 = EmptyAttributeValue (),
+                              std::string n13 = "", const AttributeValue &v13 = EmptyAttributeValue (),
+                              std::string n14 = "", const AttributeValue &v14 = EmptyAttributeValue (),
+                              std::string n15 = "", const AttributeValue &v15 = EmptyAttributeValue ());
+
+  typedef std::vector<uint16_t> HandleList;
+
+  /**
+   * Helper function used to attach a child queue disc (of the given type and with
+   * the given attributes) to each of the given classes (included in the queue disc
+   * having the given handle).
+   *
+   * \param handle the handle of the parent queue disc
+   * \param classes the class IDs of the classes to attach a queue disc to
+   * \param type the type of queue disc
+   * \param n01 the name of the attribute to set on the queue disc
+   * \param v01 the value of the attribute to set on the queue disc
+   * \param n02 the name of the attribute to set on the queue disc
+   * \param v02 the value of the attribute to set on the queue disc
+   * \param n03 the name of the attribute to set on the queue disc
+   * \param v03 the value of the attribute to set on the queue disc
+   * \param n04 the name of the attribute to set on the queue disc
+   * \param v04 the value of the attribute to set on the queue disc
+   * \param n05 the name of the attribute to set on the queue disc
+   * \param v05 the value of the attribute to set on the queue disc
+   * \param n06 the name of the attribute to set on the queue disc
+   * \param v06 the value of the attribute to set on the queue disc
+   * \param n07 the name of the attribute to set on the queue disc
+   * \param v07 the value of the attribute to set on the queue disc
+   * \param n08 the name of the attribute to set on the queue disc
+   * \param v08 the value of the attribute to set on the queue disc
+   * \param n09 the name of the attribute to set on the queue disc
+   * \param v09 the value of the attribute to set on the queue disc
+   * \param n10 the name of the attribute to set on the queue disc
+   * \param v10 the value of the attribute to set on the queue disc
+   * \param n11 the name of the attribute to set on the queue disc
+   * \param v11 the value of the attribute to set on the queue disc
+   * \param n12 the name of the attribute to set on the queue disc
+   * \param v12 the value of the attribute to set on the queue disc
+   * \param n13 the name of the attribute to set on the queue disc
+   * \param v13 the value of the attribute to set on the queue disc
+   * \param n14 the name of the attribute to set on the queue disc
+   * \param v14 the value of the attribute to set on the queue disc
+   * \param n15 the name of the attribute to set on the queue disc
+   * \param v15 the value of the attribute to set on the queue disc
+   * \return the list of handles of the created child queue discs
+   */
+  HandleList AddChildQueueDiscs (uint16_t handle, const ClassIdList &classes, std::string type,
+                                 std::string n01 = "", const AttributeValue &v01 = EmptyAttributeValue (),
+                                 std::string n02 = "", const AttributeValue &v02 = EmptyAttributeValue (),
+                                 std::string n03 = "", const AttributeValue &v03 = EmptyAttributeValue (),
+                                 std::string n04 = "", const AttributeValue &v04 = EmptyAttributeValue (),
+                                 std::string n05 = "", const AttributeValue &v05 = EmptyAttributeValue (),
+                                 std::string n06 = "", const AttributeValue &v06 = EmptyAttributeValue (),
+                                 std::string n07 = "", const AttributeValue &v07 = EmptyAttributeValue (),
+                                 std::string n08 = "", const AttributeValue &v08 = EmptyAttributeValue (),
+                                 std::string n09 = "", const AttributeValue &v09 = EmptyAttributeValue (),
+                                 std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue (),
+                                 std::string n11 = "", const AttributeValue &v11 = EmptyAttributeValue (),
+                                 std::string n12 = "", const AttributeValue &v12 = EmptyAttributeValue (),
+                                 std::string n13 = "", const AttributeValue &v13 = EmptyAttributeValue (),
+                                 std::string n14 = "", const AttributeValue &v14 = EmptyAttributeValue (),
+                                 std::string n15 = "", const AttributeValue &v15 = EmptyAttributeValue ());
+
+  /**
+   * \param c set of devices
+   * \returns a QueueDisc container with the queue discs installed on the devices
+   *
+   * This method creates a QueueDisc object of the type and with the
+   * attributes configured by TrafficControlHelper::SetQueueDisc for
+   * each device in the container. Then, stores the mapping between a
+   * device and the associated queue disc into the traffic control layer
+   * of the corresponding node.
+   */
+  QueueDiscContainer Install (NetDeviceContainer c);
+
+  /**
+   * \param d device
+   * \returns a QueueDisc container with the queue disc installed on the device
+   *
+   * This method creates a QueueDisc object of the type and with the
+   * attributes configured by TrafficControlHelper::SetQueueDisc for
+   * the given device. Then, stores the mapping between the device
+   * and the associated queue disc into the traffic control layer
+   * of the corresponding node.
+   */
+  QueueDiscContainer Install (Ptr<NetDevice> d);
+
+  /**
+   * \param c set of devices
+   *
+   * This method removes the root queue discs (and associated filters, classes
+   * and queues) installed on the given devices.
+   */
+  void Uninstall (NetDeviceContainer c);
+
+  /**
+   * \param d device
+   *
+   * This method removes the root queue disc (and associated filters, classes
+   * and queues) installed on the given device.
+   */
+  void Uninstall (Ptr<NetDevice> d);
+
+private:
+  /// QueueDisc factory, stores the configuration of all the queue discs
+  std::vector<QueueDiscFactory> m_queueDiscFactory;
+  /// Vector of all the created queue discs
+  std::vector<Ptr<QueueDisc> > m_queueDiscs;
+};
+
+} // namespace ns3
+
+#endif /* TRAFFIC_CONTROL_HELPER_H */
diff -Naur ns-3.24.1/src/traffic-control/model/codel-queue-disc.cc ns-3.25/src/traffic-control/model/codel-queue-disc.cc
--- ns-3.24.1/src/traffic-control/model/codel-queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/codel-queue-disc.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) 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-disc.h"
+#include "ns3/object-factory.h"
+#include "ns3/drop-tail-queue.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("CoDelQueueDisc");
+
+/**
+ * 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 (CoDelQueueDisc);
+
+TypeId CoDelQueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::CoDelQueueDisc")
+    .SetParent<QueueDisc> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<CoDelQueueDisc> ()
+    .AddAttribute ("Mode",
+                   "Whether to use Bytes (see MaxBytes) or Packets (see MaxPackets) as the maximum queue size metric.",
+                   EnumValue (Queue::QUEUE_MODE_BYTES),
+                   MakeEnumAccessor (&CoDelQueueDisc::SetMode),
+                   MakeEnumChecker (Queue::QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
+                                    Queue::QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
+    .AddAttribute ("MaxPackets",
+                   "The maximum number of packets accepted by this CoDelQueueDisc.",
+                   UintegerValue (DEFAULT_CODEL_LIMIT),
+                   MakeUintegerAccessor (&CoDelQueueDisc::m_maxPackets),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MaxBytes",
+                   "The maximum number of bytes accepted by this CoDelQueueDisc.",
+                   UintegerValue (1500 * DEFAULT_CODEL_LIMIT),
+                   MakeUintegerAccessor (&CoDelQueueDisc::m_maxBytes),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("MinBytes",
+                   "The CoDel algorithm minbytes parameter.",
+                   UintegerValue (1500),
+                   MakeUintegerAccessor (&CoDelQueueDisc::m_minBytes),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Interval",
+                   "The CoDel algorithm interval",
+                   StringValue ("100ms"),
+                   MakeTimeAccessor (&CoDelQueueDisc::m_interval),
+                   MakeTimeChecker ())
+    .AddAttribute ("Target",
+                   "The CoDel algorithm target queue delay",
+                   StringValue ("5ms"),
+                   MakeTimeAccessor (&CoDelQueueDisc::m_target),
+                   MakeTimeChecker ())
+    .AddTraceSource ("Count",
+                     "CoDel count",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_count),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("DropCount",
+                     "CoDel drop count",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_dropCount),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("LastCount",
+                     "CoDel lastcount",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_lastCount),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("DropState",
+                     "Dropping state",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_dropping),
+                     "ns3::TracedValueCallback::Bool")
+    .AddTraceSource ("Sojourn",
+                     "Time in the queue",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_sojourn),
+                     "ns3::Time::TracedValueCallback")
+    .AddTraceSource ("DropNext",
+                     "Time until next packet drop",
+                     MakeTraceSourceAccessor (&CoDelQueueDisc::m_dropNext),
+                     "ns3::TracedValueCallback::Uint32")
+  ;
+
+  return tid;
+}
+
+CoDelQueueDisc::CoDelQueueDisc ()
+  : QueueDisc (),
+    m_maxBytes (),
+    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);
+}
+
+CoDelQueueDisc::~CoDelQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+CoDelQueueDisc::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
+CoDelQueueDisc::ControlLaw (uint32_t t)
+{
+  NS_LOG_FUNCTION (this);
+  return t + ReciprocalDivide (Time2CoDel (m_interval), m_recInvSqrt << REC_INV_SQRT_SHIFT);
+}
+
+void
+CoDelQueueDisc::SetMode (Queue::QueueMode mode)
+{
+  NS_LOG_FUNCTION (mode);
+  m_mode = mode;
+}
+
+Queue::QueueMode
+CoDelQueueDisc::GetMode (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_mode;
+}
+
+bool
+CoDelQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+  Ptr<Packet> p = item->GetPacket ();
+
+  if (m_mode == Queue::QUEUE_MODE_PACKETS && (GetInternalQueue (0)->GetNPackets () + 1 > m_maxPackets))
+    {
+      NS_LOG_LOGIC ("Queue full (at max packets) -- droppping pkt");
+      Drop (item);
+      ++m_dropOverLimit;
+      return false;
+    }
+
+  if (m_mode == Queue::QUEUE_MODE_BYTES && (GetInternalQueue (0)->GetNBytes () + item->GetPacketSize () > m_maxBytes))
+    {
+      NS_LOG_LOGIC ("Queue full (packet would exceed max bytes) -- droppping pkt");
+      Drop (item);
+      ++m_dropOverLimit;
+      return false;
+    }
+
+  // Tag packet with current time for DoDequeue() to compute sojourn time
+  CoDelTimestampTag tag;
+  p->AddPacketTag (tag);
+  
+  GetInternalQueue (0)->Enqueue (item);
+
+  NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
+  NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
+
+  return true;
+}
+
+bool
+CoDelQueueDisc::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))
+      || GetInternalQueue (0)->GetNBytes () < 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<QueueDiscItem>
+CoDelQueueDisc::DoDequeue (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (GetInternalQueue (0)->IsEmpty ())
+    {
+      // 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<QueueDiscItem> item = StaticCast<QueueDiscItem> (GetInternalQueue (0)->Dequeue ());
+  Ptr<Packet> p = item->GetPacket ();
+
+  NS_LOG_LOGIC ("Popped " << item);
+  NS_LOG_LOGIC ("Number packets remaining " << GetInternalQueue (0)->GetNPackets ());
+  NS_LOG_LOGIC ("Number bytes remaining " << GetInternalQueue (0)->GetNBytes ());
+
+  // 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 (item);
+
+              ++m_dropCount;
+              ++m_count;
+              NewtonStep ();
+              if (GetInternalQueue (0)->IsEmpty ())
+                {
+                  m_dropping = false;
+                  NS_LOG_LOGIC ("Queue empty");
+                  ++m_states;
+                  return 0;
+                }
+              item = StaticCast<QueueDiscItem> (GetInternalQueue (0)->Dequeue ());
+              p = item ->GetPacket ();
+
+              NS_LOG_LOGIC ("Popped " << item);
+              NS_LOG_LOGIC ("Number packets remaining " << GetInternalQueue (0)->GetNPackets ());
+              NS_LOG_LOGIC ("Number bytes remaining " << GetInternalQueue (0)->GetNBytes ());
+
+              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 (item);
+
+          if (GetInternalQueue (0)->IsEmpty ())
+            {
+              m_dropping = false;
+              okToDrop = false;
+              NS_LOG_LOGIC ("Queue empty");
+              ++m_states;
+            }
+          else
+            {
+              item = StaticCast<QueueDiscItem> (GetInternalQueue (0)->Dequeue ());
+              p = item->GetPacket ();
+
+              NS_LOG_LOGIC ("Popped " << item);
+              NS_LOG_LOGIC ("Number packets remaining " << GetInternalQueue (0)->GetNPackets ());
+              NS_LOG_LOGIC ("Number bytes remaining " << GetInternalQueue (0)->GetNBytes ());
+
+              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 item;
+}
+
+uint32_t
+CoDelQueueDisc::GetQueueSize (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      return GetInternalQueue (0)->GetNBytes ();
+    }
+  else if (GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      return GetInternalQueue (0)->GetNPackets ();
+    }
+  else
+    {
+      NS_ABORT_MSG ("Unknown mode.");
+    }
+}
+
+uint32_t
+CoDelQueueDisc::GetDropOverLimit (void)
+{
+  return m_dropOverLimit;
+}
+
+uint32_t
+CoDelQueueDisc::GetDropCount (void)
+{
+  return m_dropCount;
+}
+
+Time
+CoDelQueueDisc::GetTarget (void)
+{
+  return m_target;
+}
+
+Time
+CoDelQueueDisc::GetInterval (void)
+{
+  return m_interval;
+}
+
+uint32_t
+CoDelQueueDisc::GetDropNext (void)
+{
+  return m_dropNext;
+}
+
+Ptr<const QueueDiscItem>
+CoDelQueueDisc::DoPeek (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  if (GetInternalQueue (0)->IsEmpty ())
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
+  Ptr<const QueueDiscItem> item = StaticCast<const QueueDiscItem> (GetInternalQueue (0)->Peek ());
+
+  NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
+  NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
+
+  return item;
+}
+
+bool
+CoDelQueueDisc::CoDelTimeAfter (uint32_t a, uint32_t b)
+{
+  return  ((int)(a) - (int)(b) > 0);
+}
+
+bool
+CoDelQueueDisc::CoDelTimeAfterEq (uint32_t a, uint32_t b)
+{
+  return ((int)(a) - (int)(b) >= 0);
+}
+
+bool
+CoDelQueueDisc::CoDelTimeBefore (uint32_t a, uint32_t b)
+{
+  return  ((int)(a) - (int)(b) < 0);
+}
+
+bool
+CoDelQueueDisc::CoDelTimeBeforeEq (uint32_t a, uint32_t b)
+{
+  return ((int)(a) - (int)(b) <= 0);
+}
+
+uint32_t
+CoDelQueueDisc::Time2CoDel (Time t)
+{
+  return (t.GetNanoSeconds () >> CODEL_SHIFT);
+}
+
+bool
+CoDelQueueDisc::CheckConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetNQueueDiscClasses () > 0)
+    {
+      NS_LOG_ERROR ("CoDelQueueDisc cannot have classes");
+      return false;
+    }
+
+  if (GetNPacketFilters () > 0)
+    {
+      NS_LOG_ERROR ("CoDelQueueDisc cannot have packet filters");
+      return false;
+    }
+
+  if (GetNInternalQueues () == 0)
+    {
+      // create a DropTail queue
+      Ptr<Queue> queue = CreateObjectWithAttributes<DropTailQueue> ("Mode", EnumValue (m_mode));
+      if (m_mode == Queue::QUEUE_MODE_PACKETS)
+        {
+          queue->SetMaxPackets (m_maxPackets);
+        }
+      else
+        {
+          queue->SetMaxBytes (m_maxBytes);
+        }
+      AddInternalQueue (queue);
+    }
+
+  if (GetNInternalQueues () != 1)
+    {
+      NS_LOG_ERROR ("CoDelQueueDisc needs 1 internal queue");
+      return false;
+    }
+
+  if (GetInternalQueue (0)->GetMode () != m_mode)
+    {
+      NS_LOG_ERROR ("The mode of the provided queue does not match the mode set on the CoDelQueueDisc");
+      return false;
+    }
+
+  if ((m_mode ==  Queue::QUEUE_MODE_PACKETS && GetInternalQueue (0)->GetMaxPackets () < m_maxPackets) ||
+      (m_mode ==  Queue::QUEUE_MODE_BYTES && GetInternalQueue (0)->GetMaxBytes () < m_maxBytes))
+    {
+      NS_LOG_ERROR ("The size of the internal queue is less than the queue disc limit");
+      return false;
+    }
+
+  return true;
+}
+
+void
+CoDelQueueDisc::InitializeParams (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+} // namespace ns3
+
diff -Naur ns-3.24.1/src/traffic-control/model/codel-queue-disc.h ns-3.25/src/traffic-control/model/codel-queue-disc.h
--- ns-3.24.1/src/traffic-control/model/codel-queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/codel-queue-disc.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,251 @@
+/* -*- 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 "ns3/packet.h"
+#include "ns3/queue-disc.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 CoDelQueueDiscNewtonStepTest;  // Forward declaration for unit test
+class CoDelQueueDiscControlLawTest;  // 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 traffic-control
+ *
+ * \brief A CoDel packet queue disc
+ */
+
+class CoDelQueueDisc : public QueueDisc
+{
+public:
+  /**
+   * Get the type ID.
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief CoDelQueueDisc Constructor
+   *
+   * Creates a CoDel queue
+   */
+  CoDelQueueDisc ();
+
+  virtual ~CoDelQueueDisc ();
+
+  /**
+   * \brief Set the operating mode of this device.
+   *
+   * \param mode The operating mode of this device.
+   */
+  void SetMode (Queue::QueueMode mode);
+
+  /**
+   * \brief Get the encapsulation mode of this device.
+   *
+   * \returns The encapsulation mode of this device.
+   */
+  Queue::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::CoDelQueueDiscNewtonStepTest;  // Test code
+  friend class::CoDelQueueDiscControlLawTest;  // Test code
+  /**
+   * \brief Add a packet to the queue
+   *
+   * \param item The item 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<QueueDiscItem> item);
+
+  /**
+   * \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<QueueDiscItem> DoDequeue (void);
+
+  virtual Ptr<const QueueDiscItem> DoPeek (void) const;
+  virtual bool CheckConfig (void);
+
+  /**
+   * \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);
+
+  virtual void InitializeParams (void);
+
+  uint32_t m_maxPackets;                  //!< Max # of packets accepted by the queue
+  uint32_t m_maxBytes;                    //!< Max # of bytes accepted by the 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
+  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/traffic-control/model/packet-filter.cc ns-3.25/src/traffic-control/model/packet-filter.cc
--- ns-3.24.1/src/traffic-control/model/packet-filter.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/packet-filter.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,63 @@
+/* -*- 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 "ns3/integer.h"
+#include "queue-disc.h"
+#include "packet-filter.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PacketFilter");
+
+NS_OBJECT_ENSURE_REGISTERED (PacketFilter);
+
+TypeId 
+PacketFilter::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PacketFilter")
+    .SetParent<Object> ()
+  ;
+  return tid;
+}
+
+PacketFilter::PacketFilter ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+PacketFilter::~PacketFilter()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+int32_t
+PacketFilter::Classify (Ptr<QueueDiscItem> item) const
+{
+  NS_LOG_FUNCTION (this << item);
+
+  if (!CheckProtocol (item))
+  {
+    NS_LOG_LOGIC ("Unable to classify packets of this protocol");
+    return PF_NO_MATCH;
+  }
+
+  return DoClassify (item);
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/model/packet-filter.h ns-3.25/src/traffic-control/model/packet-filter.h
--- ns-3.24.1/src/traffic-control/model/packet-filter.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/packet-filter.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,69 @@
+/* -*- 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 PACKET_FILTER_H
+#define PACKET_FILTER_H
+
+#include "ns3/object.h"
+
+namespace ns3 {
+
+class QueueDiscItem;
+
+/**
+ * \ingroup traffic-control
+ *
+ * PacketFilter is the abstract base class for filters used by queue discs
+ * to classify packets.
+ */
+class PacketFilter: public Object {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  PacketFilter ();
+  virtual ~PacketFilter ();
+
+  static const int PF_NO_MATCH = -1;
+
+  /**
+   * \return -1 if this filter is not able to classify packets of the same protocol
+   * as item or the item does not match the filter conditions, the configured return
+   * value otherwise.
+   */
+  int32_t Classify (Ptr<QueueDiscItem> item) const;
+
+private:
+  /**
+   * \return true if this filter is able to classify packets of the same protocol as item.
+   */
+  virtual bool CheckProtocol (Ptr<QueueDiscItem> item) const = 0;
+
+  /**
+   * \return -1 if the item does not match the filter conditions, the configured
+   * return value otherwise.
+   */
+  virtual int32_t DoClassify (Ptr<QueueDiscItem> item) const = 0;
+};
+
+} // namespace ns3
+
+#endif /* PACKET_FILTER */
diff -Naur ns-3.24.1/src/traffic-control/model/pfifo-fast-queue-disc.cc ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.cc
--- ns-3.24.1/src/traffic-control/model/pfifo-fast-queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,201 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007, 2014 University of Washington
+ *               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
+ *
+ * Authors:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#include "ns3/log.h"
+#include "ns3/pointer.h"
+#include "ns3/object-factory.h"
+#include "ns3/drop-tail-queue.h"
+#include "pfifo-fast-queue-disc.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("PfifoFastQueueDisc");
+
+NS_OBJECT_ENSURE_REGISTERED (PfifoFastQueueDisc);
+
+TypeId PfifoFastQueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::PfifoFastQueueDisc")
+    .SetParent<QueueDisc> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<PfifoFastQueueDisc> ()
+    .AddAttribute ("Limit",
+                   "The maximum number of packets accepted by this queue disc.",
+                   UintegerValue (1000),
+                   MakeUintegerAccessor (&PfifoFastQueueDisc::m_limit),
+                   MakeUintegerChecker<uint32_t> ())
+  ;
+  return tid;
+}
+
+PfifoFastQueueDisc::PfifoFastQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+PfifoFastQueueDisc::~PfifoFastQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+bool
+PfifoFastQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  if (GetNPackets () > m_limit)
+    {
+      NS_LOG_LOGIC ("Queue disc limit exceeded -- dropping packet");
+      Drop (item);
+      return false;
+    }
+
+  uint32_t band;
+  int32_t ret = Classify (item);
+
+  if (ret == PacketFilter::PF_NO_MATCH)
+    {
+      band = 1;
+      NS_LOG_DEBUG ("The filter was unable to classify; using default band of " << band);
+    }
+  else if (ret < 0 || ret > 2)
+    {
+      band = 1;
+      NS_LOG_DEBUG ("The filter returned an invalid value; using default band of " << band);
+    }
+  else
+    {
+      band = ret;
+    }
+
+  if (!GetInternalQueue(band)->Enqueue (item))
+    {
+      NS_LOG_LOGIC ("Enqueue failed -- dropping pkt");
+      Drop (item);
+      return false;
+    }
+  NS_LOG_LOGIC ("Number packets band " << band << ": " << GetInternalQueue(band)->GetNPackets ());
+
+  return true;
+}
+
+Ptr<QueueDiscItem>
+PfifoFastQueueDisc::DoDequeue (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<QueueDiscItem> item;
+
+  for (uint32_t i = 0; i < GetNInternalQueues (); i++)
+    {
+      if ((item = StaticCast<QueueDiscItem> (GetInternalQueue (i)->Dequeue ())) != 0)
+        {
+          NS_LOG_LOGIC ("Popped from band " << i << ": " << item);
+          NS_LOG_LOGIC ("Number packets band " << i << ": " << GetInternalQueue (i)->GetNPackets ());
+          return item;
+        }
+    }
+  
+  NS_LOG_LOGIC ("Queue empty");
+  return item;
+}
+
+Ptr<const QueueDiscItem>
+PfifoFastQueueDisc::DoPeek (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<const QueueDiscItem> item;
+
+  for (uint32_t i = 0; i < GetNInternalQueues (); i++)
+    {
+      item = StaticCast<const QueueDiscItem> (GetInternalQueue (i)->Peek ());
+      NS_LOG_LOGIC ("Peeked from band " << i << ": " << item);
+      NS_LOG_LOGIC ("Number packets band " << i << ": " << GetInternalQueue (i)->GetNPackets ());
+      return item;
+    }
+
+  NS_LOG_LOGIC ("Queue empty");
+  return item;
+}
+
+bool
+PfifoFastQueueDisc::CheckConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetNQueueDiscClasses () > 0)
+    {
+      NS_LOG_ERROR ("PfifoFastQueueDisc cannot have classes");
+      return false;
+    }
+
+  if (GetNPacketFilters () == 0)
+    {
+      NS_LOG_ERROR ("PfifoFastQueueDisc needs at least a packet filter");
+      return false;
+    }
+
+  if (GetNInternalQueues () == 0)
+    {
+      // create 3 DropTail queues with m_limit packets each
+      ObjectFactory factory;
+      factory.SetTypeId ("ns3::DropTailQueue");
+      factory.Set ("Mode", EnumValue (Queue::QUEUE_MODE_PACKETS));
+      factory.Set ("MaxPackets", UintegerValue (m_limit));
+      AddInternalQueue (factory.Create<Queue> ());
+      AddInternalQueue (factory.Create<Queue> ());
+      AddInternalQueue (factory.Create<Queue> ());
+    }
+
+  if (GetNInternalQueues () != 3)
+    {
+      NS_LOG_ERROR ("PfifoFastQueueDisc needs 3 internal queues");
+      return false;
+    }
+
+  if (GetInternalQueue (0)-> GetMode () != Queue::QUEUE_MODE_PACKETS ||
+      GetInternalQueue (1)-> GetMode () != Queue::QUEUE_MODE_PACKETS ||
+      GetInternalQueue (2)-> GetMode () != Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_LOG_ERROR ("PfifoFastQueueDisc needs 3 internal queues operating in packet mode");
+      return false;
+    }
+
+  for (uint8_t i = 0; i < 2; i++)
+    {
+      if (GetInternalQueue (i)->GetMaxPackets () < m_limit)
+        {
+          NS_LOG_ERROR ("The capacity of some internal queue(s) is less than the queue disc capacity");
+          return false;
+        }
+    }
+
+  return true;
+}
+
+void
+PfifoFastQueueDisc::InitializeParams (void)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/model/pfifo-fast-queue-disc.h ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.h
--- ns-3.24.1/src/traffic-control/model/pfifo-fast-queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/pfifo-fast-queue-disc.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,85 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007, 2014 University of Washington
+ *               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
+ *
+ * Authors:  Stefano Avallone <stavallo@unina.it>
+ *           Tom Henderson <tomhend@u.washington.edu>
+ */
+
+#ifndef PFIFO_FAST_H
+#define PFIFO_FAST_H
+
+#include "ns3/queue-disc.h"
+
+namespace ns3 {
+
+/**
+ * \ingroup traffic-control
+ *
+ * Linux pfifo_fast is the default priority queue enabled on Linux
+ * systems. Packets are enqueued in three FIFO droptail queues according
+ * to three priority bands based on the classification returned by
+ * the configured packet filters.
+ *
+ * The system behaves similar to three ns3::DropTail queues operating
+ * together, in which packets from higher priority bands are always
+ * dequeued before a packet from a lower priority band is dequeued.
+ *
+ * The queue disc capacity, i.e., the maximum number of packets that can
+ * be enqueued in the queue disc, is set through the limit attribute, which
+ * plays the same role as txqueuelen in Linux. If no internal queue is
+ * provided, three DropTail queues having each a capacity equal to limit are
+ * created by default. User is allowed to provide queues, but they must be
+ * three, operate in packet mode and each have a capacity not less
+ * than limit.
+ *
+ * It is necessary to provide at least one packet filter. To simulate the
+ * Linux behavior, the PfifoFastIpv4PacketFilter and/or the PfifoFastIpv6PacketFilter
+ * shall be provided. These filters classify packets based on their Type of
+ * Service bits or DSCP bits. If the filters are unable to classify a packet,
+ * i.e., they return -1 (PF_NO_MATCH), that packet is enqueued into band 1
+ * (normal service).
+ */
+class PfifoFastQueueDisc : public QueueDisc {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  /**
+   * \brief PfifoFastQueueDisc constructor
+   *
+   * Creates a queue with a depth of 1000 packets per band by default
+   */
+  PfifoFastQueueDisc ();
+
+  virtual ~PfifoFastQueueDisc();
+
+private:
+  virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
+  virtual Ptr<QueueDiscItem> DoDequeue (void);
+  virtual Ptr<const QueueDiscItem> DoPeek (void) const;
+  virtual bool CheckConfig (void);
+  virtual void InitializeParams (void);
+
+  uint32_t m_limit;    //!< Maximum number of packets that can be stored
+};
+
+} // namespace ns3
+
+#endif /* PFIFO_FAST_H */
diff -Naur ns-3.24.1/src/traffic-control/model/queue-disc.cc ns-3.25/src/traffic-control/model/queue-disc.cc
--- ns-3.24.1/src/traffic-control/model/queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/queue-disc.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,600 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007, 2014 University of Washington
+ *               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
+ */
+
+#include "ns3/log.h"
+#include "ns3/abort.h"
+#include "ns3/uinteger.h"
+#include "ns3/pointer.h"
+#include "ns3/object-vector.h"
+#include "ns3/packet.h"
+#include "ns3/unused.h"
+#include "queue-disc.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("QueueDisc");
+
+QueueDiscItem::QueueDiscItem (Ptr<Packet> p, const Address& addr, uint16_t protocol)
+  : QueueItem (p),
+    m_address (addr),
+    m_protocol (protocol),
+    m_txq (0)
+{
+}
+
+QueueDiscItem::~QueueDiscItem()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+Address
+QueueDiscItem::GetAddress (void) const
+{
+  return m_address;
+}
+
+uint16_t
+QueueDiscItem::GetProtocol (void) const
+{
+  return m_protocol;
+}
+
+uint8_t
+QueueDiscItem::GetTxQueueIndex (void) const
+{
+  return m_txq;
+}
+
+void
+QueueDiscItem::SetTxQueueIndex (uint8_t txq)
+{
+  m_txq = txq;
+}
+
+void
+QueueDiscItem::Print (std::ostream& os) const
+{
+  os << GetPacket () << " "
+     << "Dst addr " << m_address << " "
+     << "proto " << (uint16_t) m_protocol << " "
+     << "txq " << (uint8_t) m_txq
+  ;
+}
+
+
+NS_OBJECT_ENSURE_REGISTERED (QueueDiscClass);
+
+TypeId QueueDiscClass::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::QueueDiscClass")
+    .SetParent<Object> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<QueueDiscClass> ()
+    .AddAttribute ("QueueDisc", "The queue disc attached to the class",
+                   PointerValue (),
+                   MakePointerAccessor (&QueueDiscClass::m_queueDisc),
+                   MakePointerChecker<QueueDisc> ())
+  ;
+  return tid;
+}
+
+QueueDiscClass::QueueDiscClass()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+QueueDiscClass::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_queueDisc = 0;
+  Object::DoDispose ();
+}
+
+Ptr<QueueDisc>
+QueueDiscClass::GetQueueDisc (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_queueDisc;
+}
+
+void
+QueueDiscClass::SetQueueDisc (Ptr<QueueDisc> qd)
+{
+  NS_LOG_FUNCTION (this);
+  m_queueDisc = qd;
+}
+
+
+NS_OBJECT_ENSURE_REGISTERED (QueueDisc);
+
+TypeId QueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::QueueDisc")
+    .SetParent<Object> ()
+    .SetGroupName ("TrafficControl")
+    .AddAttribute ("Quota", "The maximum number of packets dequeued in a qdisc run",
+                   UintegerValue (DEFAULT_QUOTA),
+                   MakeUintegerAccessor (&QueueDisc::SetQuota,
+                                         &QueueDisc::GetQuota),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("InternalQueueList", "The list of internal queues.",
+                   ObjectVectorValue (),
+                   MakeObjectVectorAccessor (&QueueDisc::m_queues),
+                   MakeObjectVectorChecker<Queue> ())
+    .AddAttribute ("PacketFilterList", "The list of packet filters.",
+                   ObjectVectorValue (),
+                   MakeObjectVectorAccessor (&QueueDisc::m_filters),
+                   MakeObjectVectorChecker<PacketFilter> ())
+    .AddAttribute ("QueueDiscClassList", "The list of queue disc classes.",
+                   ObjectVectorValue (),
+                   MakeObjectVectorAccessor (&QueueDisc::m_classes),
+                   MakeObjectVectorChecker<QueueDiscClass> ())
+    .AddTraceSource ("Enqueue", "Enqueue a packet in the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_traceEnqueue),
+                     "ns3::QueueItem::TracedCallback")
+    .AddTraceSource ("Dequeue", "Dequeue a packet from the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_traceDequeue),
+                     "ns3::QueueItem::TracedCallback")
+    .AddTraceSource ("Requeue", "Requeue a packet in the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_traceRequeue),
+                     "ns3::QueueItem::TracedCallback")
+    .AddTraceSource ("Drop", "Drop a packet stored in the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_traceDrop),
+                     "ns3::QueueItem::TracedCallback")
+    .AddTraceSource ("PacketsInQueue",
+                     "Number of packets currently stored in the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_nPackets),
+                     "ns3::TracedValueCallback::Uint32")
+    .AddTraceSource ("BytesInQueue",
+                     "Number of bytes currently stored in the queue disc",
+                     MakeTraceSourceAccessor (&QueueDisc::m_nBytes),
+                     "ns3::TracedValueCallback::Uint32")
+  ;
+  return tid;
+}
+
+QueueDisc::QueueDisc ()
+  :  m_nPackets (0),
+     m_nBytes (0),
+     m_nTotalReceivedPackets (0),
+     m_nTotalReceivedBytes (0),
+     m_nTotalDroppedPackets (0),
+     m_nTotalDroppedBytes (0),
+     m_nTotalRequeuedPackets (0),
+     m_nTotalRequeuedBytes (0),
+     m_running (false)
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+QueueDisc::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_queues.clear ();
+  m_filters.clear ();
+  m_classes.clear ();
+  m_device = 0;
+  m_devQueueIface = 0;
+  m_requeued = 0;
+  Object::DoDispose ();
+}
+
+void
+QueueDisc::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  // When adding a new interface, the traffic control aggregates
+  // a NetDeviceQueueInterface object to the netdevice
+  if (m_device)
+    {
+      m_devQueueIface = m_device->GetObject<NetDeviceQueueInterface> ();
+    }
+
+  // Check the configuration and initialize the parameters of this queue disc
+  bool ok = CheckConfig ();
+  NS_ASSERT_MSG (ok, "The queue disc configuration is not correct");
+  NS_UNUSED (ok); // suppress compiler warning
+  InitializeParams ();
+
+  // Check the configuration and initialize the parameters of the child queue discs
+  for (std::vector<Ptr<QueueDiscClass> >::iterator cl = m_classes.begin ();
+       cl != m_classes.end (); cl++)
+    {
+      (*cl)->GetQueueDisc ()->Initialize ();
+    }
+
+  Object::DoInitialize ();
+}
+
+uint32_t
+QueueDisc::GetNPackets () const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nPackets;
+}
+
+uint32_t
+QueueDisc::GetNBytes (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nBytes;
+}
+
+uint32_t
+QueueDisc::GetTotalReceivedPackets (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalReceivedPackets;
+}
+
+uint32_t
+QueueDisc::GetTotalReceivedBytes (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalReceivedBytes;
+}
+
+uint32_t
+QueueDisc::GetTotalDroppedPackets (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalDroppedPackets;
+}
+
+uint32_t
+QueueDisc:: GetTotalDroppedBytes (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalDroppedBytes;
+}
+
+uint32_t
+QueueDisc::GetTotalRequeuedPackets (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalRequeuedPackets;
+}
+
+uint32_t
+QueueDisc:: GetTotalRequeuedBytes (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_nTotalRequeuedBytes;
+}
+
+void
+QueueDisc::SetNetDevice (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  m_device = device;
+}
+
+Ptr<NetDevice>
+QueueDisc::GetNetDevice (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_device;
+}
+
+void
+QueueDisc::SetQuota (const uint32_t quota)
+{
+  NS_LOG_FUNCTION (this << quota);
+  m_quota = quota;
+}
+
+uint32_t
+QueueDisc::GetQuota (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return m_quota;
+}
+
+void
+QueueDisc::AddInternalQueue (Ptr<Queue> queue)
+{
+  NS_LOG_FUNCTION (this);
+  m_queues.push_back (queue);
+}
+
+Ptr<Queue>
+QueueDisc::GetInternalQueue (uint32_t i) const
+{
+  NS_ASSERT (i < m_queues.size ());
+  return m_queues[i];
+}
+
+uint32_t
+QueueDisc::GetNInternalQueues (void) const
+{
+  return m_queues.size ();
+}
+
+void
+QueueDisc::AddPacketFilter (Ptr<PacketFilter> filter)
+{
+  NS_LOG_FUNCTION (this);
+  m_filters.push_back (filter);
+}
+
+Ptr<PacketFilter>
+QueueDisc::GetPacketFilter (uint32_t i) const
+{
+  NS_ASSERT (i < m_filters.size ());
+  return m_filters[i];
+}
+
+uint32_t
+QueueDisc::GetNPacketFilters (void) const
+{
+  return m_filters.size ();
+}
+
+void
+QueueDisc::AddQueueDiscClass (Ptr<QueueDiscClass> qdClass)
+{
+  NS_LOG_FUNCTION (this);
+  NS_ABORT_MSG_IF (qdClass->GetQueueDisc () == 0, "Cannot add a class with no attached queue disc");
+  m_classes.push_back (qdClass);
+}
+
+Ptr<QueueDiscClass>
+QueueDisc::GetQueueDiscClass (uint32_t i) const
+{
+  NS_ASSERT (i < m_classes.size ());
+  return m_classes[i];
+}
+
+uint32_t
+QueueDisc::GetNQueueDiscClasses (void) const
+{
+  return m_classes.size ();
+}
+
+int32_t
+QueueDisc::Classify (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  int32_t ret = PacketFilter::PF_NO_MATCH;
+  for (std::vector<Ptr<PacketFilter> >::iterator f = m_filters.begin ();
+       f != m_filters.end () && ret == PacketFilter::PF_NO_MATCH; f++)
+    {
+      ret = (*f)->Classify (item);
+    }
+  return ret;
+}
+
+QueueDisc::WakeMode
+QueueDisc::GetWakeMode (void)
+{
+  return WAKE_ROOT;
+}
+
+void
+QueueDisc::Drop (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+  NS_ASSERT_MSG (m_nPackets >= 1u, "No packet in the queue disc, cannot drop");
+  NS_ASSERT_MSG (m_nBytes >= item->GetPacketSize (), "The size of the packet that"
+                 << " is reported to be dropped is greater than the amount of bytes"
+                 << "stored in the queue disc");
+
+  m_nPackets--;
+  m_nBytes -= item->GetPacketSize ();
+  m_nTotalDroppedPackets++;
+  m_nTotalDroppedBytes += item->GetPacketSize ();
+
+  NS_LOG_LOGIC ("m_traceDrop (p)");
+  m_traceDrop (item);
+}
+
+bool
+QueueDisc::Enqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  m_nPackets++;
+  m_nBytes += item->GetPacketSize ();
+  m_nTotalReceivedPackets++;
+  m_nTotalReceivedBytes += item->GetPacketSize ();
+
+  NS_LOG_LOGIC ("m_traceEnqueue (p)");
+  m_traceEnqueue (item);
+
+  return DoEnqueue (item);
+}
+
+Ptr<QueueDiscItem>
+QueueDisc::Dequeue (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  Ptr<QueueDiscItem> item;
+  item = DoDequeue ();
+
+  if (item != 0)
+    {
+      m_nPackets--;
+      m_nBytes -= item->GetPacketSize ();
+
+      NS_LOG_LOGIC ("m_traceDequeue (p)");
+      m_traceDequeue (item);
+    }
+
+  return item;
+}
+
+Ptr<const QueueDiscItem>
+QueueDisc::Peek (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return DoPeek ();
+}
+
+void
+QueueDisc::Run (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (RunBegin ())
+    {
+      uint32_t quota = m_quota;
+      while (Restart ())
+        {
+          quota -= 1;
+          if (quota <= 0)
+            {
+              /// \todo netif_schedule (q);
+              break;
+            }
+        }
+      RunEnd ();
+    }
+}
+
+bool
+QueueDisc::RunBegin (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (m_running)
+    {
+      return false;
+    }
+
+  m_running = true;
+  return true;
+}
+
+void
+QueueDisc::RunEnd (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_running = false;
+}
+
+bool
+QueueDisc::Restart (void)
+{
+  NS_LOG_FUNCTION (this);
+  Ptr<QueueDiscItem> item = DequeuePacket();
+  if (item == 0)
+    {
+      NS_LOG_LOGIC ("No packet to send");
+      return false;
+    }
+
+  return Transmit (item);
+}
+
+Ptr<QueueDiscItem>
+QueueDisc::DequeuePacket ()
+{
+  NS_LOG_FUNCTION (this);
+  NS_ASSERT (m_devQueueIface);
+  Ptr<QueueDiscItem> item;
+
+  // First check if there is a requeued packet
+  if (m_requeued != 0)
+    {
+        // If the queue where the requeued packet is destined to is not stopped, return
+        // the requeued packet; otherwise, return an empty packet.
+        // If the device does not support flow control, the device queue is never stopped
+        if (!m_devQueueIface->GetTxQueue (m_requeued->GetTxQueueIndex ())->IsStopped ())
+          {
+            item = m_requeued;
+            m_requeued = 0;
+
+            m_nPackets--;
+            m_nBytes -= item->GetPacketSize ();
+
+            NS_LOG_LOGIC ("m_traceDequeue (p)");
+            m_traceDequeue (item);
+          }
+    }
+  else
+    {
+      // If the device is multi-queue (actually, Linux checks if the queue disc has
+      // multiple queues), ask the queue disc to dequeue a packet (a multi-queue aware
+      // queue disc should try not to dequeue a packet destined to a stopped queue).
+      // Otherwise, ask the queue disc to dequeue a packet only if the (unique) queue
+      // is not stopped.
+      if (m_devQueueIface->GetTxQueuesN ()>1 || !m_devQueueIface->GetTxQueue (0)->IsStopped ())
+        {
+          item = Dequeue ();
+          // If the item is not null, add the header to the packet.
+          if (item != 0)
+            {
+              item->AddHeader ();
+            }
+          // Here, Linux tries bulk dequeues
+        }
+    }
+  return item;
+}
+
+void
+QueueDisc::Requeue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+  m_requeued = item;
+  /// \todo netif_schedule (q);
+
+  m_nPackets++;       // it's still part of the queue
+  m_nBytes += item->GetPacketSize ();
+  m_nTotalRequeuedPackets++;
+  m_nTotalRequeuedBytes += item->GetPacketSize ();
+
+  NS_LOG_LOGIC ("m_traceRequeue (p)");
+  m_traceRequeue (item);
+}
+
+bool
+QueueDisc::Transmit (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+  NS_ASSERT (m_devQueueIface);
+  bool ret = false;
+
+  if (!m_devQueueIface->GetTxQueue (item->GetTxQueueIndex ())->IsStopped ())
+    {
+      // send a copy of the packet because the device might add the
+      // MAC header even if the transmission is unsuccessful (see BUG 2284)
+      Ptr<Packet> copy = item->GetPacket ()->Copy ();
+      ret = m_device->Send (copy, item->GetAddress (), item->GetProtocol ());
+    }
+
+  // If the transmission did not happen or failed, requeue the item
+  if (!ret)
+    {
+      Requeue (item);
+    }
+
+  // If the transmission succeeded but now the queue is stopped, return false
+  if (ret && m_devQueueIface->GetTxQueue (item->GetTxQueueIndex ())->IsStopped ())
+    {
+      ret = false;
+    }
+
+  return ret;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/model/queue-disc.h ns-3.25/src/traffic-control/model/queue-disc.h
--- ns-3.24.1/src/traffic-control/model/queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/queue-disc.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,549 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007, 2014 University of Washington
+ *               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
+ */
+
+#ifndef QUEUE_DISC_H
+#define QUEUE_DISC_H
+
+#include "ns3/object.h"
+#include "ns3/traced-value.h"
+#include <ns3/queue.h>
+#include "ns3/net-device.h"
+#include <vector>
+#include "packet-filter.h"
+
+namespace ns3 {
+
+class Packet;
+class QueueDisc;
+
+/**
+ * \ingroup traffic-control
+ *
+ * QueueDiscItem is the abstract base class for items that are stored in a queue
+ * disc. It is derived from QueueItem (which only consists of a Ptr<Packet>)
+ * to additionally store the destination MAC address, the
+ * L3 protocol number and the transmission queue index,
+ */
+class QueueDiscItem : public QueueItem {
+public:
+  /**
+   * \brief Create a queue disc item.
+   * \param p the packet included in the created item.
+   * \param addr the destination MAC address
+   * \param protocol the L3 protocol number
+   */
+  QueueDiscItem (Ptr<Packet> p, const Address & addr, uint16_t protocol);
+
+  virtual ~QueueDiscItem ();
+
+  /**
+   * \brief Get the MAC address included in this item
+   * \return the MAC address included in this item.
+   */
+  Address GetAddress (void) const;
+
+  /**
+   * \brief Get the L3 protocol included in this item
+   * \return the L3 protocol included in this item.
+   */
+  uint16_t GetProtocol (void) const;
+
+  /**
+   * \brief Get the transmission queue index included in this item
+   * \return the transmission queue index included in this item.
+   */
+  uint8_t GetTxQueueIndex (void) const;
+
+  /**
+   * \brief Set the transmission queue index to store in this item
+   * \param txq the transmission queue index to store in this item.
+   */
+  void SetTxQueueIndex (uint8_t txq);
+
+  /**
+   * \brief Add the header to the packet
+   *
+   * Subclasses may keep header and payload separate to allow manipulating the header,
+   * so this method allows to add the header to the packet before sending the packet
+   * to the device.
+   */
+  virtual void AddHeader (void) = 0;
+
+  /**
+   * \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
+   */
+  QueueDiscItem ();
+  /**
+   * \brief Copy constructor
+   *
+   * Defined and unimplemented to avoid misuse
+   */
+  QueueDiscItem (const QueueDiscItem &);
+  /**
+   * \brief Assignment operator
+   *
+   * Defined and unimplemented to avoid misuse
+   * \returns
+   */
+  QueueDiscItem &operator = (const QueueDiscItem &);
+
+  Address m_address;      //!< MAC destination address
+  uint16_t m_protocol;    //!< L3 Protocol number
+  uint8_t m_txq;          //!< Transmission queue index
+};
+
+
+/**
+ * \ingroup traffic-control
+ *
+ * QueueDiscClass is the base class for classes that are included in a queue
+ * disc. It has a single attribute, QueueDisc, used to set the child queue disc
+ * attached to the class. Classful queue discs needing to set parameters for
+ * their classes can subclass QueueDiscClass and add the required parameters
+ * as attributes.
+ */
+class QueueDiscClass : public Object {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  QueueDiscClass ();
+  virtual ~QueueDiscClass () {}
+
+  /**
+   * \brief Get the queue disc attached to this class
+   * \return the queue disc attached to this class.
+   */
+  Ptr<QueueDisc> GetQueueDisc (void) const;
+
+  /**
+   * \brief Set the queue disc attached to this class
+   */
+  void SetQueueDisc (Ptr<QueueDisc> qd);
+
+protected:
+  /**
+   * \brief Dispose of the object
+   */
+  virtual void DoDispose (void);
+
+private:
+  Ptr<QueueDisc> m_queueDisc;        //!< Queue disc attached to this class
+};
+
+
+/**
+ * \ingroup traffic-control
+ *
+ * QueueDisc is an abstract base class providing the interface and implementing
+ * the operations common to all the queueing disciplines. Child classes
+ * need to implement the methods used to enqueue a packet (DoEnqueue),
+ * dequeue a single packet (DoDequeue), get a copy of the next packet
+ * to extract (DoPeek), check whether the current configuration is correct
+ * (CheckConfig).
+ *
+ * As in Linux, a queue disc may contain distinct elements:
+ * - queues, which actually store the packets waiting for transmission
+ * - classes, which allow to reserve a different treatment to different packets
+ * - filters, which determine the queue or class which a packet is destined to
+ *
+ * Notice that a child queue disc must be attached to every class and a packet
+ * filter is only able to classify packets of a single protocol. Also, while in Linux
+ * some queue discs (e.g., fq-codel) use an internal classifier and do not make use of
+ * packet filters, in ns-3 every queue disc including multiple queues or multiple classes
+ * needs an external filter to classify packets (this is to avoid having the traffic-control
+ * module depend on other modules such as internet).
+ *
+ * Queue disc configuration vary from queue disc to queue disc. A typical taxonomy divides
+ * queue discs in classful (i.e., support classes) and classless (i.e., do not support
+ * classes). More recently, after the appearance of multi-queue devices (such as Wifi),
+ * some multi-queue aware queue discs have been introduced. Multi-queue aware queue discs
+ * handle as many queues (or queue discs -- without using classes) as the number of
+ * transmission queues used by the device on which the queue disc is installed.
+ * An attempt is made, also, to enqueue each packet in the "same" queue both within the
+ * queue disc and within the device.
+ *
+ * The traffic control layer interacts with a queue disc in a simple manner: after requesting
+ * to enqueue a packet, the traffic control layer requests the qdisc to "run", i.e., to
+ * dequeue a set of packets, until a predefined number ("quota") of packets is dequeued
+ * or the netdevice stops the queue disc. A netdevice may stop the queue disc when its
+ * transmission queue(s) is/are (almost) full. Also, a netdevice may wake the
+ * queue disc when its transmission queue(s) is/are (almost) empty. Waking a queue disc
+ * is equivalent to make it run.
+ *
+ * The design and implementation of this class is heavily inspired by Linux.
+ * For more details, see the traffic-control model page.
+ */
+class QueueDisc : public Object {
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  QueueDisc ();
+
+  /**
+   * \brief Get the number of packets stored by the queue disc
+   * \return the number of packets stored by the queue disc.
+   *
+   * Note that the number of packets stored by the queue disc is updated as soon
+   * as a packet is received by the queue disc and before actually enqueuing the
+   * packet (i.e., before calling DoEnqueue). Thus, while implementing the DoEnqueue
+   * method of a subclass, keep in mind that GetNPackets returns the number of
+   * packets stored in the queue disc, including the packet that we are trying
+   * to enqueue.
+   */
+  uint32_t GetNPackets (void) const;
+
+  /**
+   * \brief Get the amount of bytes stored by the queue disc
+   * \return the amount of bytes stored by the queue disc.
+   *
+   * Note that the amount of bytes stored by the queue disc is updated as soon
+   * as a packet is received by the queue disc and before actually enqueuing the
+   * packet (i.e., before calling DoEnqueue). Thus, while implementing the DoEnqueue
+   * method of a subclass, keep in mind that GetNBytes returns the amount of
+   * bytes stored in the queue disc, including the size of the packet that we are
+   * trying to enqueue.
+   */
+  uint32_t GetNBytes (void) const;
+
+  /**
+   * \brief Get the total number of received packets
+   * \return the total number of received packets.
+   */
+  uint32_t GetTotalReceivedPackets (void) const;
+
+  /**
+   * \brief Get the total amount of received bytes
+   * \return the total amount of received bytes.
+   */
+  uint32_t GetTotalReceivedBytes (void) const;
+
+  /**
+   * \brief Get the total number of dropped packets
+   * \return the total number of dropped packets.
+   */
+  uint32_t GetTotalDroppedPackets (void) const;
+
+  /**
+   * \brief Get the total amount of dropped bytes
+   * \return the total amount of dropped bytes.
+   */
+  uint32_t GetTotalDroppedBytes (void) const;
+
+  /**
+   * \brief Get the total number of requeued packets
+   * \return the total number of requeued packets.
+   */
+  uint32_t GetTotalRequeuedPackets (void) const;
+
+  /**
+   * \brief Get the total amount of requeued bytes
+   * \return the total amount of requeued bytes.
+   */
+  uint32_t GetTotalRequeuedBytes (void) const;
+
+  /**
+   * \brief Set the NetDevice on which this queue discipline is installed.
+   * \param device the NetDevice on which this queue discipline is installed.
+   */
+  void SetNetDevice (Ptr<NetDevice> device);
+
+  /**
+   * \brief Get the NetDevice on which this queue discipline is installed
+   * \return the NetDevice on which this queue discipline is installed.
+   */
+  Ptr<NetDevice> GetNetDevice (void) const;
+
+  /**
+   * \brief Set the maximum number of dequeue operations following a packet enqueue
+   * \param quota the maximum number of dequeue operations following a packet enqueue.
+   */
+  virtual void SetQuota (const uint32_t quota);
+
+  /**
+   * \brief Get the maximum number of dequeue operations following a packet enqueue
+   * \return the maximum number of dequeue operations following a packet enqueue.
+   */
+  virtual uint32_t GetQuota (void) const;
+
+  /**
+   * Pass a packet to store to the queue discipline. This function only updates
+   * the statistics and calls the (private) DoEnqueue function, which must be
+   * implemented by derived classes.
+   * \param item item to enqueue
+   * \return True if the operation was successful; false otherwise
+   */
+  bool Enqueue (Ptr<QueueDiscItem> item);
+
+  /**
+   * Request the queue discipline to extract a packet. This function only updates
+   * the statistics and calls the (private) DoDequeue function, which must be
+   * implemented by derived classes.
+   * \return 0 if the operation was not successful; the item otherwise.
+   */
+  Ptr<QueueDiscItem> Dequeue (void);
+
+  /**
+   * Get a copy of the next packet the queue discipline will extract, without
+   * actually extracting the packet. This function only calls the (private)
+   * DoPeek function, which must be implemented by derived classes.
+   * \return 0 if the operation was not successful; the item otherwise.
+   */
+  Ptr<const QueueDiscItem> Peek (void) const;
+
+  /**
+   * Modelled after the Linux function __qdisc_run (net/sched/sch_generic.c)
+   * Dequeues multiple packets, until a quota is exceeded or sending a packet
+   * to the device failed.
+   */
+  void Run (void);
+
+  /**
+   * \brief Add an internal queue to the tail of the list of queues.
+   * \param queue the queue to be added
+   */
+  void AddInternalQueue (Ptr<Queue> queue);
+
+  /**
+   * \brief Get the i-th internal queue
+   * \param i the index of the queue
+   * \return the i-th internal queue.
+   */
+  Ptr<Queue> GetInternalQueue (uint32_t i) const;
+
+  /**
+   * \brief Get the number of internal queues
+   * \return the number of internal queues.
+   */
+  uint32_t GetNInternalQueues (void) const;
+
+  /**
+   * \brief Add a packet filter to the tail of the list of filters used to classify packets.
+   * \param filter the packet filter to be added
+   */
+  void AddPacketFilter (Ptr<PacketFilter> filter);
+
+  /**
+   * \brief Get the i-th packet filter
+   * \param i the index of the packet filter
+   * \return the i-th packet filter.
+   */
+  Ptr<PacketFilter> GetPacketFilter (uint32_t i) const;
+
+  /**
+   * \brief Get the number of packet filters
+   * \return the number of packet filters.
+   */
+  uint32_t GetNPacketFilters (void) const;
+
+  /**
+   * \brief Add a queue disc class to the tail of the list of classes.
+   * \param qdClass the queue disc class to be added
+   */
+  void AddQueueDiscClass (Ptr<QueueDiscClass> qdClass);
+
+  /**
+   * \brief Get the i-th queue disc class
+   * \param i the index of the queue disc class
+   * \return the i-th queue disc class.
+   */
+  Ptr<QueueDiscClass> GetQueueDiscClass (uint32_t i) const;
+
+  /**
+   * \brief Get the number of queue disc classes
+   * \return the number of queue disc classes.
+   */
+  uint32_t GetNQueueDiscClasses (void) const;
+
+  /**
+   * Classify a packet by calling the packet filters, one at a time, until either
+   * a filter able to classify the packet is found or all the filters have been
+   * processed.
+   * \param item item to classify
+   * \return -1 if no filter able to classify the packet has been found, the value
+   * returned by first filter found to be able to classify the packet otherwise.
+   */
+  int32_t Classify (Ptr<QueueDiscItem> item);
+
+  /**
+   * \enum WakeMode
+   * \brief Used to determine whether the queue disc itself or its children must
+   *        be activated when a netdevice wakes a transmission queue
+   */
+  enum WakeMode
+    {
+      WAKE_ROOT = 0x00,
+      WAKE_CHILD = 0x01
+    };
+
+  /**
+   * When setting up the wake callbacks on the netdevice queues, it is necessary to
+   * determine which queue disc (the root queue disc or one of its children) should
+   * be activated when the netdevice wakes one of its transmission queues. The
+   * implementation of this method for the base class returns WAKE_ROOT, i.e., the
+   * root queue disc is activated. Subclasses implementing queue discs adopting
+   * a different strategy (e.g., multi-queue aware queue discs such as mq) have
+   * to redefine this method.
+   *
+   * \return the wake mode adopted by this queue disc.
+   */
+  WakeMode GetWakeMode (void);
+
+protected:
+  /**
+   * \brief Dispose of the object
+   */
+  virtual void DoDispose (void);
+
+  /**
+   * \brief Check whether the configuration is correct and initialize parameters
+   */
+  virtual void DoInitialize (void);
+
+  /**
+   *  \brief Drop a packet
+   *  \param item item that was dropped
+   *  This method is called by subclasses to notify parent (this class) of packet drops.
+   */
+  void Drop (Ptr<QueueDiscItem> item);
+
+private:
+
+  /**
+   * This function actually enqueues a packet into the queue disc.
+   * \param item item to enqueue
+   * \return True if the operation was successful; false otherwise
+   */
+  virtual bool DoEnqueue (Ptr<QueueDiscItem> item) = 0;
+
+  /**
+   * This function actually extracts a packet from the queue disc.
+   * \return 0 if the operation was not successful; the item otherwise.
+   */
+  virtual Ptr<QueueDiscItem> DoDequeue (void) = 0;
+
+  /**
+   * This function returns a copy of the next packet the queue disc will extract.
+   * \return 0 if the operation was not successful; the packet otherwise.
+   */
+  virtual Ptr<const QueueDiscItem> DoPeek (void) const = 0;
+
+  /**
+   * Check whether the current configuration is correct. Default objects (such
+   * as internal queues) might be created by this method to ensure the
+   * configuration is correct.
+   * \return true if the configuration is correct, false otherwise
+   */
+  virtual bool CheckConfig (void) = 0;
+
+  /**
+   * Initialize parameters (if any) before the first packet is enqueued.
+   */
+  virtual void InitializeParams (void) = 0;
+
+  /**
+   * Modelled after the Linux function qdisc_run_begin (include/net/sch_generic.h).
+   * \return false if the qdisc is already running; otherwise, set the qdisc as running and return true.
+   */
+  bool RunBegin (void);
+
+  /**
+   * Modelled after the Linux function qdisc_run_end (include/net/sch_generic.h).
+   * Set the qdisc as not running.
+   */
+  void RunEnd (void);
+
+  /**
+   * Modelled after the Linux function qdisc_restart (net/sched/sch_generic.c)
+   * Dequeue a packet (by calling DequeuePacket) and send it to the device (by calling Transmit).
+   * \return true if a packet is successfully sent to the device.
+   */
+  bool Restart (void);
+
+  /**
+   * Modelled after the Linux function dequeue_skb (net/sched/sch_generic.c)
+   * \return the requeued packet, if any, or the packet dequeued by the queue disc, otherwise.
+   */
+  Ptr<QueueDiscItem> DequeuePacket (void);
+
+  /**
+   * Modelled after the Linux function dev_requeue_skb (net/sched/sch_generic.c)
+   * Requeues a packet whose transmission failed.
+   * \param p the packet to requeue
+   */
+  void Requeue (Ptr<QueueDiscItem> p);
+
+  /**
+   * Modelled after the Linux function sch_direct_xmit (net/sched/sch_generic.c)
+   * Sends a packet to the device and requeues it in case transmission fails.
+   * \param p the packet to transmit
+   * \return true if the transmission succeeded and the queue is not stopped
+   */
+  bool Transmit (Ptr<QueueDiscItem> p);
+
+  static const uint32_t DEFAULT_QUOTA = 64; //!< Default quota (as in /proc/sys/net/core/dev_weight)
+
+  std::vector<Ptr<Queue> > m_queues;            //!< Internal queues
+  std::vector<Ptr<PacketFilter> > m_filters;    //!< Packet filters
+  std::vector<Ptr<QueueDiscClass> > m_classes;  //!< Classes
+
+  TracedValue<uint32_t> m_nPackets; //!< Number of packets in the queue
+  TracedValue<uint32_t> m_nBytes;   //!< Number of bytes in the queue
+
+  uint32_t m_nTotalReceivedPackets; //!< Total received packets
+  uint32_t m_nTotalReceivedBytes;   //!< Total received bytes
+  uint32_t m_nTotalDroppedPackets;  //!< Total dropped packets
+  uint32_t m_nTotalDroppedBytes;    //!< Total dropped bytes
+  uint32_t m_nTotalRequeuedPackets; //!< Total requeued packets
+  uint32_t m_nTotalRequeuedBytes;   //!< Total requeued bytes
+  uint32_t m_quota;                 //!< Maximum number of packets dequeued in a qdisc run
+  Ptr<NetDevice> m_device;          //!< The NetDevice on which this queue discipline is installed
+  Ptr<NetDeviceQueueInterface> m_devQueueIface;   //!< NetDevice queue interface
+  bool m_running;                   //!< The queue disc is performing multiple dequeue operations
+  Ptr<QueueDiscItem> m_requeued;    //!< The last packet that failed to be transmitted
+
+  /// Traced callback: fired when a packet is enqueued
+  TracedCallback<Ptr<const QueueItem> > m_traceEnqueue;
+    /// Traced callback: fired when a packet is dequeued
+  TracedCallback<Ptr<const QueueItem> > m_traceDequeue;
+    /// Traced callback: fired when a packet is requeued
+  TracedCallback<Ptr<const QueueItem> > m_traceRequeue;
+  /// Traced callback: fired when a packet is dropped
+  TracedCallback<Ptr<const QueueItem> > m_traceDrop;
+};
+
+} // namespace ns3
+
+#endif /* QueueDisc */
diff -Naur ns-3.24.1/src/traffic-control/model/red-queue-disc.cc ns-3.25/src/traffic-control/model/red-queue-disc.cc
--- ns-3.24.1/src/traffic-control/model/red-queue-disc.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/red-queue-disc.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,862 @@
+// /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright © 2011 Marcos Talau
+ *
+ * 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: Marcos Talau (talau@users.sourceforge.net)
+ *
+ * Thanks to: Duy Nguyen<duy@soe.ucsc.edu> by RED efforts in NS3
+ *
+ *
+ * This file incorporates work covered by the following copyright and  
+ * permission notice:  
+ *
+ * Copyright (c) 1990-1997 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor of the Laboratory may be used
+ *    to endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * PORT NOTE: This code was ported from ns-2 (queue/red.cc).  Almost all 
+ * comments have also been ported from NS-2
+ */
+
+#include "ns3/log.h"
+#include "ns3/enum.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
+#include "ns3/simulator.h"
+#include "ns3/abort.h"
+#include "red-queue-disc.h"
+#include "ns3/drop-tail-queue.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("RedQueueDisc");
+
+NS_OBJECT_ENSURE_REGISTERED (RedQueueDisc);
+
+TypeId RedQueueDisc::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::RedQueueDisc")
+    .SetParent<QueueDisc> ()
+    .SetGroupName("TrafficControl")
+    .AddConstructor<RedQueueDisc> ()
+    .AddAttribute ("Mode",
+                   "Determines unit for QueueLimit",
+                   EnumValue (Queue::QUEUE_MODE_PACKETS),
+                   MakeEnumAccessor (&RedQueueDisc::SetMode),
+                   MakeEnumChecker (Queue::QUEUE_MODE_BYTES, "QUEUE_MODE_BYTES",
+                                    Queue::QUEUE_MODE_PACKETS, "QUEUE_MODE_PACKETS"))
+    .AddAttribute ("MeanPktSize",
+                   "Average of packet size",
+                   UintegerValue (500),
+                   MakeUintegerAccessor (&RedQueueDisc::m_meanPktSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("IdlePktSize",
+                   "Average packet size used during idle times. Used when m_cautions = 3",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RedQueueDisc::m_idlePktSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("Wait",
+                   "True for waiting between dropped packets",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&RedQueueDisc::m_isWait),
+                   MakeBooleanChecker ())
+    .AddAttribute ("Gentle",
+                   "True to increases dropping probability slowly when average queue exceeds maxthresh",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&RedQueueDisc::m_isGentle),
+                   MakeBooleanChecker ())
+    .AddAttribute ("ARED",
+                   "True to enable ARED",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&RedQueueDisc::m_isARED),
+                   MakeBooleanChecker ())
+    .AddAttribute ("AdaptMaxP",
+                   "True to adapt m_curMaxP",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&RedQueueDisc::m_isAdaptMaxP),
+                   MakeBooleanChecker ())
+    .AddAttribute ("MinTh",
+                   "Minimum average length threshold in packets/bytes",
+                   DoubleValue (5),
+                   MakeDoubleAccessor (&RedQueueDisc::m_minTh),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("MaxTh",
+                   "Maximum average length threshold in packets/bytes",
+                   DoubleValue (15),
+                   MakeDoubleAccessor (&RedQueueDisc::m_maxTh),
+                   MakeDoubleChecker<double> ())
+    .AddAttribute ("QueueLimit",
+                   "Queue limit in bytes/packets",
+                   UintegerValue (25),
+                   MakeUintegerAccessor (&RedQueueDisc::SetQueueLimit),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("QW",
+                   "Queue weight related to the exponential weighted moving average (EWMA)",
+                   DoubleValue (0.002),
+                   MakeDoubleAccessor (&RedQueueDisc::m_qW),
+                   MakeDoubleChecker <double> ())
+    .AddAttribute ("LInterm",
+                   "The maximum probability of dropping a packet",
+                   DoubleValue (50),
+                   MakeDoubleAccessor (&RedQueueDisc::m_lInterm),
+                   MakeDoubleChecker <double> ())
+    .AddAttribute ("TargetDelay",
+                   "Target average queuing delay in ARED",
+                   TimeValue (Seconds (0.005)),
+                   MakeTimeAccessor (&RedQueueDisc::m_targetDelay),
+                   MakeTimeChecker ())
+    .AddAttribute ("Interval",
+                   "Time interval to update m_curMaxP",
+                   TimeValue (Seconds (0.5)),
+                   MakeTimeAccessor (&RedQueueDisc::m_interval),
+                   MakeTimeChecker ())
+    .AddAttribute ("Top",
+                   "Upper bound for m_curMaxP in ARED",
+                   DoubleValue (0.5),
+                   MakeDoubleAccessor (&RedQueueDisc::m_top),
+                   MakeDoubleChecker <double> (0, 1))
+    .AddAttribute ("Bottom",
+                   "Lower bound for m_curMaxP in ARED",
+                   DoubleValue (0.0),
+                   MakeDoubleAccessor (&RedQueueDisc::m_bottom),
+                   MakeDoubleChecker <double> (0, 1))
+    .AddAttribute ("Alpha",
+                   "Increment parameter for m_curMaxP in ARED",
+                   DoubleValue (0.01),
+                   MakeDoubleAccessor (&RedQueueDisc::SetAredAlpha),
+                   MakeDoubleChecker <double> (0, 1))
+    .AddAttribute ("Beta",
+                   "Decrement parameter for m_curMaxP in ARED",
+                   DoubleValue (0.9),
+                   MakeDoubleAccessor (&RedQueueDisc::SetAredBeta),
+                   MakeDoubleChecker <double> (0, 1))
+    .AddAttribute ("LastSet",
+                   "Store the last time m_curMaxP was updated",
+                   TimeValue (Seconds (0.0)),
+                   MakeTimeAccessor (&RedQueueDisc::m_lastSet),
+                   MakeTimeChecker ())
+    .AddAttribute ("Rtt",
+                   "Round Trip Time to be considered while automatically setting m_bottom",
+                   TimeValue (Seconds (0.1)),
+                   MakeTimeAccessor (&RedQueueDisc::m_rtt),
+                   MakeTimeChecker ())
+    .AddAttribute ("Ns1Compat",
+                   "NS-1 compatibility",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&RedQueueDisc::m_isNs1Compat),
+                   MakeBooleanChecker ())
+    .AddAttribute ("LinkBandwidth", 
+                   "The RED link bandwidth",
+                   DataRateValue (DataRate ("1.5Mbps")),
+                   MakeDataRateAccessor (&RedQueueDisc::m_linkBandwidth),
+                   MakeDataRateChecker ())
+    .AddAttribute ("LinkDelay", 
+                   "The RED link delay",
+                   TimeValue (MilliSeconds (20)),
+                   MakeTimeAccessor (&RedQueueDisc::m_linkDelay),
+                   MakeTimeChecker ())
+  ;
+
+  return tid;
+}
+
+RedQueueDisc::RedQueueDisc () :
+  QueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+  m_uv = CreateObject<UniformRandomVariable> ();
+}
+
+RedQueueDisc::~RedQueueDisc ()
+{
+  NS_LOG_FUNCTION (this);
+}
+
+void
+RedQueueDisc::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_uv = 0;
+  QueueDisc::DoDispose ();
+}
+
+void
+RedQueueDisc::SetMode (Queue::QueueMode mode)
+{
+  NS_LOG_FUNCTION (this << mode);
+  m_mode = mode;
+}
+
+Queue::QueueMode
+RedQueueDisc::GetMode (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_mode;
+}
+
+void
+RedQueueDisc::SetAredAlpha (double alpha)
+{
+  NS_LOG_FUNCTION (this << alpha);
+  m_alpha = alpha;
+
+  if (m_alpha > 0.01)
+    {
+      NS_LOG_WARN ("Alpha value is above the recommended bound!");
+    }
+}
+
+double
+RedQueueDisc::GetAredAlpha (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_alpha;
+}
+
+void
+RedQueueDisc::SetAredBeta (double beta)
+{
+  NS_LOG_FUNCTION (this << beta);
+  m_beta = beta;
+
+  if (m_beta < 0.83)
+    {
+      NS_LOG_WARN ("Beta value is below the recommended bound!");
+    }
+}
+
+double
+RedQueueDisc::GetAredBeta (void)
+{
+  NS_LOG_FUNCTION (this);
+  return m_beta;
+}
+
+void
+RedQueueDisc::SetQueueLimit (uint32_t lim)
+{
+  NS_LOG_FUNCTION (this << lim);
+  m_queueLimit = lim;
+}
+
+void
+RedQueueDisc::SetTh (double minTh, double maxTh)
+{
+  NS_LOG_FUNCTION (this << minTh << maxTh);
+  NS_ASSERT (minTh <= maxTh);
+  m_minTh = minTh;
+  m_maxTh = maxTh;
+}
+
+RedQueueDisc::Stats
+RedQueueDisc::GetStats ()
+{
+  NS_LOG_FUNCTION (this);
+  return m_stats;
+}
+
+int64_t 
+RedQueueDisc::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  m_uv->SetStream (stream);
+  return 1;
+}
+
+bool
+RedQueueDisc::DoEnqueue (Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << item);
+
+  uint32_t nQueued = 0;
+
+  if (GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      NS_LOG_DEBUG ("Enqueue in bytes mode");
+      nQueued = GetInternalQueue (0)->GetNBytes ();
+    }
+  else if (GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      NS_LOG_DEBUG ("Enqueue in packets mode");
+      nQueued = GetInternalQueue (0)->GetNPackets ();
+    }
+
+  // simulate number of packets arrival during idle period
+  uint32_t m = 0;
+
+  if (m_idle == 1)
+    {
+      NS_LOG_DEBUG ("RED Queue Disc is idle.");
+      Time now = Simulator::Now ();
+
+      if (m_cautious == 3)
+        {
+          double ptc = m_ptc * m_meanPktSize / m_idlePktSize;
+          m = uint32_t (ptc * (now - m_idleTime).GetSeconds ());
+        }
+      else
+        {
+          m = uint32_t (m_ptc * (now - m_idleTime).GetSeconds ());
+        }
+
+      m_idle = 0;
+    }
+
+  m_qAvg = Estimator (nQueued, m + 1, m_qAvg, m_qW);
+
+  NS_LOG_DEBUG ("\t bytesInQueue  " << GetInternalQueue (0)->GetNBytes () << "\tQavg " << m_qAvg);
+  NS_LOG_DEBUG ("\t packetsInQueue  " << GetInternalQueue (0)->GetNPackets () << "\tQavg " << m_qAvg);
+
+  m_count++;
+  m_countBytes += item->GetPacketSize ();
+
+  uint32_t dropType = DTYPE_NONE;
+  if (m_qAvg >= m_minTh && nQueued > 1)
+    {
+      if ((!m_isGentle && m_qAvg >= m_maxTh) ||
+          (m_isGentle && m_qAvg >= 2 * m_maxTh))
+        {
+          NS_LOG_DEBUG ("adding DROP FORCED MARK");
+          dropType = DTYPE_FORCED;
+        }
+      else if (m_old == 0)
+        {
+          /* 
+           * The average queue size has just crossed the
+           * threshold from below to above "minthresh", or
+           * from above "minthresh" with an empty queue to
+           * above "minthresh" with a nonempty queue.
+           */
+          m_count = 1;
+          m_countBytes = item->GetPacketSize ();
+          m_old = 1;
+        }
+      else if (DropEarly (item, nQueued))
+        {
+          NS_LOG_LOGIC ("DropEarly returns 1");
+          dropType = DTYPE_UNFORCED;
+        }
+    }
+  else 
+    {
+      // No packets are being dropped
+      m_vProb = 0.0;
+      m_old = 0;
+    }
+
+  if ((GetMode () == Queue::QUEUE_MODE_PACKETS && nQueued >= m_queueLimit) ||
+      (GetMode () == Queue::QUEUE_MODE_BYTES && nQueued + item->GetPacketSize() > m_queueLimit))
+    {
+      NS_LOG_DEBUG ("\t Dropping due to Queue Full " << nQueued);
+      dropType = DTYPE_FORCED;
+      m_stats.qLimDrop++;
+    }
+
+  if (dropType == DTYPE_UNFORCED)
+    {
+      NS_LOG_DEBUG ("\t Dropping due to Prob Mark " << m_qAvg);
+      m_stats.unforcedDrop++;
+      Drop (item);
+      return false;
+    }
+  else if (dropType == DTYPE_FORCED)
+    {
+      NS_LOG_DEBUG ("\t Dropping due to Hard Mark " << m_qAvg);
+      m_stats.forcedDrop++;
+      Drop (item);
+      if (m_isNs1Compat)
+        {
+          m_count = 0;
+          m_countBytes = 0;
+        }
+      return false;
+    }
+
+  GetInternalQueue (0)->Enqueue (item);
+
+  NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
+  NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
+
+  return true;
+}
+
+/*
+ * Note: if the link bandwidth changes in the course of the
+ * simulation, the bandwidth-dependent RED parameters do not change.
+ * This should be fixed, but it would require some extra parameters,
+ * and didn't seem worth the trouble...
+ */
+void
+RedQueueDisc::InitializeParams (void)
+{
+  NS_LOG_FUNCTION (this);
+  NS_LOG_INFO ("Initializing RED params.");
+
+  m_cautious = 0;
+  m_ptc = m_linkBandwidth.GetBitRate () / (8.0 * m_meanPktSize);
+
+  if (m_isARED)
+    {
+      // Set m_minTh, m_maxTh and m_qW to zero for automatic setting
+      m_minTh = 0;
+      m_maxTh = 0;
+      m_qW = 0;
+
+      // Turn on m_isAdaptMaxP to adapt m_curMaxP
+      m_isAdaptMaxP = true;
+    }
+
+  if (m_minTh == 0 && m_maxTh == 0)
+    {
+      m_minTh = 5.0;
+
+      // set m_minTh to max(m_minTh, targetqueue/2.0) [Ref: http://www.icir.org/floyd/papers/adaptiveRed.pdf]
+      double targetqueue = m_targetDelay.GetSeconds() * m_ptc;
+
+      if (m_minTh < targetqueue / 2.0 )
+        {
+          m_minTh = targetqueue / 2.0;
+        }
+      if (GetMode () == Queue::QUEUE_MODE_BYTES)
+        {
+          m_minTh = m_minTh * m_meanPktSize;
+        }
+
+      // set m_maxTh to three times m_minTh [Ref: http://www.icir.org/floyd/papers/adaptiveRed.pdf]
+      m_maxTh = 3 * m_minTh;
+    }
+
+  NS_ASSERT (m_minTh <= m_maxTh);
+  m_stats.forcedDrop = 0;
+  m_stats.unforcedDrop = 0;
+  m_stats.qLimDrop = 0;
+
+  m_qAvg = 0.0;
+  m_count = 0;
+  m_countBytes = 0;
+  m_old = 0;
+  m_idle = 1;
+
+  double th_diff = (m_maxTh - m_minTh);
+  if (th_diff == 0)
+    {
+      th_diff = 1.0; 
+    }
+  m_vA = 1.0 / th_diff;
+  m_curMaxP = 1.0 / m_lInterm;
+  m_vB = -m_minTh / th_diff;
+
+  if (m_isGentle)
+    {
+      m_vC = (1.0 - m_curMaxP) / m_maxTh;
+      m_vD = 2.0 * m_curMaxP - 1.0;
+    }
+  m_idleTime = NanoSeconds (0);
+
+/*
+ * If m_qW=0, set it to a reasonable value of 1-exp(-1/C)
+ * This corresponds to choosing m_qW to be of that value for
+ * which the packet time constant -1/ln(1-m)qW) per default RTT 
+ * of 100ms is an order of magnitude more than the link capacity, C.
+ *
+ * If m_qW=-1, then the queue weight is set to be a function of
+ * the bandwidth and the link propagation delay.  In particular, 
+ * the default RTT is assumed to be three times the link delay and 
+ * transmission delay, if this gives a default RTT greater than 100 ms. 
+ *
+ * If m_qW=-2, set it to a reasonable value of 1-exp(-10/C).
+ */
+  if (m_qW == 0.0)
+    {
+      m_qW = 1.0 - std::exp (-1.0 / m_ptc);
+    }
+  else if (m_qW == -1.0)
+    {
+      double rtt = 3.0 * (m_linkDelay.GetSeconds () + 1.0 / m_ptc);
+
+      if (rtt < 0.1)
+        {
+          rtt = 0.1;
+        }
+      m_qW = 1.0 - std::exp (-1.0 / (10 * rtt * m_ptc));
+    }
+  else if (m_qW == -2.0)
+    {
+      m_qW = 1.0 - std::exp (-10.0 / m_ptc);
+    }
+
+  if (m_bottom == 0)
+    {
+      m_bottom = 0.01;
+      // Set bottom to at most 1/W, where W is the delay-bandwidth
+      // product in packets for a connection.
+      // So W = m_linkBandwidth.GetBitRate () / (8.0 * m_meanPktSize * m_rtt.GetSeconds())
+      double bottom1 = (8.0 * m_meanPktSize * m_rtt.GetSeconds()) / m_linkBandwidth.GetBitRate();
+      if (bottom1 < m_bottom)
+        {
+          m_bottom = bottom1;
+        }
+    }
+
+  NS_LOG_DEBUG ("\tm_delay " << m_linkDelay.GetSeconds () << "; m_isWait " 
+                             << m_isWait << "; m_qW " << m_qW << "; m_ptc " << m_ptc
+                             << "; m_minTh " << m_minTh << "; m_maxTh " << m_maxTh
+                             << "; m_isGentle " << m_isGentle << "; th_diff " << th_diff
+                             << "; lInterm " << m_lInterm << "; va " << m_vA <<  "; cur_max_p "
+                             << m_curMaxP << "; v_b " << m_vB <<  "; m_vC "
+                             << m_vC << "; m_vD " <<  m_vD);
+}
+
+// Update m_curMaxP to keep the average queue length within the target range.
+void
+RedQueueDisc::UpdateMaxP (double newAve, Time now)
+{
+  double m_part = 0.4 * (m_maxTh - m_minTh);
+  // AIMD rule to keep target Q~1/2(m_minTh + m_maxTh)
+  if (newAve < m_minTh + m_part && m_curMaxP > m_bottom)
+    {
+      // we should increase the average queue size, so decrease m_curMaxP
+      m_curMaxP = m_curMaxP * m_beta;
+      m_lastSet = now;
+    }
+  else if (newAve > m_maxTh - m_part && m_top > m_curMaxP)
+    {
+      // we should decrease the average queue size, so increase m_curMaxP
+      double alpha = m_alpha;
+      if (alpha > 0.25 * m_curMaxP)
+        {
+          alpha = 0.25 * m_curMaxP;
+        }
+      m_curMaxP = m_curMaxP + alpha;
+      m_lastSet = now;
+    }
+}
+
+// Compute the average queue size
+double
+RedQueueDisc::Estimator (uint32_t nQueued, uint32_t m, double qAvg, double qW)
+{
+  NS_LOG_FUNCTION (this << nQueued << m << qAvg << qW);
+
+  double newAve = qAvg * pow(1.0-qW, m);
+  newAve += qW * nQueued;
+
+  Time now = Simulator::Now();
+  if (m_isAdaptMaxP && now > m_lastSet + m_interval)
+    {
+      UpdateMaxP(newAve, now);
+    }
+
+  return newAve;
+}
+
+// Check if packet p needs to be dropped due to probability mark
+uint32_t
+RedQueueDisc::DropEarly (Ptr<QueueDiscItem> item, uint32_t qSize)
+{
+  NS_LOG_FUNCTION (this << item << qSize);
+  m_vProb1 = CalculatePNew (m_qAvg, m_maxTh, m_isGentle, m_vA, m_vB, m_vC, m_vD, m_curMaxP);
+  m_vProb = ModifyP (m_vProb1, m_count, m_countBytes, m_meanPktSize, m_isWait, item->GetPacketSize ());
+
+  // Drop probability is computed, pick random number and act
+  if (m_cautious == 1)
+    {
+      /*
+       * Don't drop/mark if the instantaneous queue is much below the average.
+       * For experimental purposes only.
+       * pkts: the number of packets arriving in 50 ms
+       */
+      double pkts = m_ptc * 0.05;
+      double fraction = std::pow ((1 - m_qW), pkts);
+
+      if ((double) qSize < fraction * m_qAvg)
+        {
+          // Queue could have been empty for 0.05 seconds
+          return 0;
+        }
+    }
+
+  double u = m_uv->GetValue ();
+
+  if (m_cautious == 2)
+    {
+      /*
+       * Decrease the drop probability if the instantaneous
+       * queue is much below the average.
+       * For experimental purposes only.
+       * pkts: the number of packets arriving in 50 ms
+       */
+      double pkts = m_ptc * 0.05;
+      double fraction = std::pow ((1 - m_qW), pkts);
+      double ratio = qSize / (fraction * m_qAvg);
+
+      if (ratio < 1.0)
+        {
+          u *= 1.0 / ratio;
+        }
+    }
+
+  if (u <= m_vProb)
+    {
+      NS_LOG_LOGIC ("u <= m_vProb; u " << u << "; m_vProb " << m_vProb);
+
+      // DROP or MARK
+      m_count = 0;
+      m_countBytes = 0;
+      /// \todo Implement set bit to mark
+
+      return 1; // drop
+    }
+
+  return 0; // no drop/mark
+}
+
+// Returns a probability using these function parameters for the DropEarly funtion
+double
+RedQueueDisc::CalculatePNew (double qAvg, double maxTh, bool isGentle, double vA,
+                         double vB, double vC, double vD, double maxP)
+{
+  NS_LOG_FUNCTION (this << qAvg << maxTh << isGentle << vA << vB << vC << vD << maxP);
+  double p;
+
+  if (isGentle && qAvg >= maxTh)
+    {
+      // p ranges from maxP to 1 as the average queue
+      // Size ranges from maxTh to twice maxTh
+      p = vC * qAvg + vD;
+    }
+  else if (!isGentle && qAvg >= maxTh)
+    {
+      /* 
+       * OLD: p continues to range linearly above max_p as
+       * the average queue size ranges above th_max.
+       * NEW: p is set to 1.0
+       */
+      p = 1.0;
+    }
+  else
+    {
+      /*
+       * p ranges from 0 to max_p as the average queue size ranges from
+       * th_min to th_max
+       */
+      p = vA * qAvg + vB;
+      p *= maxP;
+    }
+
+  if (p > 1.0)
+    {
+      p = 1.0;
+    }
+
+  return p;
+}
+
+// Returns a probability using these function parameters for the DropEarly funtion
+double 
+RedQueueDisc::ModifyP (double p, uint32_t count, uint32_t countBytes,
+                   uint32_t meanPktSize, bool isWait, uint32_t size)
+{
+  NS_LOG_FUNCTION (this << p << count << countBytes << meanPktSize << isWait << size);
+  double count1 = (double) count;
+
+  if (GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      count1 = (double) (countBytes / meanPktSize);
+    }
+
+  if (isWait)
+    {
+      if (count1 * p < 1.0)
+        {
+          p = 0.0;
+        }
+      else if (count1 * p < 2.0)
+        {
+          p /= (2.0 - count1 * p);
+        }
+      else
+        {
+          p = 1.0;
+        }
+    }
+  else
+    {
+      if (count1 * p < 1.0)
+        {
+          p /= (1.0 - count1 * p);
+        }
+      else
+        {
+          p = 1.0;
+        }
+    }
+
+  if ((GetMode () == Queue::QUEUE_MODE_BYTES) && (p < 1.0))
+    {
+      p = (p * size) / meanPktSize;
+    }
+
+  if (p > 1.0)
+    {
+      p = 1.0;
+    }
+
+  return p;
+}
+
+uint32_t
+RedQueueDisc::GetQueueSize (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      return GetInternalQueue (0)->GetNBytes ();
+    }
+  else if (GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      return GetInternalQueue (0)->GetNPackets ();
+    }
+  else
+    {
+      NS_ABORT_MSG ("Unknown RED mode.");
+    }
+}
+
+Ptr<QueueDiscItem>
+RedQueueDisc::DoDequeue (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  if (GetInternalQueue (0)->IsEmpty ())
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      m_idle = 1;
+      m_idleTime = Simulator::Now ();
+
+      return 0;
+    }
+  else
+    {
+      m_idle = 0;
+      Ptr<QueueDiscItem> item = StaticCast<QueueDiscItem> (GetInternalQueue (0)->Dequeue ());
+
+      NS_LOG_LOGIC ("Popped " << item);
+
+      NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
+      NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
+
+      return item;
+    }
+}
+
+Ptr<const QueueDiscItem>
+RedQueueDisc::DoPeek (void) const
+{
+  NS_LOG_FUNCTION (this);
+  if (GetInternalQueue (0)->IsEmpty ())
+    {
+      NS_LOG_LOGIC ("Queue empty");
+      return 0;
+    }
+
+  Ptr<const QueueDiscItem> item = StaticCast<const QueueDiscItem> (GetInternalQueue (0)->Peek ());
+
+  NS_LOG_LOGIC ("Number packets " << GetInternalQueue (0)->GetNPackets ());
+  NS_LOG_LOGIC ("Number bytes " << GetInternalQueue (0)->GetNBytes ());
+
+  return item;
+}
+
+bool
+RedQueueDisc::CheckConfig (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetNQueueDiscClasses () > 0)
+    {
+      NS_LOG_ERROR ("RedQueueDisc cannot have classes");
+      return false;
+    }
+
+  if (GetNPacketFilters () > 0)
+    {
+      NS_LOG_ERROR ("RedQueueDisc cannot have packet filters");
+      return false;
+    }
+
+  if (GetNInternalQueues () == 0)
+    {
+      // create a DropTail queue
+      Ptr<Queue> queue = CreateObjectWithAttributes<DropTailQueue> ("Mode", EnumValue (m_mode));
+      if (m_mode == Queue::QUEUE_MODE_PACKETS)
+        {
+          queue->SetMaxPackets (m_queueLimit);
+        }
+      else
+        {
+          queue->SetMaxBytes (m_queueLimit);
+        }
+      AddInternalQueue (queue);
+    }
+
+  if (GetNInternalQueues () != 1)
+    {
+      NS_LOG_ERROR ("RedQueueDisc needs 1 internal queue");
+      return false;
+    }
+
+  if (GetInternalQueue (0)->GetMode () != m_mode)
+    {
+      NS_LOG_ERROR ("The mode of the provided queue does not match the mode set on the RedQueueDisc");
+      return false;
+    }
+
+  if ((m_mode ==  Queue::QUEUE_MODE_PACKETS && GetInternalQueue (0)->GetMaxPackets () < m_queueLimit) ||
+      (m_mode ==  Queue::QUEUE_MODE_BYTES && GetInternalQueue (0)->GetMaxBytes () < m_queueLimit))
+    {
+      NS_LOG_ERROR ("The size of the internal queue is less than the queue disc limit");
+      return false;
+    }
+
+  return true;
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/model/red-queue-disc.h ns-3.25/src/traffic-control/model/red-queue-disc.h
--- ns-3.24.1/src/traffic-control/model/red-queue-disc.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/red-queue-disc.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,331 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright © 2011 Marcos Talau
+ *
+ * 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: Marcos Talau (talau@users.sourceforge.net)
+ *
+ * Thanks to: Duy Nguyen<duy@soe.ucsc.edu> by RED efforts in NS3
+ *
+ *
+ * This file incorporates work covered by the following copyright and
+ * permission notice:
+ *
+ * Copyright (c) 1990-1997 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor of the Laboratory may be used
+ *    to endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * PORT NOTE: This code was ported from ns-2 (queue/red.h).  Almost all
+ * comments also been ported from NS-2.
+ * This implementation aims to be close to the results cited in [0]
+ * [0] S.Floyd, K.Fall http://icir.org/floyd/papers/redsims.ps
+ */
+
+#ifndef RED_QUEUE_DISC_H
+#define RED_QUEUE_DISC_H
+
+#include "ns3/packet.h"
+#include "ns3/queue-disc.h"
+#include "ns3/nstime.h"
+#include "ns3/boolean.h"
+#include "ns3/data-rate.h"
+#include "ns3/nstime.h"
+#include "ns3/random-variable-stream.h"
+
+namespace ns3 {
+
+class TraceContainer;
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief A RED packet queue disc
+ */
+class RedQueueDisc : public QueueDisc
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+  /**
+   * \brief RedQueueDisc Constructor
+   *
+   * Create a RED queue disc
+   */
+  RedQueueDisc ();
+
+  /**
+   * \brief Destructor
+   *
+   * Destructor
+   */ 
+  virtual ~RedQueueDisc ();
+
+  /**
+   * \brief Stats
+   */
+  typedef struct
+  {   
+    uint32_t unforcedDrop;  //!< Early probability drops
+    uint32_t forcedDrop;    //!< Forced drops, qavg > max threshold
+    uint32_t qLimDrop;      //!< Drops due to queue limits
+  } Stats;
+
+  /** 
+   * \brief Drop types
+   */
+  enum
+  {
+    DTYPE_NONE,        //!< Ok, no drop
+    DTYPE_FORCED,      //!< A "forced" drop
+    DTYPE_UNFORCED,    //!< An "unforced" (random) drop
+  };
+
+  /**
+   * \brief Set the operating mode of this queue.
+   *  Set operating mode
+   *
+   * \param mode The operating mode of this queue.
+   */
+  void SetMode (Queue::QueueMode mode);
+
+  /**
+   * \brief Get the encapsulation mode of this queue.
+   * Get the encapsulation mode of this queue
+   *
+   * \returns The encapsulation mode of this queue.
+   */
+  Queue::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 Set the alpha value to adapt m_curMaxP.
+    *
+    * \param alpha The value of alpha to adapt m_curMaxP.
+    */
+   void SetAredAlpha (double alpha);
+
+   /**
+    * \brief Get the alpha value to adapt m_curMaxP.
+    *
+    * \returns The alpha value to adapt m_curMaxP.
+    */
+   double GetAredAlpha (void);
+
+   /**
+    * \brief Set the beta value to adapt m_curMaxP.
+    *
+    * \param beta The value of beta to adapt m_curMaxP.
+    */
+   void SetAredBeta (double beta);
+
+   /**
+    * \brief Get the beta value to adapt m_curMaxP.
+    *
+    * \returns The beta value to adapt m_curMaxP.
+    */
+   double GetAredBeta (void);
+
+  /**
+   * \brief Set the limit of the queue.
+   *
+   * \param lim The limit in bytes or packets.
+   */
+  void SetQueueLimit (uint32_t lim);
+
+  /**
+   * \brief Set the thresh limits of RED.
+   *
+   * \param minTh Minimum thresh in bytes or packets.
+   * \param maxTh Maximum thresh in bytes or packets.
+   */
+  void SetTh (double minTh, double maxTh);
+
+  /**
+   * \brief Get the RED statistics after running.
+   *
+   * \returns The drop statistics.
+   */
+  Stats GetStats ();
+
+ /**
+  * 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 of the object
+   */
+  virtual void DoDispose (void);
+
+private:
+  virtual bool DoEnqueue (Ptr<QueueDiscItem> item);
+  virtual Ptr<QueueDiscItem> DoDequeue (void);
+  virtual Ptr<const QueueDiscItem> DoPeek (void) const;
+  virtual bool CheckConfig (void);
+
+  /**
+   * \brief Initialize the queue parameters.
+   *
+   * Note: if the link bandwidth changes in the course of the
+   * simulation, the bandwidth-dependent RED parameters do not change.
+   * This should be fixed, but it would require some extra parameters,
+   * and didn't seem worth the trouble...
+   */
+  virtual void InitializeParams (void);
+  /**
+   * \brief Compute the average queue size
+   * \param nQueued number of queued packets
+   * \param m simulated number of packets arrival during idle period
+   * \param qAvg average queue size
+   * \param qW queue weight given to cur q size sample
+   * \returns new average queue size
+   */
+  double Estimator (uint32_t nQueued, uint32_t m, double qAvg, double qW);
+   /**
+    * \brief Update m_curMaxP
+    * \param newAve new average queue length
+    * \param now Current Time
+    */
+  void UpdateMaxP (double newAve, Time now);
+  /**
+   * \brief Check if a packet needs to be dropped due to probability mark
+   * \param item queue item
+   * \param qSize queue size
+   * \returns 0 for no drop/mark, 1 for drop
+   */
+  uint32_t DropEarly (Ptr<QueueDiscItem> item, uint32_t qSize);
+  /**
+   * \brief Returns a probability using these function parameters for the DropEarly function
+   * \param qAvg Average queue length
+   * \param maxTh Max avg length threshold
+   * \param gentle "gentle" algorithm
+   * \param vA vA
+   * \param vB vB
+   * \param vC vC
+   * \param vD vD
+   * \param maxP max_p
+   * \returns Prob. of packet drop before "count"
+   */
+  double CalculatePNew (double qAvg, double , bool gentle, double vA,
+                        double vB, double vC, double vD, double maxP);
+  /**
+   * \brief Returns a probability using these function parameters for the DropEarly function
+   * \param p Prob. of packet drop before "count"
+   * \param count number of packets since last random number generation
+   * \param countBytes number of bytes since last drop
+   * \param meanPktSize Avg pkt size
+   * \param wait True for waiting between dropped packets
+   * \param size packet size
+   * \returns Prob. of packet drop
+   */
+  double ModifyP (double p, uint32_t count, uint32_t countBytes,
+                  uint32_t meanPktSize, bool wait, uint32_t size);
+
+  Stats m_stats; //!< RED statistics
+
+  // ** Variables supplied by user
+  Queue::QueueMode m_mode;  //!< Mode (Bytes or packets)
+  uint32_t m_meanPktSize;   //!< Avg pkt size
+  uint32_t m_idlePktSize;   //!< Avg pkt size used during idle times
+  bool m_isWait;            //!< True for waiting between dropped packets
+  bool m_isGentle;          //!< True to increases dropping prob. slowly when ave queue exceeds maxthresh
+  bool m_isARED;            //!< True to enable Adaptive RED
+  bool m_isAdaptMaxP;       //!< True to adapt m_curMaxP
+  double m_minTh;           //!< Min avg length threshold (bytes)
+  double m_maxTh;           //!< Max avg length threshold (bytes), should be >= 2*minTh
+  uint32_t m_queueLimit;    //!< Queue limit in bytes / packets
+  double m_qW;              //!< Queue weight given to cur queue size sample
+  double m_lInterm;         //!< The max probability of dropping a packet
+  Time m_targetDelay;       //!< Target average queuing delay in ARED
+  Time m_interval;          //!< Time interval to update m_curMaxP
+  double m_top;             //!< Upper bound for m_curMaxP in ARED
+  double m_bottom;          //!< Lower bound for m_curMaxP in ARED
+  double m_alpha;           //!< Increment parameter for m_curMaxP in ARED
+  double m_beta;            //!< Decrement parameter for m_curMaxP in ARED
+  Time m_rtt;               //!< Rtt to be considered while automatically setting m_bottom in ARED
+  bool m_isNs1Compat;       //!< Ns-1 compatibility
+  DataRate m_linkBandwidth; //!< Link bandwidth
+  Time m_linkDelay;         //!< Link delay
+
+  // ** Variables maintained by RED
+  double m_vProb1;          //!< Prob. of packet drop before "count"
+  double m_vA;              //!< 1.0 / (m_maxTh - m_minTh)
+  double m_vB;              //!< -m_minTh / (m_maxTh - m_minTh)
+  double m_vC;              //!< (1.0 - m_curMaxP) / m_maxTh - used in "gentle" mode
+  double m_vD;              //!< 2.0 * m_curMaxP - 1.0 - used in "gentle" mode
+  double m_curMaxP;         //!< Current max_p
+  Time m_lastSet;           //!< Last time m_curMaxP was updated
+  double m_vProb;           //!< Prob. of packet drop
+  uint32_t m_countBytes;    //!< Number of bytes since last drop
+  uint32_t m_old;           //!< 0 when average queue first exceeds threshold
+  uint32_t m_idle;          //!< 0/1 idle status
+  double m_ptc;             //!< packet time constant in packets/second
+  double m_qAvg;            //!< Average queue length
+  uint32_t m_count;         //!< Number of packets since last random number generation
+  /**
+   * 0 for default RED
+   * 1 experimental (see red-queue.cc)
+   * 2 experimental (see red-queue.cc)
+   * 3 use Idle packet size in the ptc
+   */
+  uint32_t m_cautious;
+  Time m_idleTime;          //!< Start of current idle period
+
+  Ptr<UniformRandomVariable> m_uv;  //!< rng stream
+};
+
+}; // namespace ns3
+
+#endif // RED_QUEUE_DISC_H
diff -Naur ns-3.24.1/src/traffic-control/model/traffic-control-layer.cc ns-3.25/src/traffic-control/model/traffic-control-layer.cc
--- ns-3.24.1/src/traffic-control/model/traffic-control-layer.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/traffic-control-layer.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,317 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *               2016 Stefano Avallone <stavallo@unina.it>
+ *
+ * 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 "traffic-control-layer.h"
+#include "ns3/log.h"
+#include "ns3/object-vector.h"
+#include "ns3/packet.h"
+#include "ns3/queue-disc.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("TrafficControlLayer");
+
+NS_OBJECT_ENSURE_REGISTERED (TrafficControlLayer);
+
+TypeId
+TrafficControlLayer::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::TrafficControlLayer")
+    .SetParent<Object> ()
+    .SetGroupName ("TrafficControl")
+    .AddConstructor<TrafficControlLayer> ()
+    .AddAttribute ("RootQueueDiscList", "The list of root queue discs associated to this Traffic Control layer.",
+                   ObjectVectorValue (),
+                   MakeObjectVectorAccessor (&TrafficControlLayer::m_rootQueueDiscs),
+                   MakeObjectVectorChecker<QueueDisc> ())
+  ;
+  return tid;
+}
+
+TypeId
+TrafficControlLayer::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+TrafficControlLayer::TrafficControlLayer ()
+  : Object ()
+{
+  NS_LOG_FUNCTION_NOARGS ();
+}
+
+void
+TrafficControlLayer::DoDispose (void)
+{
+  NS_LOG_FUNCTION (this);
+  m_node = 0;
+  m_rootQueueDiscs.clear ();
+  m_handlers.clear ();
+  m_netDeviceQueueToQueueDiscMap.clear ();
+  Object::DoDispose ();
+}
+
+void
+TrafficControlLayer::DoInitialize (void)
+{
+  NS_LOG_FUNCTION (this);
+  for (uint32_t j = 0; j < m_rootQueueDiscs.size (); j++)
+    {
+      if (m_rootQueueDiscs[j])
+        {
+          Ptr<NetDevice> device = m_node->GetDevice (j);
+          // NetDevices supporting flow control can set the number of device transmission
+          // queues through the NetDevice queue interface during initialization. Thus,
+          // ensure that the device has completed initialization
+          device->Initialize ();
+
+          std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator qdMap = m_netDeviceQueueToQueueDiscMap.find (device);
+          NS_ASSERT (qdMap != m_netDeviceQueueToQueueDiscMap.end ());
+          Ptr<NetDeviceQueueInterface> devQueueIface = qdMap->second.first;
+          NS_ASSERT (devQueueIface);
+
+          devQueueIface->SetQueueDiscInstalled (true);
+
+          // set the wake callbacks on netdevice queues
+           if (m_rootQueueDiscs[j]->GetWakeMode () == QueueDisc::WAKE_ROOT)
+            {
+              for (uint32_t i = 0; i < devQueueIface->GetTxQueuesN (); i++)
+                {
+                  devQueueIface->GetTxQueue (i)->SetWakeCallback (MakeCallback (&QueueDisc::Run, m_rootQueueDiscs[j]));
+                  qdMap->second.second.push_back (m_rootQueueDiscs[j]);
+                }
+            }
+          else if (m_rootQueueDiscs[j]->GetWakeMode () == QueueDisc::WAKE_CHILD)
+            {
+              NS_ASSERT_MSG (m_rootQueueDiscs[j]->GetNQueueDiscClasses () == devQueueIface->GetTxQueuesN (),
+                             "The number of child queue discs does not match the number of netdevice queues");
+              for (uint32_t i = 0; i < devQueueIface->GetTxQueuesN (); i++)
+                {
+                  devQueueIface->GetTxQueue (i)->SetWakeCallback (MakeCallback (&QueueDisc::Run,
+                                                                  m_rootQueueDiscs[j]->GetQueueDiscClass (i)->GetQueueDisc ()));
+                  qdMap->second.second.push_back (m_rootQueueDiscs[j]->GetQueueDiscClass (i)->GetQueueDisc ());
+                }
+            }
+
+          // initialize the queue disc
+          m_rootQueueDiscs[j]->Initialize ();
+        }
+    }
+  Object::DoInitialize ();
+}
+
+void
+TrafficControlLayer::SetupDevice (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+
+  // ensure this setup is done just once (in case of dual stack nodes)
+  if (device->GetObject<NetDeviceQueueInterface> ())
+    {
+      NS_LOG_DEBUG ("The setup for this device has been already done.");
+      return;
+    }
+
+  // create a NetDeviceQueueInterface object and aggregate it to the device
+  Ptr<NetDeviceQueueInterface> devQueueIface = CreateObject<NetDeviceQueueInterface> ();
+  device->AggregateObject (devQueueIface);
+
+  // store a pointer to the created queue interface
+  NS_ASSERT_MSG (m_netDeviceQueueToQueueDiscMap.find (device) == m_netDeviceQueueToQueueDiscMap.end (),
+                 "This is a bug: SetupDevice should be called only once per device");
+
+  m_netDeviceQueueToQueueDiscMap[device] = NetDeviceInfo (devQueueIface, QueueDiscVector ());
+}
+
+void
+TrafficControlLayer::RegisterProtocolHandler (Node::ProtocolHandler handler,
+                                              uint16_t protocolType, Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << protocolType << device);
+
+  struct ProtocolHandlerEntry entry;
+  entry.handler = handler;
+  entry.protocol = protocolType;
+  entry.device = device;
+  entry.promiscuous = false;
+
+  m_handlers.push_back (entry);
+
+  NS_LOG_DEBUG ("Handler for NetDevice: " << device << " registered for protocol " <<
+                protocolType << ".");
+}
+
+void
+TrafficControlLayer::SetRootQueueDiscOnDevice (Ptr<NetDevice> device, Ptr<QueueDisc> qDisc)
+{
+  NS_LOG_FUNCTION (this << device);
+
+  uint32_t index = GetDeviceIndex (device);
+  NS_ASSERT_MSG (index < m_node->GetNDevices (), "The provided device does not belong to"
+                 << " the node which this TrafficControlLayer object is aggregated to"  );
+  if (index >= m_rootQueueDiscs.size ())
+    {
+      m_rootQueueDiscs.resize (index+1);
+    }
+
+  NS_ASSERT_MSG (m_rootQueueDiscs[index] == 0, "Cannot install a root queue disc on a "
+                 << "device already having one. Delete the existing queue disc first.");
+
+  m_rootQueueDiscs[index] = qDisc;
+}
+
+Ptr<QueueDisc>
+TrafficControlLayer::GetRootQueueDiscOnDevice (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+
+  uint32_t index = GetDeviceIndex (device);
+  NS_ASSERT_MSG (index < m_node->GetNDevices (), "The provided device does not belong to"
+                 << " the node which this TrafficControlLayer object is aggregated to"  );
+  if (index >= m_rootQueueDiscs.size ())
+    {
+      m_rootQueueDiscs.resize (index+1);
+    }
+  return m_rootQueueDiscs[index];
+}
+
+void
+TrafficControlLayer::DeleteRootQueueDiscOnDevice (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+
+  uint32_t index = GetDeviceIndex (device);
+  NS_ASSERT_MSG (index < m_node->GetNDevices (), "The provided device does not belong to"
+                 << " the node which this TrafficControlLayer object is aggregated to"  );
+
+  NS_ASSERT_MSG (index < m_rootQueueDiscs.size () && m_rootQueueDiscs[index] != 0, "No root queue disc"
+                 << " installed on device " << device);
+
+  // remove the root queue disc
+  m_rootQueueDiscs[index] = 0;
+}
+
+void
+TrafficControlLayer::SetNode (Ptr<Node> node)
+{
+  NS_LOG_FUNCTION (this << node);
+  m_node = node;
+}
+
+void
+TrafficControlLayer::NotifyNewAggregate ()
+{
+  NS_LOG_FUNCTION (this);
+  if (m_node == 0)
+    {
+      Ptr<Node> node = this->GetObject<Node> ();
+      //verify that it's a valid node and that
+      //the node was not set before
+      if (node != 0)
+        {
+          this->SetNode (node);
+        }
+    }
+  Object::NotifyNewAggregate ();
+}
+
+uint32_t
+TrafficControlLayer::GetDeviceIndex (Ptr<NetDevice> device)
+{
+  NS_LOG_FUNCTION (this << device);
+  uint32_t i;
+  for (i = 0; i < m_node->GetNDevices () && device != m_node->GetDevice (i); i++);
+  return i;
+}
+
+void
+TrafficControlLayer::Receive (Ptr<NetDevice> device, Ptr<const Packet> p,
+                              uint16_t protocol, const Address &from, const Address &to,
+                              NetDevice::PacketType packetType)
+{
+  NS_LOG_FUNCTION (this << device << p << protocol << from << to << packetType);
+
+  bool found = false;
+
+  for (ProtocolHandlerList::iterator i = m_handlers.begin ();
+       i != m_handlers.end (); i++)
+    {
+      if (i->device == 0
+          || (i->device != 0 && i->device == device))
+        {
+          if (i->protocol == 0
+              || i->protocol == protocol)
+            {
+              NS_LOG_DEBUG ("Found handler for packet " << p << ", protocol " <<
+                            protocol << " and NetDevice " << device <<
+                            ". Send packet up");
+              i->handler (device, p, protocol, from, to, packetType);
+              found = true;
+            }
+        }
+    }
+
+  if (! found)
+    {
+      NS_FATAL_ERROR ("Handler for protocol " << p << " and device " << device <<
+                      " not found. It isn't forwarded up; it dies here.");
+    }
+}
+
+void
+TrafficControlLayer::Send (Ptr<NetDevice> device, Ptr<QueueDiscItem> item)
+{
+  NS_LOG_FUNCTION (this << device << item);
+
+  NS_LOG_DEBUG ("Send packet to device " << device << " protocol number " <<
+                item->GetProtocol ());
+
+  std::map<Ptr<NetDevice>, NetDeviceInfo>::iterator qdMap = m_netDeviceQueueToQueueDiscMap.find (device);
+  NS_ASSERT (qdMap != m_netDeviceQueueToQueueDiscMap.end ());
+  Ptr<NetDeviceQueueInterface> devQueueIface = qdMap->second.first;
+  NS_ASSERT (devQueueIface);
+
+  // determine the transmission queue of the device where the packet will be enqueued
+  uint8_t txq = devQueueIface->GetSelectedQueue (item);
+  NS_ASSERT (txq < devQueueIface->GetTxQueuesN ());
+
+  if (qdMap->second.second.empty ())
+    {
+      // The device has no attached queue disc, thus add the header to the packet and
+      // send it directly to the device if the selected queue is not stopped
+      if (!devQueueIface->GetTxQueue (txq)->IsStopped ())
+        {
+          item->AddHeader ();
+          device->Send (item->GetPacket (), item->GetAddress (), item->GetProtocol ());
+        }
+    }
+  else
+    {
+      // Enqueue the packet in the queue disc associated with the netdevice queue
+      // selected for the packet and try to dequeue packets from such queue disc
+      item->SetTxQueueIndex (txq);
+
+      Ptr<QueueDisc> qDisc = qdMap->second.second[txq];
+      NS_ASSERT (qDisc);
+      qDisc->Enqueue (item);
+      qDisc->Run ();
+    }
+}
+
+} // namespace ns3
diff -Naur ns-3.24.1/src/traffic-control/model/traffic-control-layer.h ns-3.25/src/traffic-control/model/traffic-control-layer.h
--- ns-3.24.1/src/traffic-control/model/traffic-control-layer.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/model/traffic-control-layer.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,244 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
+ *               2016 Stefano Avallone <stavallo@unina.it>
+ *
+ * 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 TRAFFICCONTROLLAYER_H
+#define TRAFFICCONTROLLAYER_H
+
+#include "ns3/object.h"
+#include "ns3/address.h"
+#include "ns3/net-device.h"
+#include "ns3/node.h"
+#include "queue-disc.h"
+#include <map>
+#include <vector>
+
+namespace ns3 {
+
+class Packet;
+class QueueDiscItem;
+
+/**
+ * \ingroup traffic-control
+ *
+ * \brief Traffic control layer definition
+ *
+ * This layer stays between NetDevices (L2) and any network protocol (e.g. IP).
+ * When enabled, it is responsible to analyze packets and to perform actions on
+ * them: the most common is scheduling.
+ *
+ * Basically, we manage both IN and OUT directions (sometimes called RX and TX,
+ * respectively). The OUT direction is easy to follow, since it involves
+ * direct calls: upper layer (e.g. IP) calls the Send method on an instance of
+ * this class, which then calls the Enqueue method of the QueueDisc associated
+ * with the device. The Dequeue method of the QueueDisc finally calls the Send
+ * method of the NetDevice.
+ *
+ * The IN direction uses a little trick to reduce dependencies between modules.
+ * In simple words, we use Callbacks to connect upper layer (which should register
+ * their Receive callback through RegisterProtocolHandler) and NetDevices.
+ *
+ * An example of the IN connection between this layer and IP layer is the following:
+ *\verbatim
+  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);
+  \endverbatim
+ * On the node, for IPv4 and ARP packet, is registered the
+ * TrafficControlLayer::Receive callback. At the same time, on the TrafficControlLayer
+ * object, is registered the callbacks associated to the upper layers (IPv4 or ARP).
+ *
+ * When the node receives an IPv4 or ARP packet, it calls the Receive method
+ * on TrafficControlLayer, that calls the right upper-layer callback once it
+ * finishes the operations on the packet received.
+ *
+ * Discrimination through callbacks (in other words: what is the right upper-layer
+ * callback for this packet?) is done through checks over the device and the
+ * protocol number.
+ */
+class TrafficControlLayer : public Object
+{
+public:
+  /**
+   * \brief Get the type ID.
+   * \return the object TypeId
+   */
+  static TypeId GetTypeId (void);
+
+  /**
+   * \brief Get the type ID for the instance
+   * \return the instance TypeId
+   */
+  virtual TypeId GetInstanceTypeId (void) const;
+
+  /**
+   * \brief Constructor
+   */
+  TrafficControlLayer ();
+
+  /**
+   * \brief Register an IN handler
+   *
+   * The handler will be invoked when a packet is received to pass it to
+   * upper  layers.
+   *
+   * \param handler the handler to register
+   * \param protocolType the type of protocol this handler is
+   *        interested in. This protocol type is a so-called
+   *        EtherType, as registered here:
+   *        http://standards.ieee.org/regauth/ethertype/eth.txt
+   *        the value zero is interpreted as matching all
+   *        protocols.
+   * \param device the device attached to this handler. If the
+   *        value is zero, the handler is attached to all
+   *        devices.
+   */
+  void RegisterProtocolHandler (Node::ProtocolHandler handler,
+                                uint16_t protocolType,
+                                Ptr<NetDevice> device);
+
+  /// Typedef for queue disc vector
+  typedef std::vector<Ptr<QueueDisc> > QueueDiscVector;
+
+  /**
+   * \brief Perform the operations that the traffic control layer needs to do when
+   *        an IPv4/v6 interface is added to a device
+   * \param device the device which the IPv4/v6 interface has been added to
+   *
+   * This method creates a NetDeviceQueueInterface for the device
+   */
+  virtual void SetupDevice (Ptr<NetDevice> device);
+
+  /**
+   * \brief This method can be used to set the root queue disc installed on a device
+   *
+   * \param device the device on which the provided queue disc will be installed
+   * \param qDisc the queue disc to be installed as root queue disc on device
+   */
+  virtual void SetRootQueueDiscOnDevice (Ptr<NetDevice> device, Ptr<QueueDisc> qDisc);
+
+  /**
+   * \brief This method can be used to get the root queue disc installed on a device
+   *
+   * \param device the device on which the requested root queue disc is installed
+   * \return the root queue disc installed on the given device
+   */
+  virtual Ptr<QueueDisc> GetRootQueueDiscOnDevice (Ptr<NetDevice> device);
+
+  /**
+   * \brief This method can be used to remove the root queue disc (and associated
+   *        filters, classes and queues) installed on a device
+   *
+   * \param device the device on which the installed queue disc will be deleted
+   */
+  virtual void DeleteRootQueueDiscOnDevice (Ptr<NetDevice> device);
+
+  /**
+   * \brief Set node associated with this stack.
+   * \param node node to set
+   */
+  void SetNode (Ptr<Node> node);
+
+  /**
+   * \brief Called by NetDevices, incoming packet
+   *
+   * After analyses and scheduling, this method will call the right handler
+   * to pass the packet up in the stack.
+   *
+   * \param device network device
+   * \param p the packet
+   * \param protocol next header value
+   * \param from address of the correspondant
+   * \param to address of the destination
+   * \param packetType type of the packet
+   */
+  virtual void Receive (Ptr<NetDevice> device, Ptr<const Packet> p,
+                        uint16_t protocol, const Address &from,
+                        const Address &to, NetDevice::PacketType packetType);
+  /**
+   * \brief Called from upper layer to queue a packet for the transmission.
+   *
+   * \param device the device the packet must be sent to
+   * \param item a queue item including a packet and additional information
+   */
+  virtual void Send (Ptr<NetDevice> device, Ptr<QueueDiscItem> item);
+
+protected:
+
+  virtual void DoDispose (void);
+  virtual void DoInitialize (void);
+  virtual void NotifyNewAggregate (void);
+
+private:
+  /**
+   * \brief Copy constructor
+   * Disable default implementation to avoid misuse
+   */
+  TrafficControlLayer (TrafficControlLayer const &);
+  /**
+   * \brief Assignment operator
+   * Disable default implementation to avoid misuse
+   */
+  TrafficControlLayer& operator= (TrafficControlLayer const &);
+  /**
+   * \brief Protocol handler entry.
+   * This structure is used to demultiplex all the protocols.
+   */
+  struct ProtocolHandlerEntry {
+    Node::ProtocolHandler handler; //!< the protocol handler
+    Ptr<NetDevice> device;         //!< the NetDevice
+    uint16_t protocol;             //!< the protocol number
+    bool promiscuous;              //!< true if it is a promiscuous handler
+  };
+
+  /// Typedef for protocol handlers container
+  typedef std::vector<struct ProtocolHandlerEntry> ProtocolHandlerList;
+
+  /// Typedef for queue disc vector
+  typedef std::pair<Ptr<NetDeviceQueueInterface>, QueueDiscVector> NetDeviceInfo;
+
+  /**
+   * \brief Lookup a given Ptr<NetDevice> in the node's list of devices
+   * \param device the device to lookup
+   * \return the index of device in the node's list of devices, if it is
+   *         found, and the number of devices, otherwise
+   */
+  uint32_t GetDeviceIndex (Ptr<NetDevice> device);
+
+  /// The node this TrafficControlLayer object is aggregated to
+  Ptr<Node> m_node;
+  /// This vector stores the root queue discs installed on all the devices of the node.
+  /// Devices are sorted as in Node::m_devices
+  QueueDiscVector m_rootQueueDiscs;
+  /// This map plays the role of the qdisc field of the netdev_queue struct in Linux
+  std::map<Ptr<NetDevice>, NetDeviceInfo> m_netDeviceQueueToQueueDiscMap;
+  ProtocolHandlerList m_handlers;  //!< List of upper-layer handlers
+};
+
+} // namespace ns3
+
+#endif // TRAFFICCONTROLLAYER_H
diff -Naur ns-3.24.1/src/traffic-control/test/codel-queue-disc-test-suite.cc ns-3.25/src/traffic-control/test/codel-queue-disc-test-suite.cc
--- ns-3.24.1/src/traffic-control/test/codel-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/test/codel-queue-disc-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,559 @@
+/* -*- 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>
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/codel-queue-disc.h"
+#include "ns3/uinteger.h"
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include "ns3/log.h"
+#include "ns3/simulator.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
+
+
+class CodelQueueDiscTestItem : public QueueDiscItem {
+public:
+  CodelQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol);
+  virtual ~CodelQueueDiscTestItem ();
+  virtual void AddHeader (void);
+
+private:
+  CodelQueueDiscTestItem ();
+  CodelQueueDiscTestItem (const CodelQueueDiscTestItem &);
+  CodelQueueDiscTestItem &operator = (const CodelQueueDiscTestItem &);
+};
+
+CodelQueueDiscTestItem::CodelQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol)
+  : QueueDiscItem (p, addr, protocol)
+{
+}
+
+CodelQueueDiscTestItem::~CodelQueueDiscTestItem ()
+{
+}
+
+void
+CodelQueueDiscTestItem::AddHeader (void)
+{
+}
+
+// Test 1: simple enqueue/dequeue with no drops
+class CoDelQueueDiscBasicEnqueueDequeue : public TestCase
+{
+public:
+  CoDelQueueDiscBasicEnqueueDequeue (std::string mode);
+  virtual void DoRun (void);
+
+  void QueueTestSize (Ptr<CoDelQueueDisc> queue, uint32_t size, std::string error)
+  {
+    if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+      {
+        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
+      }
+    else if (queue->GetMode () == Queue::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;
+};
+
+CoDelQueueDiscBasicEnqueueDequeue::CoDelQueueDiscBasicEnqueueDequeue (std::string mode)
+  : TestCase ("Basic enqueue and dequeue operations, and attribute setting for " + mode)
+{
+  m_mode = StringValue (mode);
+}
+
+void
+CoDelQueueDiscBasicEnqueueDequeue::DoRun (void)
+{
+  Ptr<CoDelQueueDisc> queue = CreateObject<CoDelQueueDisc> ();
+
+  uint32_t pktSize = 1000;
+  uint32_t modeSize = 0;
+  
+  Address dest;
+
+  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 () == Queue::QUEUE_MODE_BYTES)
+    {
+      modeSize = pktSize;
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      modeSize = 1;
+    }
+  queue->Initialize ();
+
+  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 (Create<CodelQueueDiscTestItem> (p1, dest, 0));
+  QueueTestSize (queue, 1 * modeSize, "There should be one packet in queue");
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p2, dest, 0));
+  QueueTestSize (queue, 2 * modeSize, "There should be two packets in queue");
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p3, dest, 0));
+  QueueTestSize (queue, 3 * modeSize, "There should be three packets in queue");
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p4, dest, 0));
+  QueueTestSize (queue, 4 * modeSize, "There should be four packets in queue");
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p5, dest, 0));
+  QueueTestSize (queue, 5 * modeSize, "There should be five packets in queue");
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p6, dest, 0));
+  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<QueueDiscItem> item;
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p1->GetUid (), "was this the first packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p2->GetUid (), "Was this the second packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p3->GetUid (), "Was this the third packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p4->GetUid (), "Was this the fourth packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p5->GetUid (), "Was this the fifth packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 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 (item->GetPacket ()->GetUid (), p6->GetUid (), "Was this the sixth packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item == 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 CoDelQueueDiscBasicOverflow : public TestCase
+{
+public:
+  CoDelQueueDiscBasicOverflow (std::string mode);
+  virtual void DoRun (void);
+
+  void QueueTestSize (Ptr<CoDelQueueDisc> queue, uint32_t size, std::string error)
+  {
+    if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+      {
+        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
+      }
+    else if (queue->GetMode () == Queue::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<CoDelQueueDisc> queue, uint32_t size, uint32_t nPkt);
+  StringValue m_mode;
+};
+
+CoDelQueueDiscBasicOverflow::CoDelQueueDiscBasicOverflow (std::string mode)
+  : TestCase ("Basic overflow behavior for " + mode)
+{
+  m_mode = StringValue (mode);
+}
+
+void
+CoDelQueueDiscBasicOverflow::DoRun (void)
+{
+  Ptr<CoDelQueueDisc> queue = CreateObject<CoDelQueueDisc> ();
+  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");
+
+  Address dest;
+
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      modeSize = pktSize;
+    }
+  else if (queue->GetMode () == Queue::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");
+
+  queue->Initialize ();
+
+  Enqueue (queue, pktSize, 500);
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p1, dest, 0));
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p2, dest, 0));
+  queue->Enqueue (Create<CodelQueueDiscTestItem> (p3, dest, 0));
+
+  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
+CoDelQueueDiscBasicOverflow::Enqueue (Ptr<CoDelQueueDisc> queue, uint32_t size, uint32_t nPkt)
+{
+  Address dest;
+  for (uint32_t i = 0; i < nPkt; i++)
+    {
+      queue->Enqueue (Create<CodelQueueDiscTestItem> (Create<Packet> (size), dest, 0));
+    }
+}
+
+// Test 3: NewtonStep unit test
+// test against explicit port of Linux implementation
+class CoDelQueueDiscNewtonStepTest : public TestCase
+{
+public:
+  CoDelQueueDiscNewtonStepTest ();
+  virtual void DoRun (void);
+};
+
+CoDelQueueDiscNewtonStepTest::CoDelQueueDiscNewtonStepTest ()
+  : TestCase ("NewtonStep arithmetic unit test")
+{
+}
+
+void
+CoDelQueueDiscNewtonStepTest::DoRun (void)
+{
+  Ptr<CoDelQueueDisc> queue = CreateObject<CoDelQueueDisc> ();
+
+  // Spot check a few points in the expected operational range of
+  // CoDelQueueDisc'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 CoDelQueueDiscControlLawTest : public TestCase
+{
+public:
+  CoDelQueueDiscControlLawTest ();
+  virtual void DoRun (void);
+  uint32_t _codel_control_law (Ptr<CoDelQueueDisc> queue, uint32_t t);
+};
+
+CoDelQueueDiscControlLawTest::CoDelQueueDiscControlLawTest ()
+  : TestCase ("ControlLaw arithmetic unit test")
+{
+}
+
+// The following code borrowed from Linux codel.h,
+// except the addition of queue parameter
+uint32_t
+CoDelQueueDiscControlLawTest::_codel_control_law (Ptr<CoDelQueueDisc> 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
+CoDelQueueDiscControlLawTest::DoRun (void)
+{
+  Ptr<CoDelQueueDisc> queue = CreateObject<CoDelQueueDisc> ();
+
+  /* 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 CoDelQueueDiscBasicDrop : public TestCase
+{
+public:
+  CoDelQueueDiscBasicDrop (std::string mode);
+  virtual void DoRun (void);
+
+  void QueueTestSize (Ptr<CoDelQueueDisc> queue, uint32_t size, std::string error)
+  {
+    if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+      {
+        NS_TEST_EXPECT_MSG_EQ (queue->GetNBytes (), size, error);
+      }
+    else if (queue->GetMode () == Queue::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<CoDelQueueDisc> queue, uint32_t size, uint32_t nPkt);
+  void Dequeue (Ptr<CoDelQueueDisc> 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
+};
+
+CoDelQueueDiscBasicDrop::CoDelQueueDiscBasicDrop (std::string mode)
+  : TestCase ("Basic drop operations for " + mode)
+{
+  m_mode = StringValue (mode);
+  m_dropNextCount = 0;
+}
+
+void
+CoDelQueueDiscBasicDrop::DropNextTracer (uint32_t oldVal, uint32_t newVal)
+{
+  m_dropNextCount++;
+}
+
+void
+CoDelQueueDiscBasicDrop::DoRun (void)
+{
+  Ptr<CoDelQueueDisc> queue = CreateObject<CoDelQueueDisc> ();
+  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 () == Queue::QUEUE_MODE_BYTES)
+    {
+      modeSize = pktSize;
+    }
+  else if (queue->GetMode () == Queue::QUEUE_MODE_PACKETS)
+    {
+      modeSize = 1;
+    }
+
+  queue->Initialize ();
+
+  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, &CoDelQueueDiscBasicDrop::Dequeue, this, queue, modeSize);
+
+  // This dequeue should cause a drop
+  Time waitUntilSecondDequeue = waitUntilFirstDequeue + 2 * queue->GetInterval ();
+  Simulator::Schedule (waitUntilSecondDequeue, &CoDelQueueDiscBasicDrop::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, &CoDelQueueDiscBasicDrop::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, &CoDelQueueDiscBasicDrop::Dequeue, this, queue, modeSize);
+
+  Simulator::Run ();
+  Simulator::Destroy ();
+}
+
+void
+CoDelQueueDiscBasicDrop::Enqueue (Ptr<CoDelQueueDisc> queue, uint32_t size, uint32_t nPkt)
+{
+  Address dest;
+  for (uint32_t i = 0; i < nPkt; i++)
+    {
+      queue->Enqueue (Create<CodelQueueDiscTestItem> (Create<Packet> (size), dest, 0));
+    }
+}
+
+void
+CoDelQueueDiscBasicDrop::Dequeue (Ptr<CoDelQueueDisc> 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 (&CoDelQueueDiscBasicDrop::DropNextTracer, this));
+    }
+
+  if (initialQSize != 0)
+    {
+      Ptr<QueueDiscItem> item = 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 CoDelQueueDiscTestSuite : public TestSuite
+{
+public:
+  CoDelQueueDiscTestSuite ()
+    : TestSuite ("codel-queue-disc", UNIT)
+  {
+    // Test 1: simple enqueue/dequeue with no drops
+    AddTestCase (new CoDelQueueDiscBasicEnqueueDequeue ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
+    AddTestCase (new CoDelQueueDiscBasicEnqueueDequeue ("QUEUE_MODE_BYTES"), TestCase::QUICK);
+    // Test 2: enqueue with drops due to queue overflow
+    AddTestCase (new CoDelQueueDiscBasicOverflow ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
+    AddTestCase (new CoDelQueueDiscBasicOverflow ("QUEUE_MODE_BYTES"), TestCase::QUICK);
+    // Test 3: test NewtonStep() against explicit port of Linux implementation
+    AddTestCase (new CoDelQueueDiscNewtonStepTest (), TestCase::QUICK);
+    // Test 4: test ControlLaw() against explicit port of Linux implementation
+    AddTestCase (new CoDelQueueDiscControlLawTest (), TestCase::QUICK);
+    // Test 5: enqueue/dequeue with drops according to CoDel algorithm
+    AddTestCase (new CoDelQueueDiscBasicDrop ("QUEUE_MODE_PACKETS"), TestCase::QUICK);
+    AddTestCase (new CoDelQueueDiscBasicDrop ("QUEUE_MODE_BYTES"), TestCase::QUICK);
+  }
+} g_coDelQueueTestSuite;
diff -Naur ns-3.24.1/src/traffic-control/test/red-queue-disc-test-suite.cc ns-3.25/src/traffic-control/test/red-queue-disc-test-suite.cc
--- ns-3.24.1/src/traffic-control/test/red-queue-disc-test-suite.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/test/red-queue-disc-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,319 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright © 2011 Marcos Talau
+ *
+ * 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: Marcos Talau (talau@users.sourceforge.net)
+ * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
+ *
+ */
+
+#include "ns3/test.h"
+#include "ns3/red-queue-disc.h"
+#include "ns3/drop-tail-queue.h"
+#include "ns3/uinteger.h"
+#include "ns3/string.h"
+#include "ns3/double.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+
+using namespace ns3;
+
+class RedQueueDiscTestItem : public QueueDiscItem {
+public:
+  RedQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol);
+  virtual ~RedQueueDiscTestItem ();
+  virtual void AddHeader (void);
+
+private:
+  RedQueueDiscTestItem ();
+  RedQueueDiscTestItem (const RedQueueDiscTestItem &);
+  RedQueueDiscTestItem &operator = (const RedQueueDiscTestItem &);
+};
+
+RedQueueDiscTestItem::RedQueueDiscTestItem (Ptr<Packet> p, const Address & addr, uint16_t protocol)
+  : QueueDiscItem (p, addr, protocol)
+{
+}
+
+RedQueueDiscTestItem::~RedQueueDiscTestItem ()
+{
+}
+
+void
+RedQueueDiscTestItem::AddHeader (void)
+{
+}
+
+class RedQueueDiscTestCase : public TestCase
+{
+public:
+  RedQueueDiscTestCase ();
+  virtual void DoRun (void);
+private:
+  void Enqueue (Ptr<RedQueueDisc> queue, uint32_t size, uint32_t nPkt);
+  void RunRedTest (StringValue mode);
+};
+
+RedQueueDiscTestCase::RedQueueDiscTestCase ()
+  : TestCase ("Sanity check on the red queue implementation")
+{
+}
+
+void
+RedQueueDiscTestCase::RunRedTest (StringValue mode)
+{
+  uint32_t pktSize = 0;
+  // 1 for packets; pktSize for bytes
+  uint32_t modeSize = 1;
+  double minTh = 2;
+  double maxTh = 5;
+  uint32_t qSize = 8;
+  Ptr<RedQueueDisc> queue = CreateObject<RedQueueDisc> ();
+
+  // test 1: simple enqueue/dequeue with no drops
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.002)), true,
+                         "Verify that we can actually set the attribute QW");
+
+  Address dest;
+  
+  if (queue->GetMode () == Queue::QUEUE_MODE_BYTES)
+    {
+      pktSize = 1000;
+      modeSize = pktSize;
+      queue->SetTh (minTh * modeSize, maxTh * modeSize);
+      queue->SetQueueLimit (qSize * modeSize);
+    }
+
+  Ptr<Packet> p1, p2, p3, p4, p5, p6, p7, p8;
+  p1 = Create<Packet> (pktSize);
+  p2 = Create<Packet> (pktSize);
+  p3 = Create<Packet> (pktSize);
+  p4 = Create<Packet> (pktSize);
+  p5 = Create<Packet> (pktSize);
+  p6 = Create<Packet> (pktSize);
+  p7 = Create<Packet> (pktSize);
+  p8 = Create<Packet> (pktSize);
+
+  queue->Initialize ();
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 0 * modeSize, "There should be no packets in there");
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p1, dest, 0));
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 1 * modeSize, "There should be one packet in there");
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p2, dest, 0));
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 2 * modeSize, "There should be two packets in there");
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p3, dest, 0));
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p4, dest, 0));
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p5, dest, 0));
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p6, dest, 0));
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p7, dest, 0));
+  queue->Enqueue (Create<RedQueueDiscTestItem> (p8, dest, 0));
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 8 * modeSize, "There should be eight packets in there");
+
+  Ptr<QueueDiscItem> item;
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the first packet");
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 7 * modeSize, "There should be seven packets in there");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->GetUid (), p1->GetUid (), "was this the first packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the second packet");
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 6 * modeSize, "There should be six packet in there");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->GetUid (), p2->GetUid (), "Was this the second packet ?");
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item != 0), true, "I want to remove the third packet");
+  NS_TEST_EXPECT_MSG_EQ (queue->GetQueueSize (), 5 * modeSize, "There should be five packets in there");
+  NS_TEST_EXPECT_MSG_EQ (item->GetPacket ()->GetUid (), p3->GetUid (), "Was this the third packet ?");
+
+  item = queue->Dequeue ();
+  item = queue->Dequeue ();
+  item = queue->Dequeue ();
+  item = queue->Dequeue ();
+  item = queue->Dequeue ();
+
+  item = queue->Dequeue ();
+  NS_TEST_EXPECT_MSG_EQ ((item == 0), true, "There are really no packets in there");
+
+
+  // test 2: more data, but with no drops
+  queue = CreateObject<RedQueueDisc> ();
+  minTh = 70 * modeSize;
+  maxTh = 150 * modeSize;
+  qSize = 300 * modeSize;
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  RedQueueDisc::Stats st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  NS_TEST_EXPECT_MSG_EQ (st.unforcedDrop, 0, "There should zero dropped packets due probability mark");
+  NS_TEST_EXPECT_MSG_EQ (st.forcedDrop, 0, "There should zero dropped packets due hardmark mark");
+  NS_TEST_EXPECT_MSG_EQ (st.qLimDrop, 0, "There should zero dropped packets due queue full");
+
+  // save number of drops from tests
+  struct d {
+    uint32_t test3;
+    uint32_t test4;
+    uint32_t test5;
+    uint32_t test6;
+    uint32_t test7;
+  } drop;
+
+
+  // test 3: more data, now drops due QW change
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
+                         "Verify that we can actually set the attribute QW");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  drop.test3 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_NE (drop.test3, 0, "There should be some dropped packets");
+
+
+  // test 4: reduced maxTh, this causes more drops
+  maxTh = 100 * modeSize;
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
+                         "Verify that we can actually set the attribute QW");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  drop.test4 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_GT (drop.test4, drop.test3, "Test 4 should have more drops than test 3");
+
+
+  // test 5: change drop probability to a high value (LInterm)
+  maxTh = 150 * modeSize;
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("LInterm", DoubleValue (5)), true,
+                         "Verify that we can actually set the attribute LInterm");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  drop.test5 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_GT (drop.test5, drop.test3, "Test 5 should have more drops than test 3");
+
+
+  // test 6: disable Gentle param
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Gentle", BooleanValue (false)), true,
+                         "Verify that we can actually set the attribute Gentle");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  drop.test6 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_GT (drop.test6, drop.test3, "Test 6 should have more drops than test 3");
+
+
+  // test 7: disable Wait param
+  queue = CreateObject<RedQueueDisc> ();
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Mode", mode), true,
+                         "Verify that we can actually set the attribute Mode");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MinTh", DoubleValue (minTh)), true,
+                         "Verify that we can actually set the attribute MinTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("MaxTh", DoubleValue (maxTh)), true,
+                         "Verify that we can actually set the attribute MaxTh");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QueueLimit", UintegerValue (qSize)), true,
+                         "Verify that we can actually set the attribute QueueLimit");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("QW", DoubleValue (0.020)), true,
+                         "Verify that we can actually set the attribute QW");
+  NS_TEST_EXPECT_MSG_EQ (queue->SetAttributeFailSafe ("Wait", BooleanValue (false)), true,
+                         "Verify that we can actually set the attribute Wait");
+  queue->Initialize ();
+  Enqueue (queue, pktSize, 300);
+  st = StaticCast<RedQueueDisc> (queue)->GetStats ();
+  drop.test7 = st.unforcedDrop + st.forcedDrop + st.qLimDrop;
+  NS_TEST_EXPECT_MSG_GT (drop.test7, drop.test3, "Test 7 should have more drops than test 3");
+}
+
+void 
+RedQueueDiscTestCase::Enqueue (Ptr<RedQueueDisc> queue, uint32_t size, uint32_t nPkt)
+{
+  Address dest;
+  for (uint32_t i = 0; i < nPkt; i++)
+    {
+      queue->Enqueue (Create<RedQueueDiscTestItem> (Create<Packet> (size), dest, 0));
+    }
+}
+
+void
+RedQueueDiscTestCase::DoRun (void)
+{
+  RunRedTest (StringValue ("QUEUE_MODE_PACKETS"));
+  RunRedTest (StringValue ("QUEUE_MODE_BYTES"));
+  Simulator::Destroy ();
+
+}
+
+static class RedQueueDiscTestSuite : public TestSuite
+{
+public:
+  RedQueueDiscTestSuite ()
+    : TestSuite ("red-queue-disc", UNIT)
+  {
+    AddTestCase (new RedQueueDiscTestCase (), TestCase::QUICK);
+  }
+} g_redQueueTestSuite;
diff -Naur ns-3.24.1/src/traffic-control/wscript ns-3.25/src/traffic-control/wscript
--- ns-3.24.1/src/traffic-control/wscript	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/traffic-control/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,45 @@
+# -*- 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('traffic-control', ['core', 'network'])
+    module.source = [
+      'model/traffic-control-layer.cc',
+      'model/packet-filter.cc',
+      'model/queue-disc.cc',
+      'model/pfifo-fast-queue-disc.cc',
+      'model/red-queue-disc.cc',
+      'model/codel-queue-disc.cc',
+      'helper/traffic-control-helper.cc',
+      'helper/queue-disc-container.cc'
+        ]
+
+    module_test = bld.create_ns3_module_test_library('traffic-control')
+    module_test.source = [
+      'test/red-queue-disc-test-suite.cc',
+      'test/codel-queue-disc-test-suite.cc',
+        ]
+
+    headers = bld(features='ns3header')
+    headers.module = 'traffic-control'
+    headers.source = [
+      'model/traffic-control-layer.h',
+      'model/packet-filter.h',
+      'model/queue-disc.h',
+      'model/pfifo-fast-queue-disc.h',
+      'model/red-queue-disc.h',
+      'model/codel-queue-disc.h',
+      'helper/traffic-control-helper.h',
+      'helper/queue-disc-container.h'
+        ]
+
+    if bld.env.ENABLE_EXAMPLES:
+        bld.recurse('examples')
+
+    bld.ns3_python_bindings()
+
diff -Naur ns-3.24.1/src/uan/bindings/callbacks_list.py ns-3.25/src/uan/bindings/callbacks_list.py
--- ns-3.24.1/src/uan/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/uan/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -6,4 +6,5 @@
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::UanAddress const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['bool', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['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/uan/bindings/modulegen__gcc_ILP32.py ns-3.25/src/uan/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/uan/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/uan/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -178,10 +178,14 @@
     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::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]
@@ -344,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]
@@ -362,6 +370,8 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', 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]
@@ -577,8 +587,10 @@
     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__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'])
@@ -654,6 +666,8 @@
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_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'])
@@ -663,6 +677,7 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
+    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'])
@@ -1400,6 +1415,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', 
@@ -1415,6 +1435,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', 
@@ -1591,7 +1616,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', 
@@ -3507,6 +3532,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([])
@@ -3531,6 +3568,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([])
@@ -7225,6 +7274,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]
@@ -7304,6 +7439,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', 
@@ -7710,6 +7850,27 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     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/uan/bindings/modulegen__gcc_LP64.py ns-3.25/src/uan/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/uan/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/uan/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -178,10 +178,14 @@
     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::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]
@@ -344,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]
@@ -362,6 +370,8 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', 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]
@@ -577,8 +587,10 @@
     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__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'])
@@ -654,6 +666,8 @@
     register_Ns3Mac48AddressValue_methods(root_module, root_module['ns3::Mac48AddressValue'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
+    register_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'])
@@ -663,6 +677,7 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
+    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'])
@@ -1400,6 +1415,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', 
@@ -1415,6 +1435,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', 
@@ -1591,7 +1616,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', 
@@ -3507,6 +3532,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([])
@@ -3531,6 +3568,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([])
@@ -7225,6 +7274,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]
@@ -7304,6 +7439,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', 
@@ -7710,6 +7850,27 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     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/uan/model/acoustic-modem-energy-model.cc ns-3.25/src/uan/model/acoustic-modem-energy-model.cc
--- ns-3.24.1/src/uan/model/acoustic-modem-energy-model.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/uan/model/acoustic-modem-energy-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -200,20 +200,20 @@
 
   // energy to decrease = current * voltage * time
   double energyToDecrease = 0.0;
-  double supplyVoltage = m_source->GetSupplyVoltage ();
+
   switch (m_currentState)
     {
     case UanPhy::TX:
-      energyToDecrease = duration.GetSeconds () * m_txPowerW * supplyVoltage;
+      energyToDecrease = duration.GetSeconds () * m_txPowerW;
       break;
     case UanPhy::RX:
-      energyToDecrease = duration.GetSeconds () * m_rxPowerW * supplyVoltage;
+      energyToDecrease = duration.GetSeconds () * m_rxPowerW;
       break;
     case UanPhy::IDLE:
-      energyToDecrease = duration.GetSeconds () * m_idlePowerW * supplyVoltage;
+      energyToDecrease = duration.GetSeconds () * m_idlePowerW;
       break;
     case UanPhy::SLEEP:
-      energyToDecrease = duration.GetSeconds () * m_sleepPowerW * supplyVoltage;
+      energyToDecrease = duration.GetSeconds () * m_sleepPowerW;
       break;
     default:
       NS_FATAL_ERROR ("AcousticModemEnergyModel:Undefined radio state!");
diff -Naur ns-3.24.1/src/virtual-net-device/bindings/callbacks_list.py ns-3.25/src/virtual-net-device/bindings/callbacks_list.py
--- ns-3.24.1/src/virtual-net-device/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/virtual-net-device/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -2,5 +2,7 @@
     ['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'],
     ['bool', 'ns3::Ptr<ns3::Packet>', 'ns3::Address const&', 'ns3::Address const&', 'unsigned short', '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/virtual-net-device/bindings/modulegen__gcc_ILP32.py ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -118,10 +118,14 @@
     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::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::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'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -166,12 +170,18 @@
     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]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
     ## 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]
@@ -272,8 +282,10 @@
     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__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__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
@@ -295,9 +307,12 @@
     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_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
@@ -867,6 +882,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', 
@@ -882,6 +902,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', 
@@ -1058,7 +1083,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', 
@@ -2073,6 +2098,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([])
@@ -2097,6 +2134,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([])
@@ -2544,7 +2593,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')], 
@@ -2671,6 +2720,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]
@@ -2750,6 +2885,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', 
@@ -2983,6 +3123,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_Ns3TypeIdChecker_methods(root_module, cls):
     ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
     cls.add_constructor([])
@@ -3028,7 +3189,7 @@
     cls.add_constructor([param('ns3::VirtualNetDevice const &', 'arg0')])
     ## virtual-net-device.h (module 'virtual-net-device'): ns3::VirtualNetDevice::VirtualNetDevice() [constructor]
     cls.add_constructor([])
-    ## virtual-net-device.h (module 'virtual-net-device'): void ns3::VirtualNetDevice::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]
+    ## virtual-net-device.h (module 'virtual-net-device'): void ns3::VirtualNetDevice::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/virtual-net-device/bindings/modulegen__gcc_LP64.py ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/virtual-net-device/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -118,10 +118,14 @@
     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::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::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'))
     ## trace-source-accessor.h (module 'core'): ns3::TraceSourceAccessor [class]
@@ -166,12 +170,18 @@
     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]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## 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> >'])
     ## 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]
@@ -272,8 +282,10 @@
     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__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__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
     register_Ns3TraceSourceAccessor_methods(root_module, root_module['ns3::TraceSourceAccessor'])
     register_Ns3Trailer_methods(root_module, root_module['ns3::Trailer'])
@@ -295,9 +307,12 @@
     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_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
     register_Ns3TypeIdValue_methods(root_module, root_module['ns3::TypeIdValue'])
     register_Ns3VirtualNetDevice_methods(root_module, root_module['ns3::VirtualNetDevice'])
@@ -867,6 +882,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', 
@@ -882,6 +902,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', 
@@ -1058,7 +1083,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', 
@@ -2073,6 +2098,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([])
@@ -2097,6 +2134,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([])
@@ -2544,7 +2593,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')], 
@@ -2671,6 +2720,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]
@@ -2750,6 +2885,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', 
@@ -2983,6 +3123,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_Ns3TypeIdChecker_methods(root_module, cls):
     ## type-id.h (module 'core'): ns3::TypeIdChecker::TypeIdChecker() [constructor]
     cls.add_constructor([])
@@ -3028,7 +3189,7 @@
     cls.add_constructor([param('ns3::VirtualNetDevice const &', 'arg0')])
     ## virtual-net-device.h (module 'virtual-net-device'): ns3::VirtualNetDevice::VirtualNetDevice() [constructor]
     cls.add_constructor([])
-    ## virtual-net-device.h (module 'virtual-net-device'): void ns3::VirtualNetDevice::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]
+    ## virtual-net-device.h (module 'virtual-net-device'): void ns3::VirtualNetDevice::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/visualizer/bindings/callbacks_list.py ns-3.25/src/visualizer/bindings/callbacks_list.py
--- ns-3.24.1/src/visualizer/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/visualizer/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/visualizer/bindings/modulegen__gcc_ILP32.py ns-3.25/src/visualizer/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/visualizer/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/visualizer/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -176,12 +176,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]
@@ -190,6 +194,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]
@@ -266,6 +272,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 +288,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]
@@ -298,6 +310,7 @@
     module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
     module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
     module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type=u'vector')
+    module.add_container('std::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
@@ -424,9 +437,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'])
@@ -463,12 +478,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'])
@@ -1169,6 +1187,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', 
@@ -1184,6 +1207,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', 
@@ -1421,7 +1449,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', 
@@ -3014,6 +3042,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([])
@@ -3050,6 +3090,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([])
@@ -3141,6 +3193,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', 
@@ -3166,6 +3223,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', 
@@ -4227,6 +4299,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 >', 
@@ -4242,6 +4319,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', 
@@ -4257,6 +4339,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', 
@@ -4307,6 +4399,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]
@@ -4449,6 +4546,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 >', 
@@ -4464,6 +4566,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', 
@@ -4491,7 +4598,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', 
@@ -4550,6 +4663,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]
@@ -4892,7 +5010,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')], 
@@ -5019,6 +5137,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]
@@ -5098,6 +5302,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', 
@@ -5384,6 +5593,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/visualizer/bindings/modulegen__gcc_LP64.py ns-3.25/src/visualizer/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/visualizer/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/visualizer/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -176,12 +176,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]
@@ -190,6 +194,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]
@@ -266,6 +272,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 +288,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]
@@ -298,6 +310,7 @@
     module.add_container('std::vector< std::string >', 'std::string', container_type=u'vector')
     module.add_container('std::set< unsigned int >', 'unsigned int', container_type=u'set')
     module.add_container('std::vector< ns3::PyViz::NodeStatistics >', 'ns3::PyViz::NodeStatistics', container_type=u'vector')
+    module.add_container('std::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
@@ -424,9 +437,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'])
@@ -463,12 +478,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'])
@@ -1169,6 +1187,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', 
@@ -1184,6 +1207,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', 
@@ -1421,7 +1449,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', 
@@ -3014,6 +3042,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([])
@@ -3050,6 +3090,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([])
@@ -3141,6 +3193,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', 
@@ -3166,6 +3223,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', 
@@ -4227,6 +4299,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 >', 
@@ -4242,6 +4319,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', 
@@ -4257,6 +4339,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', 
@@ -4307,6 +4399,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]
@@ -4449,6 +4546,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 >', 
@@ -4464,6 +4566,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', 
@@ -4491,7 +4598,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', 
@@ -4550,6 +4663,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]
@@ -4892,7 +5010,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')], 
@@ -5019,6 +5137,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]
@@ -5098,6 +5302,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', 
@@ -5384,6 +5593,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/wave/bindings/callbacks_list.py ns-3.25/src/wave/bindings/callbacks_list.py
--- ns-3.24.1/src/wave/bindings/callbacks_list.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/wave/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -13,4 +13,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/wave/bindings/modulegen__gcc_ILP32.py ns-3.25/src/wave/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/wave/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/wave/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -20,14 +20,20 @@
 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]
     module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess [enumeration]
@@ -38,8 +44,6 @@
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'], import_from_module='ns.wifi')
     ## vsa-manager.h (module 'wave'): ns3::VsaTransmitInterval [enumeration]
     module.add_enum('VsaTransmitInterval', ['VSA_TRANSMIT_IN_CCHI', 'VSA_TRANSMIT_IN_SCHI', 'VSA_TRANSMIT_IN_BOTHI'])
-    ## 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')
     ## 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]
@@ -183,7 +187,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]
@@ -230,7 +234,7 @@
     module.add_class('WaveHelper', allow_subclassing=True)
     ## 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')
@@ -282,6 +286,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')
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader [class]
@@ -298,16 +304,16 @@
     module.add_class('MgtProbeRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtProbeResponseHeader [class]
     module.add_class('MgtProbeResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper [class]
-    module.add_class('NqosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
+    module.add_class('NqosWaveMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
     module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
     ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
-    module.add_class('QosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper [class]
+    module.add_class('QosWaveMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## 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]
@@ -332,12 +338,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]
@@ -348,6 +358,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]
@@ -416,6 +428,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')
     ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper [class]
     module.add_class('YansWavePhyHelper', parent=root_module['ns3::YansWifiPhyHelper'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -474,6 +488,12 @@
     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'])
+    ## 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> >'])
     ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
@@ -488,6 +508,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'])
     ## 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]
@@ -544,14 +570,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'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
     module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
-    module.add_class('NqosWaveMacHelper', parent=root_module['ns3::NqosWifiMacHelper'])
     ## 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]
@@ -570,8 +598,8 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper [class]
-    module.add_class('QosWaveMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
+    ## 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]
@@ -629,6 +657,8 @@
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::map< ns3::Mac48Address, bool >', ('ns3::Mac48Address', 'bool'), container_type=u'map')
     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::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
@@ -843,11 +873,11 @@
     register_Ns3MgtDelBaHeader_methods(root_module, root_module['ns3::MgtDelBaHeader'])
     register_Ns3MgtProbeRequestHeader_methods(root_module, root_module['ns3::MgtProbeRequestHeader'])
     register_Ns3MgtProbeResponseHeader_methods(root_module, root_module['ns3::MgtProbeResponseHeader'])
-    register_Ns3NqosWifiMacHelper_methods(root_module, root_module['ns3::NqosWifiMacHelper'])
+    register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
-    register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
+    register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
     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> >'])
@@ -860,9 +890,11 @@
     register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
     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'])
@@ -919,6 +951,9 @@
     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_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_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
@@ -926,6 +961,9 @@
     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_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'])
@@ -951,10 +989,11 @@
     register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
     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'])
-    register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OrganizationIdentifierChecker_methods(root_module, root_module['ns3::OrganizationIdentifierChecker'])
@@ -964,7 +1003,7 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
-    register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
+    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'])
@@ -1615,10 +1654,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', 
@@ -2078,6 +2117,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', 
@@ -2091,6 +2140,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_Ns3EdcaParameter_methods(root_module, cls):
@@ -2388,6 +2445,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', 
@@ -2403,6 +2465,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', 
@@ -2504,10 +2571,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', 
@@ -2692,7 +2759,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', 
@@ -2882,10 +2949,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', 
@@ -3105,6 +3172,11 @@
                    'ns3::Mac48Address', 
                    [param('ns3::WifiMacHeader const &', 'hdr')], 
                    is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMsduAggregator() const [member function]
     cls.add_method('GetMsduAggregator', 
                    'ns3::Ptr< ns3::MsduAggregator >', 
@@ -3150,10 +3222,10 @@
                    'void', 
                    [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
                    is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(bool ampdu) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpdu', 
                    'void', 
-                   [param('bool', 'ampdu')], 
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')], 
                    is_virtual=True)
     return
 
@@ -3214,10 +3286,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3229,10 +3301,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck() [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [], 
+                   [param('uint32_t', 'nMpdus')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedCts() [member function]
     cls.add_method('MissedCts', 
@@ -3872,8 +3944,6 @@
     cls.add_constructor([])
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::Parameters(ns3::Parameters const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Parameters const &', 'arg0')])
-    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::aMpdu [variable]
-    cls.add_instance_attribute('aMpdu', 'ns3::mpduInfo', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::duration [variable]
     cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::preamble [variable]
@@ -3882,6 +3952,8 @@
     cls.add_instance_attribute('rxPowerDbm', 'double', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::txVector [variable]
     cls.add_instance_attribute('txVector', 'ns3::WifiTxVector', is_const=False)
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3PcapFile_methods(root_module, cls):
@@ -3942,10 +4014,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', 
@@ -4764,7 +4840,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', 
@@ -4797,15 +4873,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):
@@ -4817,21 +4898,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', 
@@ -4842,11 +4928,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', 
@@ -4857,6 +4953,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', 
@@ -4986,6 +5092,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]
@@ -4995,13 +5103,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):
@@ -5255,10 +5367,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):
@@ -5645,11 +5757,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', 
@@ -5709,6 +5831,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', 
@@ -5935,6 +6061,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', 
@@ -5985,6 +6116,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', 
@@ -6017,11 +6152,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', 
@@ -6060,10 +6210,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', 
@@ -6225,11 +6387,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', 
@@ -6278,10 +6455,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', 
@@ -6296,26 +6485,21 @@
                    [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
-def register_Ns3NqosWifiMacHelper_methods(root_module, cls):
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper(ns3::NqosWifiMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NqosWifiMacHelper const &', 'arg0')])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper() [constructor]
+def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper() [constructor]
     cls.add_constructor([])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): static ns3::NqosWifiMacHelper ns3::NqosWifiMacHelper::Default() [member function]
+    ## wave-mac-helper.h (module 'wave'): static ns3::NqosWaveMacHelper ns3::NqosWaveMacHelper::Default() [member function]
     cls.add_method('Default', 
-                   'ns3::NqosWifiMacHelper', 
+                   'ns3::NqosWaveMacHelper', 
                    [], 
                    is_static=True)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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()) [member function]
+    ## wave-mac-helper.h (module 'wave'): void ns3::NqosWaveMacHelper::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', '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)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::NqosWifiMacHelper::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::WifiMac >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -6430,6 +6614,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', 
@@ -6460,42 +6648,21 @@
                    [])
     return
 
-def register_Ns3QosWifiMacHelper_methods(root_module, cls):
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper::QosWifiMacHelper(ns3::QosWifiMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosWifiMacHelper const &', 'arg0')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper::QosWifiMacHelper() [constructor]
+def register_Ns3QosWaveMacHelper_methods(root_module, cls):
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper(ns3::QosWaveMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QosWaveMacHelper const &', 'arg0')])
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper() [constructor]
     cls.add_constructor([])
-    ## qos-wifi-mac-helper.h (module 'wifi'): static ns3::QosWifiMacHelper ns3::QosWifiMacHelper::Default() [member function]
+    ## wave-mac-helper.h (module 'wave'): static ns3::QosWaveMacHelper ns3::QosWaveMacHelper::Default() [member function]
     cls.add_method('Default', 
-                   'ns3::QosWifiMacHelper', 
+                   'ns3::QosWaveMacHelper', 
                    [], 
                    is_static=True)
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetBlockAckInactivityTimeoutForAc(ns3::AcIndex ac, uint16_t timeout) [member function]
-    cls.add_method('SetBlockAckInactivityTimeoutForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), param('uint16_t', 'timeout')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetBlockAckThresholdForAc(ns3::AcIndex ac, uint8_t threshold) [member function]
-    cls.add_method('SetBlockAckThresholdForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, 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()) [member function]
-    cls.add_method('SetMpduAggregatorForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, 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()) [member function]
-    cls.add_method('SetMsduAggregatorForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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()) [member function]
+    ## wave-mac-helper.h (module 'wave'): void ns3::QosWaveMacHelper::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', '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)
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::QosWifiMacHelper::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::WifiMac >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -6701,6 +6868,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([])
@@ -6737,6 +6916,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([])
@@ -6840,6 +7031,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', 
@@ -6865,6 +7061,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', 
@@ -8156,6 +8367,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', 
@@ -8275,6 +8491,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', 
@@ -8849,6 +9070,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', 
@@ -8858,15 +9084,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', 
@@ -9317,10 +9547,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', 
@@ -9361,6 +9595,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', 
@@ -9371,6 +9610,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', 
@@ -9481,6 +9735,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', 
@@ -9523,10 +9782,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', 
@@ -9568,16 +9832,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', 
@@ -9600,6 +9869,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', 
@@ -9620,6 +9893,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', 
@@ -9628,6 +9905,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', 
@@ -9658,10 +9939,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', 
@@ -9719,6 +10000,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', 
@@ -9728,6 +10019,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', 
@@ -9737,11 +10033,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', 
@@ -9783,18 +10104,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', 
@@ -9811,6 +10132,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', 
@@ -9867,10 +10192,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', 
@@ -9909,6 +10250,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', 
@@ -9929,6 +10275,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', 
@@ -9939,14 +10290,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]
@@ -9974,6 +10325,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 *', 
@@ -10069,10 +10425,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', 
@@ -10099,6 +10455,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', 
@@ -10168,15 +10529,20 @@
     cls.add_constructor([param('ns3::YansWifiPhy const &', 'arg0')])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy::YansWifiPhy() [constructor]
     cls.add_constructor([])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): int64_t ns3::YansWifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::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_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
@@ -10322,6 +10688,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -10332,6 +10703,21 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::YansWifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxGain() const [member function]
     cls.add_method('GetTxGain', 
                    'double', 
@@ -10407,10 +10793,15 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -10480,10 +10871,10 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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', 
@@ -10498,6 +10889,11 @@
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
                    [param('double', 'noiseFigureDb')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -10520,14 +10916,14 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time rxDuration) [member function]
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePreambleAndHeader', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'rxDuration')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'rxDuration')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
@@ -11706,6 +12102,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', 
@@ -11795,9 +12193,14 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    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', 
+    ## 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', 
                    [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
@@ -11853,14 +12256,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', 
@@ -11893,10 +12296,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', 
@@ -11951,6 +12350,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', 
@@ -11980,14 +12383,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', 
@@ -12117,6 +12520,115 @@
                    is_virtual=True)
     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')])
@@ -12326,6 +12838,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', 
@@ -12380,10 +12897,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', 
@@ -12470,6 +12998,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):
@@ -12512,6 +13048,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_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')])
@@ -12587,6 +13416,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 >', 
@@ -12602,6 +13436,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', 
@@ -12617,6 +13456,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', 
@@ -12667,6 +13516,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]
@@ -12809,6 +13663,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 >', 
@@ -12824,6 +13683,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', 
@@ -12851,7 +13715,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', 
@@ -12910,6 +13780,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]
@@ -13192,6 +14067,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 >', 
@@ -13202,6 +14082,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', 
@@ -13222,6 +14112,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', 
@@ -13232,6 +14132,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', 
@@ -13348,16 +14253,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 >', 
@@ -13381,7 +14303,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', 
@@ -13530,6 +14453,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', 
@@ -13789,10 +14738,6 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLow::GetMpduAggregator() [member function]
-    cls.add_method('GetMpduAggregator', 
-                   'ns3::Ptr< ns3::MpduAggregator >', 
-                   [])
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -13836,10 +14781,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet const> packet, double rxSnr) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
@@ -13884,10 +14829,6 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
-    cls.add_method('SetMpduAggregator', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -14054,11 +14995,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MsduAggregator_methods(root_module, cls):
@@ -14076,11 +15027,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): uint32_t ns3::MsduAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## msdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): void ns3::MsduAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3NetDevice_methods(root_module, cls):
@@ -14215,6 +15176,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]
@@ -14294,6 +15341,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', 
@@ -14387,23 +15439,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wave-mac-helper.h (module 'wave'): static ns3::NqosWaveMacHelper ns3::NqosWaveMacHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::NqosWaveMacHelper', 
-                   [], 
-                   is_static=True)
-    ## wave-mac-helper.h (module 'wave'): void ns3::NqosWaveMacHelper::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()) [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()')], 
-                   is_virtual=True)
-    return
-
 def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
     cls.add_constructor([])
@@ -14770,21 +15805,25 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3QosWaveMacHelper_methods(root_module, cls):
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper(ns3::QosWaveMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosWaveMacHelper const &', 'arg0')])
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wave-mac-helper.h (module 'wave'): static ns3::QosWaveMacHelper ns3::QosWaveMacHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::QosWaveMacHelper', 
+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_static=True)
-    ## wave-mac-helper.h (module 'wave'): void ns3::QosWaveMacHelper::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()) [member function]
-    cls.add_method('SetType', 
+                   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::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()')], 
-                   is_virtual=True)
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -14874,6 +15913,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', 
@@ -14949,6 +15998,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', 
@@ -15024,6 +16083,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', 
@@ -15089,6 +16153,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):
@@ -16007,10 +17081,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time duration) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time duration) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'duration')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
diff -Naur ns-3.24.1/src/wave/bindings/modulegen__gcc_LP64.py ns-3.25/src/wave/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/wave/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/wave/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -20,14 +20,20 @@
 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]
     module.add_enum('WifiPhyStandard', ['WIFI_PHY_STANDARD_80211a', 'WIFI_PHY_STANDARD_80211b', 'WIFI_PHY_STANDARD_80211g', 'WIFI_PHY_STANDARD_80211_10MHZ', 'WIFI_PHY_STANDARD_80211_5MHZ', 'WIFI_PHY_STANDARD_holland', 'WIFI_PHY_STANDARD_80211n_2_4GHZ', 'WIFI_PHY_STANDARD_80211n_5GHZ', 'WIFI_PHY_STANDARD_80211ac'], import_from_module='ns.wifi')
+    ## wifi-mode.h (module 'wifi'): ns3::WifiCodeRate [enumeration]
+    module.add_enum('WifiCodeRate', ['WIFI_CODE_RATE_UNDEFINED', 'WIFI_CODE_RATE_3_4', 'WIFI_CODE_RATE_2_3', 'WIFI_CODE_RATE_1_2', 'WIFI_CODE_RATE_5_6'], import_from_module='ns.wifi')
     ## qos-utils.h (module 'wifi'): ns3::AcIndex [enumeration]
     module.add_enum('AcIndex', ['AC_BE', 'AC_BK', 'AC_VI', 'AC_VO', 'AC_BE_NQOS', 'AC_UNDEF'], import_from_module='ns.wifi')
     ## channel-scheduler.h (module 'wave'): ns3::ChannelAccess [enumeration]
@@ -38,8 +44,6 @@
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'], import_from_module='ns.wifi')
     ## vsa-manager.h (module 'wave'): ns3::VsaTransmitInterval [enumeration]
     module.add_enum('VsaTransmitInterval', ['VSA_TRANSMIT_IN_CCHI', 'VSA_TRANSMIT_IN_SCHI', 'VSA_TRANSMIT_IN_BOTHI'])
-    ## 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')
     ## 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]
@@ -183,7 +187,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]
@@ -230,7 +234,7 @@
     module.add_class('WaveHelper', allow_subclassing=True)
     ## 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')
@@ -282,6 +286,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')
     ## mgt-headers.h (module 'wifi'): ns3::MgtAddBaRequestHeader [class]
@@ -298,16 +304,16 @@
     module.add_class('MgtProbeRequestHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtProbeResponseHeader [class]
     module.add_class('MgtProbeResponseHeader', import_from_module='ns.wifi', parent=root_module['ns3::Header'])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper [class]
-    module.add_class('NqosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
+    module.add_class('NqosWaveMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## object.h (module 'core'): ns3::Object [class]
     module.add_class('Object', import_from_module='ns.core', parent=root_module['ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter >'])
     ## object.h (module 'core'): ns3::Object::AggregateIterator [class]
     module.add_class('AggregateIterator', import_from_module='ns.core', outer_class=root_module['ns3::Object'])
     ## pcap-file-wrapper.h (module 'network'): ns3::PcapFileWrapper [class]
     module.add_class('PcapFileWrapper', import_from_module='ns.network', parent=root_module['ns3::Object'])
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper [class]
-    module.add_class('QosWifiMacHelper', import_from_module='ns.wifi', parent=root_module['ns3::WifiMacHelper'])
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper [class]
+    module.add_class('QosWaveMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## 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]
@@ -332,12 +338,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]
@@ -348,6 +358,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]
@@ -416,6 +428,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')
     ## wave-helper.h (module 'wave'): ns3::YansWavePhyHelper [class]
     module.add_class('YansWavePhyHelper', parent=root_module['ns3::YansWifiPhyHelper'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -474,6 +488,12 @@
     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'])
+    ## 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> >'])
     ## random-variable-stream.h (module 'core'): ns3::ExponentialRandomVariable [class]
@@ -488,6 +508,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'])
     ## 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]
@@ -544,14 +570,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'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
     module.add_class('NixVector', import_from_module='ns.network', parent=root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
     ## node.h (module 'network'): ns3::Node [class]
     module.add_class('Node', import_from_module='ns.network', parent=root_module['ns3::Object'])
     ## random-variable-stream.h (module 'core'): ns3::NormalRandomVariable [class]
     module.add_class('NormalRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper [class]
-    module.add_class('NqosWaveMacHelper', parent=root_module['ns3::NqosWifiMacHelper'])
     ## 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]
@@ -570,8 +598,8 @@
     module.add_class('PointerChecker', import_from_module='ns.core', parent=root_module['ns3::AttributeChecker'])
     ## pointer.h (module 'core'): ns3::PointerValue [class]
     module.add_class('PointerValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper [class]
-    module.add_class('QosWaveMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
+    ## 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]
@@ -629,6 +657,8 @@
     module.add_container('std::vector< int >', 'int', container_type=u'vector')
     module.add_container('std::vector< unsigned int >', 'unsigned int', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('std::vector< ns3::Ipv6Address >', 'ns3::Ipv6Address', container_type=u'vector')
+    module.add_container('std::map< ns3::Mac48Address, bool >', ('ns3::Mac48Address', 'bool'), container_type=u'map')
     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::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
@@ -843,11 +873,11 @@
     register_Ns3MgtDelBaHeader_methods(root_module, root_module['ns3::MgtDelBaHeader'])
     register_Ns3MgtProbeRequestHeader_methods(root_module, root_module['ns3::MgtProbeRequestHeader'])
     register_Ns3MgtProbeResponseHeader_methods(root_module, root_module['ns3::MgtProbeResponseHeader'])
-    register_Ns3NqosWifiMacHelper_methods(root_module, root_module['ns3::NqosWifiMacHelper'])
+    register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
     register_Ns3PcapFileWrapper_methods(root_module, root_module['ns3::PcapFileWrapper'])
-    register_Ns3QosWifiMacHelper_methods(root_module, root_module['ns3::QosWifiMacHelper'])
+    register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
     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> >'])
@@ -860,9 +890,11 @@
     register_Ns3SimpleRefCount__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
     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'])
@@ -919,6 +951,9 @@
     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_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_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
     register_Ns3ExtendedSupportedRatesIE_methods(root_module, root_module['ns3::ExtendedSupportedRatesIE'])
@@ -926,6 +961,9 @@
     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_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'])
@@ -951,10 +989,11 @@
     register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
     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'])
-    register_Ns3NqosWaveMacHelper_methods(root_module, root_module['ns3::NqosWaveMacHelper'])
     register_Ns3ObjectFactoryChecker_methods(root_module, root_module['ns3::ObjectFactoryChecker'])
     register_Ns3ObjectFactoryValue_methods(root_module, root_module['ns3::ObjectFactoryValue'])
     register_Ns3OrganizationIdentifierChecker_methods(root_module, root_module['ns3::OrganizationIdentifierChecker'])
@@ -964,7 +1003,7 @@
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3PointerChecker_methods(root_module, root_module['ns3::PointerChecker'])
     register_Ns3PointerValue_methods(root_module, root_module['ns3::PointerValue'])
-    register_Ns3QosWaveMacHelper_methods(root_module, root_module['ns3::QosWaveMacHelper'])
+    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'])
@@ -1615,10 +1654,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', 
@@ -2078,6 +2117,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', 
@@ -2091,6 +2140,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_Ns3EdcaParameter_methods(root_module, cls):
@@ -2388,6 +2445,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', 
@@ -2403,6 +2465,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', 
@@ -2504,10 +2571,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', 
@@ -2692,7 +2759,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', 
@@ -2882,10 +2949,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', 
@@ -3105,6 +3172,11 @@
                    'ns3::Mac48Address', 
                    [param('ns3::WifiMacHeader const &', 'hdr')], 
                    is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMsduAggregator() const [member function]
     cls.add_method('GetMsduAggregator', 
                    'ns3::Ptr< ns3::MsduAggregator >', 
@@ -3150,10 +3222,10 @@
                    'void', 
                    [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
                    is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(bool ampdu) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpdu', 
                    'void', 
-                   [param('bool', 'ampdu')], 
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')], 
                    is_virtual=True)
     return
 
@@ -3214,10 +3286,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3229,10 +3301,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck() [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [], 
+                   [param('uint32_t', 'nMpdus')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedCts() [member function]
     cls.add_method('MissedCts', 
@@ -3872,8 +3944,6 @@
     cls.add_constructor([])
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::Parameters(ns3::Parameters const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Parameters const &', 'arg0')])
-    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::aMpdu [variable]
-    cls.add_instance_attribute('aMpdu', 'ns3::mpduInfo', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::duration [variable]
     cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::preamble [variable]
@@ -3882,6 +3952,8 @@
     cls.add_instance_attribute('rxPowerDbm', 'double', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::txVector [variable]
     cls.add_instance_attribute('txVector', 'ns3::WifiTxVector', is_const=False)
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3PcapFile_methods(root_module, cls):
@@ -3942,10 +4014,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', 
@@ -4764,7 +4840,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', 
@@ -4797,15 +4873,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):
@@ -4817,21 +4898,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', 
@@ -4842,11 +4928,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', 
@@ -4857,6 +4953,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', 
@@ -4986,6 +5092,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]
@@ -4995,13 +5103,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):
@@ -5255,10 +5367,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):
@@ -5645,11 +5757,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', 
@@ -5709,6 +5831,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', 
@@ -5935,6 +6061,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', 
@@ -5985,6 +6116,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', 
@@ -6017,11 +6152,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', 
@@ -6060,10 +6210,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', 
@@ -6225,11 +6387,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', 
@@ -6278,10 +6455,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', 
@@ -6296,26 +6485,21 @@
                    [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
-def register_Ns3NqosWifiMacHelper_methods(root_module, cls):
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper(ns3::NqosWifiMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NqosWifiMacHelper const &', 'arg0')])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper() [constructor]
+def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
+    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper() [constructor]
     cls.add_constructor([])
-    ## nqos-wifi-mac-helper.h (module 'wifi'): static ns3::NqosWifiMacHelper ns3::NqosWifiMacHelper::Default() [member function]
+    ## wave-mac-helper.h (module 'wave'): static ns3::NqosWaveMacHelper ns3::NqosWaveMacHelper::Default() [member function]
     cls.add_method('Default', 
-                   'ns3::NqosWifiMacHelper', 
+                   'ns3::NqosWaveMacHelper', 
                    [], 
                    is_static=True)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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()) [member function]
+    ## wave-mac-helper.h (module 'wave'): void ns3::NqosWaveMacHelper::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', '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)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::NqosWifiMacHelper::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::WifiMac >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Object_methods(root_module, cls):
@@ -6430,6 +6614,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', 
@@ -6460,42 +6648,21 @@
                    [])
     return
 
-def register_Ns3QosWifiMacHelper_methods(root_module, cls):
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper::QosWifiMacHelper(ns3::QosWifiMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosWifiMacHelper const &', 'arg0')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::QosWifiMacHelper::QosWifiMacHelper() [constructor]
+def register_Ns3QosWaveMacHelper_methods(root_module, cls):
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper(ns3::QosWaveMacHelper const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::QosWaveMacHelper const &', 'arg0')])
+    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper() [constructor]
     cls.add_constructor([])
-    ## qos-wifi-mac-helper.h (module 'wifi'): static ns3::QosWifiMacHelper ns3::QosWifiMacHelper::Default() [member function]
+    ## wave-mac-helper.h (module 'wave'): static ns3::QosWaveMacHelper ns3::QosWaveMacHelper::Default() [member function]
     cls.add_method('Default', 
-                   'ns3::QosWifiMacHelper', 
+                   'ns3::QosWaveMacHelper', 
                    [], 
                    is_static=True)
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetBlockAckInactivityTimeoutForAc(ns3::AcIndex ac, uint16_t timeout) [member function]
-    cls.add_method('SetBlockAckInactivityTimeoutForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), param('uint16_t', 'timeout')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetBlockAckThresholdForAc(ns3::AcIndex ac, uint8_t threshold) [member function]
-    cls.add_method('SetBlockAckThresholdForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), param('uint8_t', 'threshold')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMpduAggregatorForAc(ns3::AcIndex ac, 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()) [member function]
-    cls.add_method('SetMpduAggregatorForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::SetMsduAggregatorForAc(ns3::AcIndex ac, 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()) [member function]
-    cls.add_method('SetMsduAggregatorForAc', 
-                   'void', 
-                   [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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()) [member function]
+    ## wave-mac-helper.h (module 'wave'): void ns3::QosWaveMacHelper::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', '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)
-    ## qos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::QosWifiMacHelper::Create() const [member function]
-    cls.add_method('Create', 
-                   'ns3::Ptr< ns3::WifiMac >', 
-                   [], 
-                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3RandomVariableStream_methods(root_module, cls):
@@ -6701,6 +6868,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([])
@@ -6737,6 +6916,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([])
@@ -6840,6 +7031,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', 
@@ -6865,6 +7061,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', 
@@ -8156,6 +8367,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', 
@@ -8275,6 +8491,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', 
@@ -8849,6 +9070,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', 
@@ -8858,15 +9084,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', 
@@ -9317,10 +9547,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', 
@@ -9361,6 +9595,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', 
@@ -9371,6 +9610,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', 
@@ -9481,6 +9735,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', 
@@ -9523,10 +9782,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', 
@@ -9568,16 +9832,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', 
@@ -9600,6 +9869,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', 
@@ -9620,6 +9893,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', 
@@ -9628,6 +9905,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', 
@@ -9658,10 +9939,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', 
@@ -9719,6 +10000,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', 
@@ -9728,6 +10019,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', 
@@ -9737,11 +10033,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', 
@@ -9783,18 +10104,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', 
@@ -9811,6 +10132,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', 
@@ -9867,10 +10192,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', 
@@ -9909,6 +10250,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', 
@@ -9929,6 +10275,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', 
@@ -9939,14 +10290,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]
@@ -9974,6 +10325,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 *', 
@@ -10069,10 +10425,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', 
@@ -10099,6 +10455,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', 
@@ -10168,15 +10529,20 @@
     cls.add_constructor([param('ns3::YansWifiPhy const &', 'arg0')])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy::YansWifiPhy() [constructor]
     cls.add_constructor([])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): int64_t ns3::YansWifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::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_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
@@ -10322,6 +10688,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -10332,6 +10703,21 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::YansWifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxGain() const [member function]
     cls.add_method('GetTxGain', 
                    'double', 
@@ -10407,10 +10793,15 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -10480,10 +10871,10 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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', 
@@ -10498,6 +10889,11 @@
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
                    [param('double', 'noiseFigureDb')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -10520,14 +10916,14 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time rxDuration) [member function]
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePreambleAndHeader', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'rxDuration')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'rxDuration')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
@@ -11706,6 +12102,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', 
@@ -11795,9 +12193,14 @@
                    'ns3::Ptr< ns3::MsduAggregator >', 
                    [], 
                    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', 
+    ## 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', 
                    [param('ns3::Mac48Address', 'address'), param('uint8_t', 'tid')])
     ## edca-txop-n.h (module 'wifi'): uint32_t ns3::EdcaTxopN::GetNOutstandingPacketsInBa(ns3::Mac48Address address, uint8_t tid) [member function]
     cls.add_method('GetNOutstandingPacketsInBa', 
@@ -11853,14 +12256,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', 
@@ -11893,10 +12296,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', 
@@ -11951,6 +12350,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', 
@@ -11980,14 +12383,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', 
@@ -12117,6 +12520,115 @@
                    is_virtual=True)
     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')])
@@ -12326,6 +12838,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', 
@@ -12380,10 +12897,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', 
@@ -12470,6 +12998,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):
@@ -12512,6 +13048,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_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')])
@@ -12587,6 +13416,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 >', 
@@ -12602,6 +13436,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', 
@@ -12617,6 +13456,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', 
@@ -12667,6 +13516,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]
@@ -12809,6 +13663,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 >', 
@@ -12824,6 +13683,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', 
@@ -12851,7 +13715,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', 
@@ -12910,6 +13780,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]
@@ -13192,6 +14067,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 >', 
@@ -13202,6 +14082,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', 
@@ -13222,6 +14112,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', 
@@ -13232,6 +14132,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', 
@@ -13348,16 +14253,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 >', 
@@ -13381,7 +14303,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', 
@@ -13530,6 +14453,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', 
@@ -13789,10 +14738,6 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLow::GetMpduAggregator() [member function]
-    cls.add_method('GetMpduAggregator', 
-                   'ns3::Ptr< ns3::MpduAggregator >', 
-                   [])
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -13836,10 +14781,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet const> packet, double rxSnr) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
@@ -13884,10 +14829,6 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
-    cls.add_method('SetMpduAggregator', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -14054,11 +14995,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MsduAggregator_methods(root_module, cls):
@@ -14076,11 +15027,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): uint32_t ns3::MsduAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## msdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): void ns3::MsduAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3NetDevice_methods(root_module, cls):
@@ -14215,6 +15176,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]
@@ -14294,6 +15341,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', 
@@ -14387,23 +15439,6 @@
                    is_virtual=True)
     return
 
-def register_Ns3NqosWaveMacHelper_methods(root_module, cls):
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper(ns3::NqosWaveMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::NqosWaveMacHelper const &', 'arg0')])
-    ## wave-mac-helper.h (module 'wave'): ns3::NqosWaveMacHelper::NqosWaveMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wave-mac-helper.h (module 'wave'): static ns3::NqosWaveMacHelper ns3::NqosWaveMacHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::NqosWaveMacHelper', 
-                   [], 
-                   is_static=True)
-    ## wave-mac-helper.h (module 'wave'): void ns3::NqosWaveMacHelper::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()) [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()')], 
-                   is_virtual=True)
-    return
-
 def register_Ns3ObjectFactoryChecker_methods(root_module, cls):
     ## object-factory.h (module 'core'): ns3::ObjectFactoryChecker::ObjectFactoryChecker() [constructor]
     cls.add_constructor([])
@@ -14770,21 +15805,25 @@
                    [param('ns3::Ptr< ns3::Object >', 'object')])
     return
 
-def register_Ns3QosWaveMacHelper_methods(root_module, cls):
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper(ns3::QosWaveMacHelper const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::QosWaveMacHelper const &', 'arg0')])
-    ## wave-mac-helper.h (module 'wave'): ns3::QosWaveMacHelper::QosWaveMacHelper() [constructor]
-    cls.add_constructor([])
-    ## wave-mac-helper.h (module 'wave'): static ns3::QosWaveMacHelper ns3::QosWaveMacHelper::Default() [member function]
-    cls.add_method('Default', 
-                   'ns3::QosWaveMacHelper', 
+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_static=True)
-    ## wave-mac-helper.h (module 'wave'): void ns3::QosWaveMacHelper::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()) [member function]
-    cls.add_method('SetType', 
+                   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::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()')], 
-                   is_virtual=True)
+                   [param('std::ostream &', 'os')], 
+                   is_const=True, is_virtual=True)
     return
 
 def register_Ns3RegularWifiMac_methods(root_module, cls):
@@ -14874,6 +15913,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', 
@@ -14949,6 +15998,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', 
@@ -15024,6 +16083,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', 
@@ -15089,6 +16153,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):
@@ -16007,10 +17081,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time duration) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time duration) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'duration')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
diff -Naur ns-3.24.1/src/wave/examples/vanet-routing-compare.cc ns-3.25/src/wave/examples/vanet-routing-compare.cc
--- ns-3.24.1/src/wave/examples/vanet-routing-compare.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/wave/examples/vanet-routing-compare.cc	2016-03-23 21:36:53.000000000 -0700
@@ -1326,7 +1326,7 @@
     // 1=802.11p
     m_80211mode (1),
     m_traceFile (""),
-    m_logFile ("low_ct-unterstrass-1day.filt.5.adj.log"),
+    m_logFile ("low99-ct-unterstrass-1day.filt.7.adj.log"),
     m_mobility (1),
     m_nNodes (156),
     m_TotalSimTime (300.01),
@@ -1529,11 +1529,11 @@
                                    ns3::MakeStringChecker ());
 static ns3::GlobalValue g_traceFile ("VRCtraceFile",
                                      "Mobility trace filename",
-                                     ns3::StringValue ("./src/wave/examples/low_ct-unterstrass-1day.filt.5.adj.mob"),
+                                     ns3::StringValue ("./src/wave/examples/low99-ct-unterstrass-1day.filt.7.adj.mob"),
                                      ns3::MakeStringChecker ());
 static ns3::GlobalValue g_logFile ("VRClogFile",
                                    "Log filename",
-                                   ns3::StringValue ("low_ct-unterstrass-1day.filt.5.adj.log"),
+                                   ns3::StringValue ("low99-ct-unterstrass-1day.filt.7.adj.log"),
                                    ns3::MakeStringChecker ());
 static ns3::GlobalValue g_rate ("VRCrate",
                                 "Data rate",
@@ -2280,8 +2280,8 @@
   wavePhy.Set ("TxPowerStart",DoubleValue (m_txp));
   wavePhy.Set ("TxPowerEnd", DoubleValue (m_txp));
 
-  // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  // Add an upper mac and disable rate control
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
   QosWaveMacHelper waveMac = QosWaveMacHelper::Default ();
 
diff -Naur ns-3.24.1/src/wave/helper/wave-helper.cc ns-3.25/src/wave/helper/wave-helper.cc
--- ns-3.24.1/src/wave/helper/wave-helper.cc	2015-09-23 12:28:41.000000000 -0700
+++ ns-3.25/src/wave/helper/wave-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -168,7 +168,7 @@
             mcsRate = rate - 128;
 
             mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
               }
@@ -209,7 +209,6 @@
         if (txVector.IsAggregation ())
           {
             uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
-            ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_DELIMITER_CRC_KNOWN;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
             /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
             AmpduSubframeHeader hdr;
@@ -217,11 +216,11 @@
             p->RemoveHeader (hdr);
             extractedLength = hdr.GetLength ();
             p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.packetType == 2 || (hdr.GetEof () == true && hdr.GetLength () > 0))
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
               {
                 ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
               }
-            header.SetAmpduStatus (aMpdu.referenceNumber, ampduStatusFlags, hdr.GetCrc ());
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
           }
 
         if (preamble == WIFI_PREAMBLE_VHT)
@@ -250,15 +249,15 @@
 
             vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
             //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 vhtBandwidth = 1;
               }
-            else if (txVector.GetChannelWidth () == 80000000)
+            else if (txVector.GetChannelWidth () == 80)
               {
                 vhtBandwidth = 4;
               }
-            else if (txVector.GetChannelWidth () == 160000000)
+            else if (txVector.GetChannelWidth () == 160)
               {
                 vhtBandwidth = 11;
               }
@@ -365,7 +364,7 @@
             mcsRate = rate - 128;
 
             mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
               }
@@ -405,7 +404,7 @@
 
         if (txVector.IsAggregation ())
           {
-            uint16_t ampduStatusFlags = 0;
+            uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_DELIMITER_CRC_KNOWN;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
             /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
@@ -414,11 +413,11 @@
             p->RemoveHeader (hdr);
             extractedLength = hdr.GetLength ();
             p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.packetType == 2 || (hdr.GetEof () == true && hdr.GetLength () > 0))
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
               {
                 ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
               }
-            header.SetAmpduStatus (aMpdu.referenceNumber, ampduStatusFlags, hdr.GetCrc ());
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
           }
 
         if (preamble == WIFI_PREAMBLE_VHT)
@@ -447,15 +446,15 @@
 
             vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
             //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 vhtBandwidth = 1;
               }
-            else if (txVector.GetChannelWidth () == 80000000)
+            else if (txVector.GetChannelWidth () == 80)
               {
                 vhtBandwidth = 4;
               }
-            else if (txVector.GetChannelWidth () == 160000000)
+            else if (txVector.GetChannelWidth () == 160)
               {
                 vhtBandwidth = 11;
               }
diff -Naur ns-3.24.1/src/wave/helper/wave-mac-helper.cc ns-3.25/src/wave/helper/wave-mac-helper.cc
--- ns-3.24.1/src/wave/helper/wave-mac-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wave/helper/wave-mac-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -54,13 +54,16 @@
                             std::string n4, const AttributeValue &v4,
                             std::string n5, const AttributeValue &v5,
                             std::string n6, const AttributeValue &v6,
-                            std::string n7, const AttributeValue &v7)
+                            std::string n7, const AttributeValue &v7,
+                            std::string n8, const AttributeValue &v8,
+                            std::string n9, const AttributeValue &v9,
+                            std::string n10, const AttributeValue &v10)
 {
   if (type.compare ("ns3::OcbWifiMac") != 0)
     {
       NS_FATAL_ERROR ("QosWaveMacHelper shall set OcbWifiMac");
     }
-  NqosWifiMacHelper::SetType ("ns3::OcbWifiMac",
+  WifiMacHelper::SetType ("ns3::OcbWifiMac",
                               n0, v0,
                               n1, v1,
                               n2, v2,
@@ -68,7 +71,10 @@
                               n4, v4,
                               n5, v5,
                               n6, v6,
-                              n7, v7);
+                              n7, v7,
+                              n8, v8,
+                              n9, v9,
+                              n10, v10);
 }
 
 /**********  QosWifi80211pMacHelper *********/
@@ -100,13 +106,16 @@
                            std::string n4, const AttributeValue &v4,
                            std::string n5, const AttributeValue &v5,
                            std::string n6, const AttributeValue &v6,
-                           std::string n7, const AttributeValue &v7)
+                           std::string n7, const AttributeValue &v7,
+                           std::string n8, const AttributeValue &v8,
+                           std::string n9, const AttributeValue &v9,
+                           std::string n10, const AttributeValue &v10)
 {
   if (type.compare ("ns3::OcbWifiMac") != 0)
     {
       NS_FATAL_ERROR ("QosWaveMacHelper shall set OcbWifiMac");
     }
-  QosWifiMacHelper::SetType ("ns3::OcbWifiMac",
+  WifiMacHelper::SetType ("ns3::OcbWifiMac",
                              n0, v0,
                              n1, v1,
                              n2, v2,
@@ -114,7 +123,10 @@
                              n4, v4,
                              n5, v5,
                              n6, v6,
-                             n7, v7);
+                             n7, v7,
+                             n8, v8,
+                             n9, v9,
+                             n10, v10);
 }
 
 } // namespace ns3
diff -Naur ns-3.24.1/src/wave/helper/wave-mac-helper.h ns-3.25/src/wave/helper/wave-mac-helper.h
--- ns-3.24.1/src/wave/helper/wave-mac-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wave/helper/wave-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,12 +23,11 @@
  */
 #ifndef WAVE_MAC_HELPER_H
 #define WAVE_MAC_HELPER_H
-#include "ns3/qos-wifi-mac-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
+#include "ns3/wifi-mac-helper.h"
 
 namespace ns3 {
 
-class NqosWaveMacHelper : public NqosWifiMacHelper
+class NqosWaveMacHelper : public WifiMacHelper
 {
 public:
   /**
@@ -64,6 +63,12 @@
    * \param v6 the value of the attribute to set
    * \param n7 the name of the attribute to set
    * \param v7 the value of the attribute to set
+   * \param n8 the value of the attribute to set
+   * \param v8 the value of the attribute to set
+   * \param n9 the value of the attribute to set
+   * \param v9 the value of the attribute to set
+   * \param n10 the value of the attribute to set
+   * \param v10 the value of the attribute to set
    *
    * All the attributes specified in this method should exist
    * in the requested mac.
@@ -79,10 +84,13 @@
                         std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
                         std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
                         std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue (),
+                        std::string n8 = "", const AttributeValue &v8 = EmptyAttributeValue (),
+                        std::string n9 = "", const AttributeValue &v9 = EmptyAttributeValue (),
+                        std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue ());
 };
 
-class QosWaveMacHelper : public QosWifiMacHelper
+class QosWaveMacHelper : public WifiMacHelper
 {
 public:
   /**
@@ -119,6 +127,12 @@
    * \param v6 the value of the attribute to set
    * \param n7 the name of the attribute to set
    * \param v7 the value of the attribute to set
+   * \param n8 the value of the attribute to set
+   * \param v8 the value of the attribute to set
+   * \param n9 the value of the attribute to set
+   * \param v9 the value of the attribute to set
+   * \param n10 the value of the attribute to set
+   * \param v10 the value of the attribute to set
    *
    * All the attributes specified in this method should exist
    * in the requested mac.
@@ -134,7 +148,10 @@
                         std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
                         std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
                         std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue (),
+                        std::string n8 = "", const AttributeValue &v8 = EmptyAttributeValue (),
+                        std::string n9 = "", const AttributeValue &v9 = EmptyAttributeValue (),
+                        std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue ());
 };
 
 }
diff -Naur ns-3.24.1/src/wave/model/ocb-wifi-mac.cc ns-3.25/src/wave/model/ocb-wifi-mac.cc
--- ns-3.24.1/src/wave/model/ocb-wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wave/model/ocb-wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -201,6 +201,10 @@
       hdr.SetTypeData ();
     }
 
+  if (m_htSupported || m_vhtSupported)
+    {
+      hdr.SetNoOrder ();
+    }
   hdr.SetAddr1 (to);
   hdr.SetAddr2 (GetAddress ());
   hdr.SetAddr3 (WILDCARD_BSSID);
diff -Naur ns-3.24.1/src/wave/test/ocb-test-suite.cc ns-3.25/src/wave/test/ocb-test-suite.cc
--- ns-3.24.1/src/wave/test/ocb-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wave/test/ocb-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,7 +30,6 @@
 #include "ns3/position-allocator.h"
 #include "ns3/packet-socket-helper.h"
 #include "ns3/mobility-helper.h"
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/packet-socket-server.h"
 #include "ns3/packet-socket-client.h"
@@ -198,12 +197,12 @@
   wifiPhy.SetChannel (wifiChannel.Create ());
 
   Ssid ssid = Ssid ("wifi-default");
-  NqosWifiMacHelper wifiStaMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiStaMac;
   wifiStaMac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid));
-  NqosWifiMacHelper wifiApMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiApMac;
   wifiApMac.SetType ("ns3::ApWifiMac","Ssid", SsidValue (ssid));
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211_10MHZ);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
@@ -219,10 +218,10 @@
   YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
   wifiPhy.SetChannel (wifiChannel.Create ());
 
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifiMac.SetType ("ns3::AdhocWifiMac");
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211_10MHZ);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
diff -Naur ns-3.24.1/src/wifi/bindings/callbacks_list.py ns-3.25/src/wifi/bindings/callbacks_list.py
--- ns-3.24.1/src/wifi/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -2,12 +2,13 @@
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'double', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'int', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::Packet const>', 'double', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::Packet>', 'double', 'bool', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', 'double', 'ns3::WifiTxVector', 'ns3::WifiPreamble', '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::Packet>', 'ns3::WifiMacHeader 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'],
     ['void', 'ns3::WifiMacHeader const&', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Packet>', 'ns3::Mac48Address', 'ns3::Mac48Address', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Mac48Address', 'unsigned char', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff -Naur ns-3.24.1/src/wifi/bindings/modulegen__gcc_ILP32.py ns-3.25/src/wifi/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/wifi/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -22,14 +22,16 @@
     
     ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
     module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
+    ## ht-operations.h (module 'wifi'): ns3::HtProtectionType [enumeration]
+    module.add_enum('HtProtectionType', ['NO_PROTECTION', 'NON_MEMBER_PROTECTION', 'TWENTY_MHZ_PROTECTION', 'MIXED_MODE_PROTECTION'])
     ## 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'])
     ## 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'])
-    ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
-    module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
+    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'])
     ## 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'])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'])
     ## 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'])
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
@@ -42,6 +44,8 @@
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'])
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'])
+    ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
+    module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
     ## 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]
@@ -96,8 +100,12 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True, import_from_module='ns.energy')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo [struct]
+    module.add_class('GroupInfo')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo [struct]
+    module.add_class('HtRateInfo')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
     module.add_class('InterferenceHelper')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
@@ -130,6 +138,8 @@
     module.add_class('MacRxMiddle')
     ## mac-tx-middle.h (module 'wifi'): ns3::MacTxMiddle [class]
     module.add_class('MacTxMiddle')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup [struct]
+    module.add_class('McsGroup')
     ## 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]
@@ -169,7 +179,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')
     ## propagation-cache.h (module 'propagation'): ns3::PropagationCache<ns3::JakesProcess> [class]
@@ -190,6 +200,8 @@
     module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long long> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned long long'])
     ## 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]
@@ -204,7 +216,7 @@
     module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True)
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode')
@@ -264,6 +276,8 @@
     module.add_class('MgtProbeRequestHeader', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtProbeResponseHeader [class]
     module.add_class('MgtProbeResponseHeader', parent=root_module['ns3::Header'])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation [struct]
+    module.add_class('MinstrelWifiRemoteStation', parent=root_module['ns3::WifiRemoteStation'])
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper [class]
     module.add_class('NqosWifiMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## object.h (module 'core'): ns3::Object [class]
@@ -304,12 +318,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::InterferenceHelper::Event', 'ns3::empty', 'ns3::DefaultDeleter<ns3::InterferenceHelper::Event>'], parent=root_module['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]
@@ -376,6 +394,8 @@
     module.add_class('WifiPhyStateHelper', parent=root_module['ns3::Object'])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', 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'])
     ## wifi-tx-current-model.h (module 'wifi'): ns3::WifiTxCurrentModel [class]
     module.add_class('WifiTxCurrentModel', parent=root_module['ns3::Object'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -460,6 +480,12 @@
     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'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
+    module.add_class('ErpInformation', parent=root_module['ns3::WifiInformationElement'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker [class]
+    module.add_class('ErpInformationChecker', parent=root_module['ns3::AttributeChecker'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue [class]
+    module.add_class('ErpInformationValue', parent=root_module['ns3::AttributeValue'])
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
     module.add_class('ErrorRateModel', parent=root_module['ns3::Object'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -480,6 +506,12 @@
     module.add_class('HtCapabilitiesChecker', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', parent=root_module['ns3::AttributeValue'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations [class]
+    module.add_class('HtOperations', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker [class]
+    module.add_class('HtOperationsChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue [class]
+    module.add_class('HtOperationsValue', parent=root_module['ns3::AttributeValue'])
     ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper [class]
     module.add_class('HtWifiMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager [class]
@@ -528,6 +560,8 @@
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager [class]
+    module.add_class('MinstrelHtWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiManager [class]
     module.add_class('MinstrelWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
@@ -538,12 +572,18 @@
     module.add_class('MpduStandardAggregator', parent=root_module['ns3::MpduAggregator'])
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator [class]
     module.add_class('MsduAggregator', parent=root_module['ns3::Object'])
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator [class]
+    module.add_class('MsduStandardAggregator', parent=root_module['ns3::MsduAggregator'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
     module.add_class('NakagamiPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## 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'])
     ## nist-error-rate-model.h (module 'wifi'): ns3::NistErrorRateModel [class]
     module.add_class('NistErrorRateModel', parent=root_module['ns3::ErrorRateModel'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
@@ -568,6 +608,8 @@
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager [class]
     module.add_class('ParfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## 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', parent=root_module['ns3::WifiMac'])
     ## rraa-wifi-manager.h (module 'wifi'): ns3::RraaWifiManager [class]
@@ -632,9 +674,18 @@
     module.add_class('ApWifiMac', parent=root_module['ns3::RegularWifiMac'])
     ## dca-txop.h (module 'wifi'): ns3::DcaTxop [class]
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
+    module.add_container('ns3::HtMinstrelRate', 'ns3::HtRateInfo', container_type=u'vector')
+    module.add_container('ns3::TxTime', 'std::pair< ns3::Time, ns3::WifiMode >', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('ns3::MinstrelRate', 'ns3::RateInfo', container_type=u'vector')
+    module.add_container('ns3::SampleRate', 'std::vector< unsigned int >', 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::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >', u'ns3::MinstrelMcsGroups')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >*', u'ns3::MinstrelMcsGroups*')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >&', u'ns3::MinstrelMcsGroups&')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
@@ -645,6 +696,9 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >', u'ns3::TxTime')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >*', u'ns3::TxTime*')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >&', u'ns3::TxTime&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
@@ -652,9 +706,15 @@
     typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
     typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >', u'ns3::HtMinstrelRate')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >*', u'ns3::HtMinstrelRate*')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >&', u'ns3::HtMinstrelRate&')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >', u'ns3::SampleRate')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >*', u'ns3::SampleRate*')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >&', u'ns3::SampleRate&')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >', u'ns3::McsGroupData')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >*', u'ns3::McsGroupData*')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >&', u'ns3::McsGroupData&')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
@@ -662,6 +722,9 @@
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >', u'ns3::HtSampleRate')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >*', u'ns3::HtSampleRate*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >&', u'ns3::HtSampleRate&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -783,7 +846,9 @@
     register_Ns3DsssErrorRateModel_methods(root_module, root_module['ns3::DsssErrorRateModel'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3GroupInfo_methods(root_module, root_module['ns3::GroupInfo'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3HtRateInfo_methods(root_module, root_module['ns3::HtRateInfo'])
     register_Ns3InterferenceHelper_methods(root_module, root_module['ns3::InterferenceHelper'])
     register_Ns3InterferenceHelperSnrPer_methods(root_module, root_module['ns3::InterferenceHelper::SnrPer'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
@@ -797,6 +862,7 @@
     register_Ns3MacLowTransmissionParameters_methods(root_module, root_module['ns3::MacLowTransmissionParameters'])
     register_Ns3MacRxMiddle_methods(root_module, root_module['ns3::MacRxMiddle'])
     register_Ns3MacTxMiddle_methods(root_module, root_module['ns3::MacTxMiddle'])
+    register_Ns3McsGroup_methods(root_module, root_module['ns3::McsGroup'])
     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'])
@@ -823,6 +889,7 @@
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
+    register_Ns3TracedValue__Unsigned_long_long_methods(root_module, root_module['ns3::TracedValue< unsigned long long >'])
     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'])
@@ -856,6 +923,7 @@
     register_Ns3MgtDelBaHeader_methods(root_module, root_module['ns3::MgtDelBaHeader'])
     register_Ns3MgtProbeRequestHeader_methods(root_module, root_module['ns3::MgtProbeRequestHeader'])
     register_Ns3MgtProbeResponseHeader_methods(root_module, root_module['ns3::MgtProbeResponseHeader'])
+    register_Ns3MinstrelWifiRemoteStation_methods(root_module, root_module['ns3::MinstrelWifiRemoteStation'])
     register_Ns3NqosWifiMacHelper_methods(root_module, root_module['ns3::NqosWifiMacHelper'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
@@ -876,9 +944,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__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
+    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_Ns3SnrTag_methods(root_module, root_module['ns3::SnrTag'])
@@ -943,6 +1013,9 @@
     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_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_Ns3ErrorRateModel_methods(root_module, root_module['ns3::ErrorRateModel'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -953,6 +1026,9 @@
     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_Ns3HtWifiMacHelper_methods(root_module, root_module['ns3::HtWifiMacHelper'])
     register_Ns3IdealWifiManager_methods(root_module, root_module['ns3::IdealWifiManager'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
@@ -977,13 +1053,17 @@
     register_Ns3MacLow_methods(root_module, root_module['ns3::MacLow'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    register_Ns3MinstrelHtWifiManager_methods(root_module, root_module['ns3::MinstrelHtWifiManager'])
     register_Ns3MinstrelWifiManager_methods(root_module, root_module['ns3::MinstrelWifiManager'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     register_Ns3MpduStandardAggregator_methods(root_module, root_module['ns3::MpduStandardAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
+    register_Ns3MsduStandardAggregator_methods(root_module, root_module['ns3::MsduStandardAggregator'])
     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_Ns3NistErrorRateModel_methods(root_module, root_module['ns3::NistErrorRateModel'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -996,6 +1076,7 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3ParfWifiManager_methods(root_module, root_module['ns3::ParfWifiManager'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3RraaWifiManager_methods(root_module, root_module['ns3::RraaWifiManager'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
@@ -1504,10 +1585,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', 
@@ -1967,6 +2048,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', 
@@ -1980,6 +2071,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_Ns3DcfManager_methods(root_module, cls):
@@ -2112,6 +2211,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## dcf-manager.h (module 'wifi'): bool ns3::DcfState::IsEdca() const [member function]
+    cls.add_method('IsEdca', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf-manager.h (module 'wifi'): void ns3::DcfState::ResetCw() [member function]
     cls.add_method('ResetCw', 
                    'void', 
@@ -2358,6 +2462,27 @@
                    is_const=True)
     return
 
+def register_Ns3GroupInfo_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::GroupInfo() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::GroupInfo(ns3::GroupInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GroupInfo const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_col [variable]
+    cls.add_instance_attribute('m_col', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_index [variable]
+    cls.add_instance_attribute('m_index', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxProbRate [variable]
+    cls.add_instance_attribute('m_maxProbRate', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxTpRate [variable]
+    cls.add_instance_attribute('m_maxTpRate', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxTpRate2 [variable]
+    cls.add_instance_attribute('m_maxTpRate2', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_ratesTable [variable]
+    cls.add_instance_attribute('m_ratesTable', 'ns3::HtMinstrelRate', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_supported [variable]
+    cls.add_instance_attribute('m_supported', 'bool', is_const=False)
+    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')])
@@ -2387,6 +2512,47 @@
                    [])
     return
 
+def register_Ns3HtRateInfo_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::HtRateInfo() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::HtRateInfo(ns3::HtRateInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtRateInfo const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::adjustedRetryCount [variable]
+    cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::attemptHist [variable]
+    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::ewmaProb [variable]
+    cls.add_instance_attribute('ewmaProb', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::ewmsdProb [variable]
+    cls.add_instance_attribute('ewmsdProb', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::mcsIndex [variable]
+    cls.add_instance_attribute('mcsIndex', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numRateAttempt [variable]
+    cls.add_instance_attribute('numRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numRateSuccess [variable]
+    cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numSamplesSkipped [variable]
+    cls.add_instance_attribute('numSamplesSkipped', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::perfectTxTime [variable]
+    cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prevNumRateAttempt [variable]
+    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prevNumRateSuccess [variable]
+    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prob [variable]
+    cls.add_instance_attribute('prob', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::retryCount [variable]
+    cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::retryUpdated [variable]
+    cls.add_instance_attribute('retryUpdated', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::successHist [variable]
+    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::supported [variable]
+    cls.add_instance_attribute('supported', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::throughput [variable]
+    cls.add_instance_attribute('throughput', 'double', is_const=False)
+    return
+
 def register_Ns3InterferenceHelper_methods(root_module, cls):
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper(ns3::InterferenceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::InterferenceHelper const &', 'arg0')])
@@ -2509,6 +2675,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', 
@@ -2524,6 +2695,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', 
@@ -2700,7 +2876,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', 
@@ -2981,6 +3157,11 @@
                    'ns3::Mac48Address', 
                    [param('ns3::WifiMacHeader const &', 'hdr')], 
                    is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMsduAggregator() const [member function]
     cls.add_method('GetMsduAggregator', 
                    'ns3::Ptr< ns3::MsduAggregator >', 
@@ -3026,10 +3207,10 @@
                    'void', 
                    [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
                    is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(bool ampdu) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpdu', 
                    'void', 
-                   [param('bool', 'ampdu')], 
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')], 
                    is_virtual=True)
     return
 
@@ -3090,10 +3271,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3105,10 +3286,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck() [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [], 
+                   [param('uint32_t', 'nMpdus')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedCts() [member function]
     cls.add_method('MissedCts', 
@@ -3277,6 +3458,27 @@
                    [param('ns3::WifiMacHeader const *', 'hdr')])
     return
 
+def register_Ns3McsGroup_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::McsGroup() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::McsGroup(ns3::McsGroup const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McsGroup const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::chWidth [variable]
+    cls.add_instance_attribute('chWidth', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::isSupported [variable]
+    cls.add_instance_attribute('isSupported', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::isVht [variable]
+    cls.add_instance_attribute('isVht', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::ratesFirstMpduTxTimeTable [variable]
+    cls.add_instance_attribute('ratesFirstMpduTxTimeTable', 'ns3::TxTime', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::ratesTxTimeTable [variable]
+    cls.add_instance_attribute('ratesTxTimeTable', 'ns3::TxTime', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::sgi [variable]
+    cls.add_instance_attribute('sgi', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::streams [variable]
+    cls.add_instance_attribute('streams', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -3737,8 +3939,6 @@
     cls.add_constructor([])
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::Parameters(ns3::Parameters const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Parameters const &', 'arg0')])
-    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::aMpdu [variable]
-    cls.add_instance_attribute('aMpdu', 'ns3::mpduInfo', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::duration [variable]
     cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::preamble [variable]
@@ -3747,6 +3947,8 @@
     cls.add_instance_attribute('rxPowerDbm', 'double', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::txVector [variable]
     cls.add_instance_attribute('txVector', 'ns3::WifiTxVector', is_const=False)
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3PcapFile_methods(root_module, cls):
@@ -3807,10 +4009,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', 
@@ -3914,18 +4120,30 @@
     cls.add_constructor([param('ns3::RateInfo const &', 'arg0')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::adjustedRetryCount [variable]
     cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::attemptHist [variable]
+    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::ewmaProb [variable]
     cls.add_instance_attribute('ewmaProb', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateAttempt [variable]
     cls.add_instance_attribute('numRateAttempt', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateSuccess [variable]
     cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numSamplesSkipped [variable]
+    cls.add_instance_attribute('numSamplesSkipped', 'uint8_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::perfectTxTime [variable]
     cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateAttempt [variable]
+    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateSuccess [variable]
+    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prob [variable]
     cls.add_instance_attribute('prob', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::retryCount [variable]
     cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::sampleLimit [variable]
+    cls.add_instance_attribute('sampleLimit', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::successHist [variable]
+    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::throughput [variable]
     cls.add_instance_attribute('throughput', 'uint32_t', is_const=False)
     return
@@ -4194,6 +4412,40 @@
                    [param('double const &', 'v')])
     return
 
+def register_Ns3TracedValue__Unsigned_long_long_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long long>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long long>::TracedValue(ns3::TracedValue<unsigned long long> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned long long > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long long>::TracedValue(long long unsigned int const & v) [constructor]
+    cls.add_constructor([param('long long unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned long long>::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 long long>::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 long long>::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 long long>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): long long unsigned int ns3::TracedValue<unsigned long long>::Get() const [member function]
+    cls.add_method('Get', 
+                   'long long unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned long long>::Set(long long unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('long long unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -4442,7 +4694,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', 
@@ -4475,15 +4727,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):
@@ -4495,21 +4752,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', 
@@ -4520,11 +4782,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', 
@@ -4535,6 +4807,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', 
@@ -4748,6 +5030,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]
@@ -4757,13 +5041,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):
@@ -5017,10 +5305,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):
@@ -5344,6 +5632,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', 
@@ -5394,6 +5687,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', 
@@ -5426,11 +5723,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', 
@@ -5469,10 +5781,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', 
@@ -5634,11 +5958,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', 
@@ -5687,10 +6026,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', 
@@ -5705,6 +6056,53 @@
                    [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
+def register_Ns3MinstrelWifiRemoteStation_methods(root_module, cls):
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_nextStatsUpdate [variable]
+    cls.add_instance_attribute('m_nextStatsUpdate', 'ns3::Time', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_col [variable]
+    cls.add_instance_attribute('m_col', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_index [variable]
+    cls.add_instance_attribute('m_index', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxTpRate [variable]
+    cls.add_instance_attribute('m_maxTpRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxTpRate2 [variable]
+    cls.add_instance_attribute('m_maxTpRate2', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxProbRate [variable]
+    cls.add_instance_attribute('m_maxProbRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_nModes [variable]
+    cls.add_instance_attribute('m_nModes', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_totalPacketsCount [variable]
+    cls.add_instance_attribute('m_totalPacketsCount', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_samplePacketsCount [variable]
+    cls.add_instance_attribute('m_samplePacketsCount', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_numSamplesDeferred [variable]
+    cls.add_instance_attribute('m_numSamplesDeferred', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_isSampling [variable]
+    cls.add_instance_attribute('m_isSampling', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleRate [variable]
+    cls.add_instance_attribute('m_sampleRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleDeferred [variable]
+    cls.add_instance_attribute('m_sampleDeferred', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_shortRetry [variable]
+    cls.add_instance_attribute('m_shortRetry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_longRetry [variable]
+    cls.add_instance_attribute('m_longRetry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_retry [variable]
+    cls.add_instance_attribute('m_retry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_txrate [variable]
+    cls.add_instance_attribute('m_txrate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_initialized [variable]
+    cls.add_instance_attribute('m_initialized', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_minstrelTable [variable]
+    cls.add_instance_attribute('m_minstrelTable', 'ns3::MinstrelRate', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleTable [variable]
+    cls.add_instance_attribute('m_sampleTable', 'ns3::SampleRate', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_statsFile [variable]
+    cls.add_instance_attribute('m_statsFile', 'std::ofstream', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::MinstrelWifiRemoteStation() [constructor]
+    cls.add_constructor([])
+    return
+
 def register_Ns3NqosWifiMacHelper_methods(root_module, cls):
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper(ns3::NqosWifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NqosWifiMacHelper const &', 'arg0')])
@@ -5715,10 +6113,10 @@
                    'ns3::NqosWifiMacHelper', 
                    [], 
                    is_static=True)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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()) [member function]
+    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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', '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)
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::NqosWifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
@@ -5839,6 +6237,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', 
@@ -6010,10 +6412,10 @@
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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()) [member function]
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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', '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)
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::QosWifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
@@ -6251,6 +6653,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([])
@@ -6287,6 +6701,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([])
@@ -7088,6 +7514,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', 
@@ -7207,6 +7638,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', 
@@ -7818,6 +8254,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', 
@@ -7827,15 +8268,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', 
@@ -8286,10 +8731,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', 
@@ -8330,6 +8779,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', 
@@ -8340,6 +8794,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', 
@@ -8450,6 +8919,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', 
@@ -8492,10 +8966,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', 
@@ -8537,16 +9016,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<ns3::Packet const>, 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', 
@@ -8623,18 +9107,18 @@
     cls.add_method('RegisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')])
-    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::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')])
     ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::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')])
-    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet const> packet, double snr) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet> packet, double snr, bool isEndOfFrame) [member function]
     cls.add_method('SwitchFromRxEndError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'snr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('bool', 'isEndOfFrame')])
     ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndOk(ns3::Ptr<ns3::Packet> packet, double snr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('SwitchFromRxEndOk', 
                    'void', 
@@ -8676,6 +9160,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', 
@@ -8696,6 +9184,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', 
@@ -8704,6 +9196,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', 
@@ -8734,10 +9230,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', 
@@ -8795,6 +9291,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', 
@@ -8804,6 +9310,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', 
@@ -8813,11 +9324,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', 
@@ -8859,18 +9395,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', 
@@ -8887,6 +9423,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', 
@@ -8943,10 +9483,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', 
@@ -8985,6 +9541,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', 
@@ -9005,6 +9566,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', 
@@ -9015,14 +9581,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]
@@ -9050,6 +9616,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 *', 
@@ -9145,10 +9716,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', 
@@ -9175,6 +9746,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', 
@@ -9244,15 +9820,20 @@
     cls.add_constructor([param('ns3::YansWifiPhy const &', 'arg0')])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy::YansWifiPhy() [constructor]
     cls.add_constructor([])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): int64_t ns3::YansWifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::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_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
@@ -9398,6 +9979,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -9408,6 +9994,21 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::YansWifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxGain() const [member function]
     cls.add_method('GetTxGain', 
                    'double', 
@@ -9483,10 +10084,15 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -9556,10 +10162,10 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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', 
@@ -9574,6 +10180,11 @@
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
                    [param('double', 'noiseFigureDb')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9596,14 +10207,14 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time rxDuration) [member function]
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePreambleAndHeader', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'rxDuration')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'rxDuration')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
@@ -9707,10 +10318,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -9774,10 +10385,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -9919,10 +10530,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10055,10 +10666,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10122,10 +10733,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10434,10 +11045,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10566,10 +11177,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -11081,6 +11692,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', 
@@ -11170,6 +11783,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', 
@@ -11228,14 +11846,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', 
@@ -11268,10 +11886,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', 
@@ -11326,7 +11940,11 @@
     cls.add_method('SetMsduAggregator', 
                    'void', 
                    [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    ## 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', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
@@ -11355,14 +11973,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', 
@@ -11770,15 +12388,124 @@
                    is_virtual=True)
     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_Ns3ErrorRateModel_methods(root_module, cls):
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel::ErrorRateModel() [constructor]
     cls.add_constructor([])
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel::ErrorRateModel(ns3::ErrorRateModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ErrorRateModel const &', 'arg0')])
-    ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::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_const=True)
     ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::GetChunkSuccessRate(ns3::WifiMode mode, ns3::WifiTxVector txVector, double snr, uint32_t nbits) const [member function]
     cls.add_method('GetChunkSuccessRate', 
@@ -12072,6 +12799,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', 
@@ -12126,10 +12858,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', 
@@ -12216,6 +12959,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):
@@ -12258,6 +13009,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_Ns3HtWifiMacHelper_methods(root_module, cls):
     ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper(ns3::HtWifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::HtWifiMacHelper const &', 'arg0')])
@@ -12295,16 +13339,26 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
+    ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::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)
     ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -12894,10 +13948,6 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLow::GetMpduAggregator() [member function]
-    cls.add_method('GetMpduAggregator', 
-                   'ns3::Ptr< ns3::MpduAggregator >', 
-                   [])
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -12941,10 +13991,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet const> packet, double rxSnr) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
@@ -12989,10 +14039,6 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
-    cls.add_method('SetMpduAggregator', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -13087,6 +14133,107 @@
                    is_static=True)
     return
 
+def register_Ns3MinstrelHtWifiManager_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager::MinstrelHtWifiManager(ns3::MinstrelHtWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinstrelHtWifiManager const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager::MinstrelHtWifiManager() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): int64_t ns3::MinstrelHtWifiManager::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::MinstrelHtWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::MinstrelHtWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoDisposeStation(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoDisposeStation', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelHtWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelHtWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): bool ns3::MinstrelHtWifiManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'st'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::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)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): bool ns3::MinstrelHtWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3MinstrelWifiManager_methods(root_module, cls):
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiManager::MinstrelWifiManager(ns3::MinstrelWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MinstrelWifiManager const &', 'arg0')])
@@ -13096,25 +14243,70 @@
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::CheckInit(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('CheckInit', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): uint32_t ns3::MinstrelWifiManager::CountRetries(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('CountRetries', 
+                   'uint32_t', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): uint32_t ns3::MinstrelWifiManager::FindRate(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('FindRate', 
+                   'uint32_t', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::GetDataTxVector(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::GetRtsTxVector(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
     ## minstrel-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::MinstrelWifiManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::InitSampleTable(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('InitSampleTable', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdatePacketCounters(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdatePacketCounters', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateRate(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateRate', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateRetry(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateRetry', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateStats(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateStats', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::MinstrelWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -13268,11 +14460,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MpduStandardAggregator_methods(root_module, cls):
@@ -13305,11 +14507,21 @@
                    'bool', 
                    [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
                    is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MpduStandardAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mpdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduStandardAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): void ns3::MpduStandardAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_virtual=True)
     return
 
 def register_Ns3MsduAggregator_methods(root_module, cls):
@@ -13327,11 +14539,48 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): uint32_t ns3::MsduAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## msdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): void ns3::MsduAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3MsduStandardAggregator_methods(root_module, cls):
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator::MsduStandardAggregator(ns3::MsduStandardAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MsduStandardAggregator const &', 'arg0')])
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator::MsduStandardAggregator() [constructor]
+    cls.add_constructor([])
+    ## msdu-standard-aggregator.h (module 'wifi'): bool ns3::MsduStandardAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket, ns3::Mac48Address src, ns3::Mac48Address dest) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dest')], 
+                   is_virtual=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MsduStandardAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduStandardAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): void ns3::MsduStandardAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_virtual=True)
     return
 
 def register_Ns3NakagamiPropagationLossModel_methods(root_module, cls):
@@ -13486,6 +14735,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_Ns3NistErrorRateModel_methods(root_module, cls):
     ## nist-error-rate-model.h (module 'wifi'): ns3::NistErrorRateModel::NistErrorRateModel(ns3::NistErrorRateModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NistErrorRateModel const &', 'arg0')])
@@ -13582,6 +14917,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', 
@@ -13755,10 +15095,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -14068,10 +15408,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -14120,6 +15460,27 @@
                    is_const=True, 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_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -14207,6 +15568,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', 
@@ -14282,6 +15653,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', 
@@ -14357,6 +15738,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', 
@@ -14422,6 +15808,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_Ns3RraaWifiManager_methods(root_module, cls):
@@ -14439,10 +15835,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -15533,10 +16929,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time duration) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time duration) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'duration')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
@@ -15669,6 +17065,16 @@
     cls.add_method('StartBeaconing', 
                    'void', 
                    [])
+    ## ap-wifi-mac.h (module 'wifi'): bool ns3::ApWifiMac::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ap-wifi-mac.h (module 'wifi'): bool ns3::ApWifiMac::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ap-wifi-mac.h (module 'wifi'): int64_t ns3::ApWifiMac::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -15899,10 +17305,18 @@
 
 def register_functions(root_module):
     module = root_module
+    ## erp-information.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeErpInformationChecker() [free function]
+    module.add_function('MakeErpInformationChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ht-capabilities.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtCapabilitiesChecker() [free function]
     module.add_function('MakeHtCapabilitiesChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## ht-operations.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtOperationsChecker() [free function]
+    module.add_function('MakeHtOperationsChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ssid.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeSsidChecker() [free function]
     module.add_function('MakeSsidChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.24.1/src/wifi/bindings/modulegen__gcc_LP64.py ns-3.25/src/wifi/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/wifi/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -22,14 +22,16 @@
     
     ## propagation-environment.h (module 'propagation'): ns3::EnvironmentType [enumeration]
     module.add_enum('EnvironmentType', ['UrbanEnvironment', 'SubUrbanEnvironment', 'OpenAreasEnvironment'], import_from_module='ns.propagation')
+    ## ht-operations.h (module 'wifi'): ns3::HtProtectionType [enumeration]
+    module.add_enum('HtProtectionType', ['NO_PROTECTION', 'NON_MEMBER_PROTECTION', 'TWENTY_MHZ_PROTECTION', 'MIXED_MODE_PROTECTION'])
     ## 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'])
     ## 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'])
-    ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
-    module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
+    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'])
     ## 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'])
+    ## wifi-phy.h (module 'wifi'): ns3::mpduType [enumeration]
+    module.add_enum('mpduType', ['NORMAL_MPDU', 'MPDU_IN_AGGREGATE', 'LAST_MPDU_IN_AGGREGATE'])
     ## 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'])
     ## wifi-phy-standard.h (module 'wifi'): ns3::WifiPhyStandard [enumeration]
@@ -42,6 +44,8 @@
     module.add_enum('TypeOfStation', ['STA', 'AP', 'ADHOC_STA', 'MESH', 'HT_STA', 'HT_AP', 'HT_ADHOC_STA', 'OCB'])
     ## ctrl-headers.h (module 'wifi'): ns3::BlockAckType [enumeration]
     module.add_enum('BlockAckType', ['BASIC_BLOCK_ACK', 'COMPRESSED_BLOCK_ACK', 'MULTI_TID_BLOCK_ACK'])
+    ## propagation-environment.h (module 'propagation'): ns3::CitySize [enumeration]
+    module.add_enum('CitySize', ['SmallCity', 'MediumCity', 'LargeCity'], import_from_module='ns.propagation')
     ## 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]
@@ -96,8 +100,12 @@
     module.add_class('EnergySourceHelper', allow_subclassing=True, import_from_module='ns.energy')
     ## event-id.h (module 'core'): ns3::EventId [class]
     module.add_class('EventId', import_from_module='ns.core')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo [struct]
+    module.add_class('GroupInfo')
     ## hash.h (module 'core'): ns3::Hasher [class]
     module.add_class('Hasher', import_from_module='ns.core')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo [struct]
+    module.add_class('HtRateInfo')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper [class]
     module.add_class('InterferenceHelper')
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::SnrPer [struct]
@@ -130,6 +138,8 @@
     module.add_class('MacRxMiddle')
     ## mac-tx-middle.h (module 'wifi'): ns3::MacTxMiddle [class]
     module.add_class('MacTxMiddle')
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup [struct]
+    module.add_class('McsGroup')
     ## 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]
@@ -169,7 +179,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')
     ## propagation-cache.h (module 'propagation'): ns3::PropagationCache<ns3::JakesProcess> [class]
@@ -190,6 +200,8 @@
     module.add_class('TimeWithUnit', import_from_module='ns.core')
     ## traced-value.h (module 'core'): ns3::TracedValue<double> [class]
     module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['double'])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long> [class]
+    module.add_class('TracedValue', import_from_module='ns.core', template_parameters=['unsigned long'])
     ## 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]
@@ -204,7 +216,7 @@
     module.add_class('Vector3D', import_from_module='ns.core')
     ## wifi-helper.h (module 'wifi'): ns3::WifiHelper [class]
     module.add_class('WifiHelper', allow_subclassing=True)
-    ## wifi-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
+    ## wifi-mac-helper.h (module 'wifi'): ns3::WifiMacHelper [class]
     module.add_class('WifiMacHelper', allow_subclassing=True)
     ## wifi-mode.h (module 'wifi'): ns3::WifiMode [class]
     module.add_class('WifiMode')
@@ -264,6 +276,8 @@
     module.add_class('MgtProbeRequestHeader', parent=root_module['ns3::Header'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtProbeResponseHeader [class]
     module.add_class('MgtProbeResponseHeader', parent=root_module['ns3::Header'])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation [struct]
+    module.add_class('MinstrelWifiRemoteStation', parent=root_module['ns3::WifiRemoteStation'])
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper [class]
     module.add_class('NqosWifiMacHelper', parent=root_module['ns3::WifiMacHelper'])
     ## object.h (module 'core'): ns3::Object [class]
@@ -304,12 +318,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::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::InterferenceHelper::Event', 'ns3::empty', 'ns3::DefaultDeleter<ns3::InterferenceHelper::Event>'], parent=root_module['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]
@@ -376,6 +394,8 @@
     module.add_class('WifiPhyStateHelper', parent=root_module['ns3::Object'])
     ## wifi-remote-station-manager.h (module 'wifi'): ns3::WifiRemoteStationManager [class]
     module.add_class('WifiRemoteStationManager', 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'])
     ## wifi-tx-current-model.h (module 'wifi'): ns3::WifiTxCurrentModel [class]
     module.add_class('WifiTxCurrentModel', parent=root_module['ns3::Object'])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy [class]
@@ -460,6 +480,12 @@
     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'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformation [class]
+    module.add_class('ErpInformation', parent=root_module['ns3::WifiInformationElement'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationChecker [class]
+    module.add_class('ErpInformationChecker', parent=root_module['ns3::AttributeChecker'])
+    ## erp-information.h (module 'wifi'): ns3::ErpInformationValue [class]
+    module.add_class('ErpInformationValue', parent=root_module['ns3::AttributeValue'])
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel [class]
     module.add_class('ErrorRateModel', parent=root_module['ns3::Object'])
     ## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -480,6 +506,12 @@
     module.add_class('HtCapabilitiesChecker', parent=root_module['ns3::AttributeChecker'])
     ## ht-capabilities.h (module 'wifi'): ns3::HtCapabilitiesValue [class]
     module.add_class('HtCapabilitiesValue', parent=root_module['ns3::AttributeValue'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperations [class]
+    module.add_class('HtOperations', parent=root_module['ns3::WifiInformationElement'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsChecker [class]
+    module.add_class('HtOperationsChecker', parent=root_module['ns3::AttributeChecker'])
+    ## ht-operations.h (module 'wifi'): ns3::HtOperationsValue [class]
+    module.add_class('HtOperationsValue', parent=root_module['ns3::AttributeValue'])
     ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper [class]
     module.add_class('HtWifiMacHelper', parent=root_module['ns3::QosWifiMacHelper'])
     ## ideal-wifi-manager.h (module 'wifi'): ns3::IdealWifiManager [class]
@@ -528,6 +560,8 @@
     module.add_class('MatrixPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## mgt-headers.h (module 'wifi'): ns3::MgtBeaconHeader [class]
     module.add_class('MgtBeaconHeader', parent=root_module['ns3::MgtProbeResponseHeader'])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager [class]
+    module.add_class('MinstrelHtWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiManager [class]
     module.add_class('MinstrelWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
     ## mobility-model.h (module 'mobility'): ns3::MobilityModel [class]
@@ -538,12 +572,18 @@
     module.add_class('MpduStandardAggregator', parent=root_module['ns3::MpduAggregator'])
     ## msdu-aggregator.h (module 'wifi'): ns3::MsduAggregator [class]
     module.add_class('MsduAggregator', parent=root_module['ns3::Object'])
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator [class]
+    module.add_class('MsduStandardAggregator', parent=root_module['ns3::MsduAggregator'])
     ## propagation-loss-model.h (module 'propagation'): ns3::NakagamiPropagationLossModel [class]
     module.add_class('NakagamiPropagationLossModel', import_from_module='ns.propagation', parent=root_module['ns3::PropagationLossModel'])
     ## 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'])
     ## nist-error-rate-model.h (module 'wifi'): ns3::NistErrorRateModel [class]
     module.add_class('NistErrorRateModel', parent=root_module['ns3::ErrorRateModel'])
     ## nix-vector.h (module 'network'): ns3::NixVector [class]
@@ -568,6 +608,8 @@
     module.add_class('ParetoRandomVariable', import_from_module='ns.core', parent=root_module['ns3::RandomVariableStream'])
     ## parf-wifi-manager.h (module 'wifi'): ns3::ParfWifiManager [class]
     module.add_class('ParfWifiManager', parent=root_module['ns3::WifiRemoteStationManager'])
+    ## 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', parent=root_module['ns3::WifiMac'])
     ## rraa-wifi-manager.h (module 'wifi'): ns3::RraaWifiManager [class]
@@ -632,9 +674,18 @@
     module.add_class('ApWifiMac', parent=root_module['ns3::RegularWifiMac'])
     ## dca-txop.h (module 'wifi'): ns3::DcaTxop [class]
     module.add_class('DcaTxop', parent=root_module['ns3::Dcf'])
+    module.add_container('ns3::HtMinstrelRate', 'ns3::HtRateInfo', container_type=u'vector')
+    module.add_container('ns3::TxTime', 'std::pair< ns3::Time, ns3::WifiMode >', container_type=u'vector')
     module.add_container('ns3::WifiModeList', 'ns3::WifiMode', container_type=u'vector')
+    module.add_container('ns3::MinstrelRate', 'ns3::RateInfo', container_type=u'vector')
+    module.add_container('ns3::SampleRate', 'std::vector< unsigned int >', 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::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader >', container_type=u'list')
     module.add_container('std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 'std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader >', container_type=u'list')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >', u'ns3::MinstrelMcsGroups')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >*', u'ns3::MinstrelMcsGroups*')
+    typehandlers.add_type_alias(u'std::vector< ns3::McsGroup, std::allocator< ns3::McsGroup > >&', u'ns3::MinstrelMcsGroups&')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >', u'ns3::MinstrelRate')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >*', u'ns3::MinstrelRate*')
     typehandlers.add_type_alias(u'std::vector< ns3::RateInfo, std::allocator< ns3::RateInfo > >&', u'ns3::MinstrelRate&')
@@ -645,6 +696,9 @@
     typehandlers.add_type_alias(u'ns3::Vector3D*', u'ns3::Vector*')
     typehandlers.add_type_alias(u'ns3::Vector3D&', u'ns3::Vector&')
     module.add_typedef(root_module['ns3::Vector3D'], 'Vector')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >', u'ns3::TxTime')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >*', u'ns3::TxTime*')
+    typehandlers.add_type_alias(u'std::vector< std::pair< ns3::Time, ns3::WifiMode >, std::allocator< std::pair< ns3::Time, ns3::WifiMode > > >&', u'ns3::TxTime&')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >', u'ns3::WifiModeList')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >*', u'ns3::WifiModeList*')
     typehandlers.add_type_alias(u'std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > >&', u'ns3::WifiModeList&')
@@ -652,9 +706,15 @@
     typehandlers.add_type_alias(u'ns3::Vector3DValue*', u'ns3::VectorValue*')
     typehandlers.add_type_alias(u'ns3::Vector3DValue&', u'ns3::VectorValue&')
     module.add_typedef(root_module['ns3::Vector3DValue'], 'VectorValue')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >', u'ns3::HtMinstrelRate')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >*', u'ns3::HtMinstrelRate*')
+    typehandlers.add_type_alias(u'std::vector< ns3::HtRateInfo, std::allocator< ns3::HtRateInfo > >&', u'ns3::HtMinstrelRate&')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >', u'ns3::SampleRate')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >*', u'ns3::SampleRate*')
     typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >&', u'ns3::SampleRate&')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >', u'ns3::McsGroupData')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >*', u'ns3::McsGroupData*')
+    typehandlers.add_type_alias(u'std::vector< ns3::GroupInfo, std::allocator< ns3::GroupInfo > >&', u'ns3::McsGroupData&')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker', u'ns3::VectorChecker')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker*', u'ns3::VectorChecker*')
     typehandlers.add_type_alias(u'ns3::Vector3DChecker&', u'ns3::VectorChecker&')
@@ -662,6 +722,9 @@
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >', u'ns3::WifiModeListIterator')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >*', u'ns3::WifiModeListIterator*')
     typehandlers.add_type_alias(u'__gnu_cxx::__normal_iterator< ns3::WifiMode const *, std::vector< ns3::WifiMode, std::allocator< ns3::WifiMode > > >&', u'ns3::WifiModeListIterator&')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >', u'ns3::HtSampleRate')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >*', u'ns3::HtSampleRate*')
+    typehandlers.add_type_alias(u'std::vector< std::vector< unsigned int, std::allocator< unsigned int > >, std::allocator< std::vector< unsigned int, std::allocator< unsigned int > > > >&', u'ns3::HtSampleRate&')
     
     ## Register a nested module for the namespace FatalImpl
     
@@ -783,7 +846,9 @@
     register_Ns3DsssErrorRateModel_methods(root_module, root_module['ns3::DsssErrorRateModel'])
     register_Ns3EnergySourceHelper_methods(root_module, root_module['ns3::EnergySourceHelper'])
     register_Ns3EventId_methods(root_module, root_module['ns3::EventId'])
+    register_Ns3GroupInfo_methods(root_module, root_module['ns3::GroupInfo'])
     register_Ns3Hasher_methods(root_module, root_module['ns3::Hasher'])
+    register_Ns3HtRateInfo_methods(root_module, root_module['ns3::HtRateInfo'])
     register_Ns3InterferenceHelper_methods(root_module, root_module['ns3::InterferenceHelper'])
     register_Ns3InterferenceHelperSnrPer_methods(root_module, root_module['ns3::InterferenceHelper::SnrPer'])
     register_Ns3Ipv4Address_methods(root_module, root_module['ns3::Ipv4Address'])
@@ -797,6 +862,7 @@
     register_Ns3MacLowTransmissionParameters_methods(root_module, root_module['ns3::MacLowTransmissionParameters'])
     register_Ns3MacRxMiddle_methods(root_module, root_module['ns3::MacRxMiddle'])
     register_Ns3MacTxMiddle_methods(root_module, root_module['ns3::MacTxMiddle'])
+    register_Ns3McsGroup_methods(root_module, root_module['ns3::McsGroup'])
     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'])
@@ -823,6 +889,7 @@
     register_Ns3TagBuffer_methods(root_module, root_module['ns3::TagBuffer'])
     register_Ns3TimeWithUnit_methods(root_module, root_module['ns3::TimeWithUnit'])
     register_Ns3TracedValue__Double_methods(root_module, root_module['ns3::TracedValue< double >'])
+    register_Ns3TracedValue__Unsigned_long_methods(root_module, root_module['ns3::TracedValue< unsigned long >'])
     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'])
@@ -856,6 +923,7 @@
     register_Ns3MgtDelBaHeader_methods(root_module, root_module['ns3::MgtDelBaHeader'])
     register_Ns3MgtProbeRequestHeader_methods(root_module, root_module['ns3::MgtProbeRequestHeader'])
     register_Ns3MgtProbeResponseHeader_methods(root_module, root_module['ns3::MgtProbeResponseHeader'])
+    register_Ns3MinstrelWifiRemoteStation_methods(root_module, root_module['ns3::MinstrelWifiRemoteStation'])
     register_Ns3NqosWifiMacHelper_methods(root_module, root_module['ns3::NqosWifiMacHelper'])
     register_Ns3Object_methods(root_module, root_module['ns3::Object'])
     register_Ns3ObjectAggregateIterator_methods(root_module, root_module['ns3::Object::AggregateIterator'])
@@ -876,9 +944,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__Ns3InterferenceHelperEvent_Ns3Empty_Ns3DefaultDeleter__lt__ns3InterferenceHelperEvent__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::InterferenceHelper::Event, ns3::empty, ns3::DefaultDeleter<ns3::InterferenceHelper::Event> >'])
+    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_Ns3SnrTag_methods(root_module, root_module['ns3::SnrTag'])
@@ -943,6 +1013,9 @@
     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_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_Ns3ErrorRateModel_methods(root_module, root_module['ns3::ErrorRateModel'])
     register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
     register_Ns3ExponentialRandomVariable_methods(root_module, root_module['ns3::ExponentialRandomVariable'])
@@ -953,6 +1026,9 @@
     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_Ns3HtWifiMacHelper_methods(root_module, root_module['ns3::HtWifiMacHelper'])
     register_Ns3IdealWifiManager_methods(root_module, root_module['ns3::IdealWifiManager'])
     register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
@@ -977,13 +1053,17 @@
     register_Ns3MacLow_methods(root_module, root_module['ns3::MacLow'])
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     register_Ns3MgtBeaconHeader_methods(root_module, root_module['ns3::MgtBeaconHeader'])
+    register_Ns3MinstrelHtWifiManager_methods(root_module, root_module['ns3::MinstrelHtWifiManager'])
     register_Ns3MinstrelWifiManager_methods(root_module, root_module['ns3::MinstrelWifiManager'])
     register_Ns3MobilityModel_methods(root_module, root_module['ns3::MobilityModel'])
     register_Ns3MpduAggregator_methods(root_module, root_module['ns3::MpduAggregator'])
     register_Ns3MpduStandardAggregator_methods(root_module, root_module['ns3::MpduStandardAggregator'])
     register_Ns3MsduAggregator_methods(root_module, root_module['ns3::MsduAggregator'])
+    register_Ns3MsduStandardAggregator_methods(root_module, root_module['ns3::MsduStandardAggregator'])
     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_Ns3NistErrorRateModel_methods(root_module, root_module['ns3::NistErrorRateModel'])
     register_Ns3NixVector_methods(root_module, root_module['ns3::NixVector'])
     register_Ns3Node_methods(root_module, root_module['ns3::Node'])
@@ -996,6 +1076,7 @@
     register_Ns3Packet_methods(root_module, root_module['ns3::Packet'])
     register_Ns3ParetoRandomVariable_methods(root_module, root_module['ns3::ParetoRandomVariable'])
     register_Ns3ParfWifiManager_methods(root_module, root_module['ns3::ParfWifiManager'])
+    register_Ns3QueueItem_methods(root_module, root_module['ns3::QueueItem'])
     register_Ns3RegularWifiMac_methods(root_module, root_module['ns3::RegularWifiMac'])
     register_Ns3RraaWifiManager_methods(root_module, root_module['ns3::RraaWifiManager'])
     register_Ns3Ssid_methods(root_module, root_module['ns3::Ssid'])
@@ -1504,10 +1585,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', 
@@ -1967,6 +2048,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', 
@@ -1980,6 +2071,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_Ns3DcfManager_methods(root_module, cls):
@@ -2112,6 +2211,11 @@
                    'bool', 
                    [], 
                    is_const=True)
+    ## dcf-manager.h (module 'wifi'): bool ns3::DcfState::IsEdca() const [member function]
+    cls.add_method('IsEdca', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## dcf-manager.h (module 'wifi'): void ns3::DcfState::ResetCw() [member function]
     cls.add_method('ResetCw', 
                    'void', 
@@ -2358,6 +2462,27 @@
                    is_const=True)
     return
 
+def register_Ns3GroupInfo_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::GroupInfo() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::GroupInfo(ns3::GroupInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::GroupInfo const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_col [variable]
+    cls.add_instance_attribute('m_col', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_index [variable]
+    cls.add_instance_attribute('m_index', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxProbRate [variable]
+    cls.add_instance_attribute('m_maxProbRate', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxTpRate [variable]
+    cls.add_instance_attribute('m_maxTpRate', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_maxTpRate2 [variable]
+    cls.add_instance_attribute('m_maxTpRate2', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_ratesTable [variable]
+    cls.add_instance_attribute('m_ratesTable', 'ns3::HtMinstrelRate', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::GroupInfo::m_supported [variable]
+    cls.add_instance_attribute('m_supported', 'bool', is_const=False)
+    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')])
@@ -2387,6 +2512,47 @@
                    [])
     return
 
+def register_Ns3HtRateInfo_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::HtRateInfo() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::HtRateInfo(ns3::HtRateInfo const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::HtRateInfo const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::adjustedRetryCount [variable]
+    cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::attemptHist [variable]
+    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::ewmaProb [variable]
+    cls.add_instance_attribute('ewmaProb', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::ewmsdProb [variable]
+    cls.add_instance_attribute('ewmsdProb', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::mcsIndex [variable]
+    cls.add_instance_attribute('mcsIndex', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numRateAttempt [variable]
+    cls.add_instance_attribute('numRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numRateSuccess [variable]
+    cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::numSamplesSkipped [variable]
+    cls.add_instance_attribute('numSamplesSkipped', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::perfectTxTime [variable]
+    cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prevNumRateAttempt [variable]
+    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prevNumRateSuccess [variable]
+    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::prob [variable]
+    cls.add_instance_attribute('prob', 'double', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::retryCount [variable]
+    cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::retryUpdated [variable]
+    cls.add_instance_attribute('retryUpdated', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::successHist [variable]
+    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::supported [variable]
+    cls.add_instance_attribute('supported', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::HtRateInfo::throughput [variable]
+    cls.add_instance_attribute('throughput', 'double', is_const=False)
+    return
+
 def register_Ns3InterferenceHelper_methods(root_module, cls):
     ## interference-helper.h (module 'wifi'): ns3::InterferenceHelper::InterferenceHelper(ns3::InterferenceHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::InterferenceHelper const &', 'arg0')])
@@ -2509,6 +2675,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', 
@@ -2524,6 +2695,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', 
@@ -2700,7 +2876,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', 
@@ -2981,6 +3157,11 @@
                    'ns3::Mac48Address', 
                    [param('ns3::WifiMacHeader const &', 'hdr')], 
                    is_virtual=True)
+    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMpduAggregator() const [member function]
+    cls.add_method('GetMpduAggregator', 
+                   'ns3::Ptr< ns3::MpduAggregator >', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MsduAggregator> ns3::MacLowAggregationCapableTransmissionListener::GetMsduAggregator() const [member function]
     cls.add_method('GetMsduAggregator', 
                    'ns3::Ptr< ns3::MsduAggregator >', 
@@ -3026,10 +3207,10 @@
                    'void', 
                    [param('uint8_t', 'tid'), param('ns3::Mac48Address', 'recipient'), param('uint16_t', 'seqnumber')], 
                    is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(bool ampdu) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowAggregationCapableTransmissionListener::SetAmpdu(ns3::Mac48Address dest, bool enableAmpdu) [member function]
     cls.add_method('SetAmpdu', 
                    'void', 
-                   [param('bool', 'ampdu')], 
+                   [param('ns3::Mac48Address', 'dest'), param('bool', 'enableAmpdu')], 
                    is_virtual=True)
     return
 
@@ -3090,10 +3271,10 @@
                    'void', 
                    [param('double', 'snr'), param('ns3::WifiMode', 'txMode')], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, ns3::WifiMode txMode) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotBlockAck(ns3::CtrlBAckResponseHeader const * blockAck, ns3::Mac48Address source, double rxSnr, ns3::WifiMode txMode, double dataSnr) [member function]
     cls.add_method('GotBlockAck', 
                    'void', 
-                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('ns3::WifiMode', 'txMode')], 
+                   [param('ns3::CtrlBAckResponseHeader const *', 'blockAck'), param('ns3::Mac48Address', 'source'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode'), param('double', 'dataSnr')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::GotCts(double snr, ns3::WifiMode txMode) [member function]
     cls.add_method('GotCts', 
@@ -3105,10 +3286,10 @@
                    'void', 
                    [], 
                    is_pure_virtual=True, is_virtual=True)
-    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck() [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedBlockAck(uint32_t nMpdus) [member function]
     cls.add_method('MissedBlockAck', 
                    'void', 
-                   [], 
+                   [param('uint32_t', 'nMpdus')], 
                    is_virtual=True)
     ## mac-low.h (module 'wifi'): void ns3::MacLowTransmissionListener::MissedCts() [member function]
     cls.add_method('MissedCts', 
@@ -3277,6 +3458,27 @@
                    [param('ns3::WifiMacHeader const *', 'hdr')])
     return
 
+def register_Ns3McsGroup_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::McsGroup() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::McsGroup(ns3::McsGroup const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::McsGroup const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::chWidth [variable]
+    cls.add_instance_attribute('chWidth', 'uint32_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::isSupported [variable]
+    cls.add_instance_attribute('isSupported', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::isVht [variable]
+    cls.add_instance_attribute('isVht', 'bool', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::ratesFirstMpduTxTimeTable [variable]
+    cls.add_instance_attribute('ratesFirstMpduTxTimeTable', 'ns3::TxTime', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::ratesTxTimeTable [variable]
+    cls.add_instance_attribute('ratesTxTimeTable', 'ns3::TxTime', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::sgi [variable]
+    cls.add_instance_attribute('sgi', 'uint8_t', is_const=False)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::McsGroup::streams [variable]
+    cls.add_instance_attribute('streams', 'uint8_t', is_const=False)
+    return
+
 def register_Ns3NetDeviceContainer_methods(root_module, cls):
     ## net-device-container.h (module 'network'): ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NetDeviceContainer const &', 'arg0')])
@@ -3737,8 +3939,6 @@
     cls.add_constructor([])
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::Parameters(ns3::Parameters const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::Parameters const &', 'arg0')])
-    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::aMpdu [variable]
-    cls.add_instance_attribute('aMpdu', 'ns3::mpduInfo', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::duration [variable]
     cls.add_instance_attribute('duration', 'ns3::Time', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::preamble [variable]
@@ -3747,6 +3947,8 @@
     cls.add_instance_attribute('rxPowerDbm', 'double', is_const=False)
     ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::txVector [variable]
     cls.add_instance_attribute('txVector', 'ns3::WifiTxVector', is_const=False)
+    ## yans-wifi-channel.h (module 'wifi'): ns3::Parameters::type [variable]
+    cls.add_instance_attribute('type', 'ns3::mpduType', is_const=False)
     return
 
 def register_Ns3PcapFile_methods(root_module, cls):
@@ -3807,10 +4009,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', 
@@ -3914,18 +4120,30 @@
     cls.add_constructor([param('ns3::RateInfo const &', 'arg0')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::adjustedRetryCount [variable]
     cls.add_instance_attribute('adjustedRetryCount', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::attemptHist [variable]
+    cls.add_instance_attribute('attemptHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::ewmaProb [variable]
     cls.add_instance_attribute('ewmaProb', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateAttempt [variable]
     cls.add_instance_attribute('numRateAttempt', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numRateSuccess [variable]
     cls.add_instance_attribute('numRateSuccess', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::numSamplesSkipped [variable]
+    cls.add_instance_attribute('numSamplesSkipped', 'uint8_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::perfectTxTime [variable]
     cls.add_instance_attribute('perfectTxTime', 'ns3::Time', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateAttempt [variable]
+    cls.add_instance_attribute('prevNumRateAttempt', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prevNumRateSuccess [variable]
+    cls.add_instance_attribute('prevNumRateSuccess', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::prob [variable]
     cls.add_instance_attribute('prob', 'uint32_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::retryCount [variable]
     cls.add_instance_attribute('retryCount', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::sampleLimit [variable]
+    cls.add_instance_attribute('sampleLimit', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::successHist [variable]
+    cls.add_instance_attribute('successHist', 'uint64_t', is_const=False)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::RateInfo::throughput [variable]
     cls.add_instance_attribute('throughput', 'uint32_t', is_const=False)
     return
@@ -4194,6 +4412,40 @@
                    [param('double const &', 'v')])
     return
 
+def register_Ns3TracedValue__Unsigned_long_methods(root_module, cls):
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long>::TracedValue() [constructor]
+    cls.add_constructor([])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long>::TracedValue(ns3::TracedValue<unsigned long> const & o) [copy constructor]
+    cls.add_constructor([param('ns3::TracedValue< unsigned long > const &', 'o')])
+    ## traced-value.h (module 'core'): ns3::TracedValue<unsigned long>::TracedValue(long unsigned int const & v) [constructor]
+    cls.add_constructor([param('long unsigned int const &', 'v')])
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned long>::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 long>::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 long>::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 long>::DisconnectWithoutContext(ns3::CallbackBase const & cb) [member function]
+    cls.add_method('DisconnectWithoutContext', 
+                   'void', 
+                   [param('ns3::CallbackBase const &', 'cb')])
+    ## traced-value.h (module 'core'): long unsigned int ns3::TracedValue<unsigned long>::Get() const [member function]
+    cls.add_method('Get', 
+                   'long unsigned int', 
+                   [], 
+                   is_const=True)
+    ## traced-value.h (module 'core'): void ns3::TracedValue<unsigned long>::Set(long unsigned int const & v) [member function]
+    cls.add_method('Set', 
+                   'void', 
+                   [param('long unsigned int const &', 'v')])
+    return
+
 def register_Ns3TypeId_methods(root_module, cls):
     cls.add_binary_comparison_operator('!=')
     cls.add_binary_comparison_operator('<')
@@ -4442,7 +4694,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', 
@@ -4475,15 +4727,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):
@@ -4495,21 +4752,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', 
@@ -4520,11 +4782,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', 
@@ -4535,6 +4807,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', 
@@ -4748,6 +5030,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]
@@ -4757,13 +5041,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):
@@ -5017,10 +5305,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):
@@ -5344,6 +5632,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', 
@@ -5394,6 +5687,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', 
@@ -5426,11 +5723,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', 
@@ -5469,10 +5781,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', 
@@ -5634,11 +5958,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', 
@@ -5687,10 +6026,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', 
@@ -5705,6 +6056,53 @@
                    [param('ns3::VhtCapabilities', 'vhtcapabilities')])
     return
 
+def register_Ns3MinstrelWifiRemoteStation_methods(root_module, cls):
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_nextStatsUpdate [variable]
+    cls.add_instance_attribute('m_nextStatsUpdate', 'ns3::Time', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_col [variable]
+    cls.add_instance_attribute('m_col', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_index [variable]
+    cls.add_instance_attribute('m_index', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxTpRate [variable]
+    cls.add_instance_attribute('m_maxTpRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxTpRate2 [variable]
+    cls.add_instance_attribute('m_maxTpRate2', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_maxProbRate [variable]
+    cls.add_instance_attribute('m_maxProbRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_nModes [variable]
+    cls.add_instance_attribute('m_nModes', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_totalPacketsCount [variable]
+    cls.add_instance_attribute('m_totalPacketsCount', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_samplePacketsCount [variable]
+    cls.add_instance_attribute('m_samplePacketsCount', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_numSamplesDeferred [variable]
+    cls.add_instance_attribute('m_numSamplesDeferred', 'int', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_isSampling [variable]
+    cls.add_instance_attribute('m_isSampling', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleRate [variable]
+    cls.add_instance_attribute('m_sampleRate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleDeferred [variable]
+    cls.add_instance_attribute('m_sampleDeferred', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_shortRetry [variable]
+    cls.add_instance_attribute('m_shortRetry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_longRetry [variable]
+    cls.add_instance_attribute('m_longRetry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_retry [variable]
+    cls.add_instance_attribute('m_retry', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_txrate [variable]
+    cls.add_instance_attribute('m_txrate', 'uint32_t', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_initialized [variable]
+    cls.add_instance_attribute('m_initialized', 'bool', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_minstrelTable [variable]
+    cls.add_instance_attribute('m_minstrelTable', 'ns3::MinstrelRate', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_sampleTable [variable]
+    cls.add_instance_attribute('m_sampleTable', 'ns3::SampleRate', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::m_statsFile [variable]
+    cls.add_instance_attribute('m_statsFile', 'std::ofstream', is_const=False)
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiRemoteStation::MinstrelWifiRemoteStation() [constructor]
+    cls.add_constructor([])
+    return
+
 def register_Ns3NqosWifiMacHelper_methods(root_module, cls):
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::NqosWifiMacHelper::NqosWifiMacHelper(ns3::NqosWifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NqosWifiMacHelper const &', 'arg0')])
@@ -5715,10 +6113,10 @@
                    'ns3::NqosWifiMacHelper', 
                    [], 
                    is_static=True)
-    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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()) [member function]
+    ## nqos-wifi-mac-helper.h (module 'wifi'): void ns3::NqosWifiMacHelper::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', '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)
     ## nqos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::NqosWifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
@@ -5839,6 +6237,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', 
@@ -6010,10 +6412,10 @@
     cls.add_method('SetMsduAggregatorForAc', 
                    'void', 
                    [param('ns3::AcIndex', 'ac'), 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()')])
-    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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()) [member function]
+    ## qos-wifi-mac-helper.h (module 'wifi'): void ns3::QosWifiMacHelper::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', '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)
     ## qos-wifi-mac-helper.h (module 'wifi'): ns3::Ptr<ns3::WifiMac> ns3::QosWifiMacHelper::Create() const [member function]
     cls.add_method('Create', 
@@ -6251,6 +6653,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([])
@@ -6287,6 +6701,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([])
@@ -7088,6 +7514,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', 
@@ -7207,6 +7638,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', 
@@ -7818,6 +8254,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', 
@@ -7827,15 +8268,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', 
@@ -8286,10 +8731,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', 
@@ -8330,6 +8779,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', 
@@ -8340,6 +8794,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', 
@@ -8450,6 +8919,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', 
@@ -8492,10 +8966,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', 
@@ -8537,16 +9016,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<ns3::Packet const>, 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', 
@@ -8623,18 +9107,18 @@
     cls.add_method('RegisterListener', 
                    'void', 
                    [param('ns3::WifiPhyListener *', 'listener')])
-    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::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')])
     ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::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')])
-    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet const> packet, double snr) [member function]
+    ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndError(ns3::Ptr<ns3::Packet> packet, double snr, bool isEndOfFrame) [member function]
     cls.add_method('SwitchFromRxEndError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'snr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'snr'), param('bool', 'isEndOfFrame')])
     ## wifi-phy-state-helper.h (module 'wifi'): void ns3::WifiPhyStateHelper::SwitchFromRxEndOk(ns3::Ptr<ns3::Packet> packet, double snr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble) [member function]
     cls.add_method('SwitchFromRxEndOk', 
                    'void', 
@@ -8676,6 +9160,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', 
@@ -8696,6 +9184,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', 
@@ -8704,6 +9196,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', 
@@ -8734,10 +9230,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', 
@@ -8795,6 +9291,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', 
@@ -8804,6 +9310,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', 
@@ -8813,11 +9324,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', 
@@ -8859,18 +9395,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', 
@@ -8887,6 +9423,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', 
@@ -8943,10 +9483,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', 
@@ -8985,6 +9541,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', 
@@ -9005,6 +9566,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', 
@@ -9015,14 +9581,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]
@@ -9050,6 +9616,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 *', 
@@ -9145,10 +9716,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', 
@@ -9175,6 +9746,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', 
@@ -9244,15 +9820,20 @@
     cls.add_constructor([param('ns3::YansWifiPhy const &', 'arg0')])
     ## yans-wifi-phy.h (module 'wifi'): ns3::YansWifiPhy::YansWifiPhy() [constructor]
     cls.add_constructor([])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::AddSupportedChannelWidth(uint32_t width) [member function]
+    cls.add_method('AddSupportedChannelWidth', 
+                   'void', 
+                   [param('uint32_t', 'width')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): int64_t ns3::YansWifiPhy::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::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_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::ConfigureStandard(ns3::WifiPhyStandard standard) [member function]
     cls.add_method('ConfigureStandard', 
@@ -9398,6 +9979,11 @@
                    'double', 
                    [], 
                    is_const=True)
+    ## yans-wifi-phy.h (module 'wifi'): bool ns3::YansWifiPhy::GetShortPlcpPreambleSupported() const [member function]
+    cls.add_method('GetShortPlcpPreambleSupported', 
+                   'bool', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): ns3::Time ns3::YansWifiPhy::GetStateDuration() [member function]
     cls.add_method('GetStateDuration', 
                    'ns3::Time', 
@@ -9408,6 +9994,21 @@
                    'bool', 
                    [], 
                    is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): std::vector<unsigned int, std::allocator<unsigned int> > ns3::YansWifiPhy::GetSupportedChannelWidthSet() const [member function]
+    cls.add_method('GetSupportedChannelWidthSet', 
+                   'std::vector< unsigned int >', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedRxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedRxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): uint8_t ns3::YansWifiPhy::GetSupportedTxSpatialStreams() const [member function]
+    cls.add_method('GetSupportedTxSpatialStreams', 
+                   'uint8_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): double ns3::YansWifiPhy::GetTxGain() const [member function]
     cls.add_method('GetTxGain', 
                    'double', 
@@ -9483,10 +10084,15 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SendPacket(ns3::Ptr<ns3::Packet const> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetCcaMode1Threshold(double threshold) [member function]
     cls.add_method('SetCcaMode1Threshold', 
@@ -9556,10 +10162,10 @@
                    'void', 
                    [param('uint32_t', 'tx')], 
                    is_virtual=True)
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetReceiveErrorCallback(ns3::Callback<void, ns3::Ptr<ns3::Packet const>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> callback) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::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', 
@@ -9574,6 +10180,11 @@
     cls.add_method('SetRxNoiseFigure', 
                    'void', 
                    [param('double', 'noiseFigureDb')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetShortPlcpPreambleSupported(bool preamble) [member function]
+    cls.add_method('SetShortPlcpPreambleSupported', 
+                   'void', 
+                   [param('bool', 'preamble')], 
+                   is_virtual=True)
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::SetSleepMode() [member function]
     cls.add_method('SetSleepMode', 
                    'void', 
@@ -9596,14 +10207,14 @@
     cls.add_method('SetTxPowerStart', 
                    'void', 
                    [param('double', 'start')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePacket(ns3::Ptr<ns3::Packet> packet, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Ptr<ns3::InterferenceHelper::Event> event) [member function]
     cls.add_method('StartReceivePacket', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
-    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time rxDuration) [member function]
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Ptr< ns3::InterferenceHelper::Event >', 'event')])
+    ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::StartReceivePreambleAndHeader(ns3::Ptr<ns3::Packet> packet, double rxPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time rxDuration) [member function]
     cls.add_method('StartReceivePreambleAndHeader', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'rxDuration')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'rxDuration')])
     ## yans-wifi-phy.h (module 'wifi'): void ns3::YansWifiPhy::UnregisterListener(ns3::WifiPhyListener * listener) [member function]
     cls.add_method('UnregisterListener', 
                    'void', 
@@ -9707,10 +10318,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -9774,10 +10385,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aarfcd-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AarfcdWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -9919,10 +10530,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## amrr-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AmrrWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10055,10 +10666,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## aparf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::AparfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10122,10 +10733,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## arf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ArfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10434,10 +11045,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## cara-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::CaraWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -10566,10 +11177,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## constant-rate-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ConstantRateWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -11081,6 +11692,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', 
@@ -11170,6 +11783,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', 
@@ -11228,14 +11846,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', 
@@ -11268,10 +11886,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', 
@@ -11326,7 +11940,11 @@
     cls.add_method('SetMsduAggregator', 
                    'void', 
                    [param('ns3::Ptr< ns3::MsduAggregator >', 'aggr')])
-    ## edca-txop-n.h (module 'wifi'): void ns3::EdcaTxopN::PushFront(ns3::Ptr<ns3::Packet const> packet, ns3::WifiMacHeader const & hdr) [member function]
+    ## 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', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::WifiMacHeader const &', 'hdr')])
@@ -11355,14 +11973,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', 
@@ -11770,15 +12388,124 @@
                    is_virtual=True)
     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_Ns3ErrorRateModel_methods(root_module, cls):
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel::ErrorRateModel() [constructor]
     cls.add_constructor([])
     ## error-rate-model.h (module 'wifi'): ns3::ErrorRateModel::ErrorRateModel(ns3::ErrorRateModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ErrorRateModel const &', 'arg0')])
-    ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::CalculateSnr(ns3::WifiMode txMode, double ber) const [member function]
+    ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::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_const=True)
     ## error-rate-model.h (module 'wifi'): double ns3::ErrorRateModel::GetChunkSuccessRate(ns3::WifiMode mode, ns3::WifiTxVector txVector, double snr, uint32_t nbits) const [member function]
     cls.add_method('GetChunkSuccessRate', 
@@ -12072,6 +12799,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', 
@@ -12126,10 +12858,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', 
@@ -12216,6 +12959,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):
@@ -12258,6 +13009,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_Ns3HtWifiMacHelper_methods(root_module, cls):
     ## ht-wifi-mac-helper.h (module 'wifi'): ns3::HtWifiMacHelper::HtWifiMacHelper(ns3::HtWifiMacHelper const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::HtWifiMacHelper const &', 'arg0')])
@@ -12295,16 +13339,26 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## ideal-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::IdealWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
                    'ns3::WifiTxVector', 
                    [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
+    ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::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)
     ## ideal-wifi-manager.h (module 'wifi'): void ns3::IdealWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoReportDataFailed', 
                    'void', 
@@ -12894,10 +13948,6 @@
                    'bool', 
                    [], 
                    is_const=True)
-    ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::MpduAggregator> ns3::MacLow::GetMpduAggregator() [member function]
-    cls.add_method('GetMpduAggregator', 
-                   'ns3::Ptr< ns3::MpduAggregator >', 
-                   [])
     ## mac-low.h (module 'wifi'): ns3::Ptr<ns3::WifiPhy> ns3::MacLow::GetPhy() const [member function]
     cls.add_method('GetPhy', 
                    'ns3::Ptr< ns3::WifiPhy >', 
@@ -12941,10 +13991,10 @@
     cls.add_method('NotifySwitchingStartNow', 
                    'void', 
                    [param('ns3::Time', 'duration')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet const> packet, double rxSnr) [member function]
+    ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveError(ns3::Ptr<ns3::Packet> packet, double rxSnr, bool isEndOfFrame) [member function]
     cls.add_method('ReceiveError', 
                    'void', 
-                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'rxSnr')])
+                   [param('ns3::Ptr< ns3::Packet >', 'packet'), param('double', 'rxSnr'), param('bool', 'isEndOfFrame')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::ReceiveOk(ns3::Ptr<ns3::Packet> packet, double rxSnr, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, bool ampduSubframe) [member function]
     cls.add_method('ReceiveOk', 
                    'void', 
@@ -12989,10 +14039,6 @@
     cls.add_method('SetCtsToSelfSupported', 
                    'void', 
                    [param('bool', 'enable')])
-    ## mac-low.h (module 'wifi'): void ns3::MacLow::SetMpduAggregator(ns3::Ptr<ns3::MpduAggregator> aggregator) [member function]
-    cls.add_method('SetMpduAggregator', 
-                   'void', 
-                   [param('ns3::Ptr< ns3::MpduAggregator >', 'aggregator')])
     ## mac-low.h (module 'wifi'): void ns3::MacLow::SetPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetPhy', 
                    'void', 
@@ -13087,6 +14133,107 @@
                    is_static=True)
     return
 
+def register_Ns3MinstrelHtWifiManager_methods(root_module, cls):
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager::MinstrelHtWifiManager(ns3::MinstrelHtWifiManager const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MinstrelHtWifiManager const &', 'arg0')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::MinstrelHtWifiManager::MinstrelHtWifiManager() [constructor]
+    cls.add_constructor([])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): int64_t ns3::MinstrelHtWifiManager::AssignStreams(int64_t stream) [member function]
+    cls.add_method('AssignStreams', 
+                   'int64_t', 
+                   [param('int64_t', 'stream')])
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::MinstrelHtWifiManager::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
+    cls.add_method('SetupPhy', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
+                   is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::MinstrelHtWifiManager::DoCreateStation() const [member function]
+    cls.add_method('DoCreateStation', 
+                   'ns3::WifiRemoteStation *', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoDisposeStation(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoDisposeStation', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelHtWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelHtWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoGetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoInitialize() [member function]
+    cls.add_method('DoInitialize', 
+                   'void', 
+                   [], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): bool ns3::MinstrelHtWifiManager::DoNeedDataRetransmission(ns3::WifiRemoteStation * st, ns3::Ptr<ns3::Packet const> packet, bool normally) [member function]
+    cls.add_method('DoNeedDataRetransmission', 
+                   'bool', 
+                   [param('ns3::WifiRemoteStation *', 'st'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('bool', 'normally')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::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)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportDataOk(ns3::WifiRemoteStation * station, double ackSnr, ns3::WifiMode ackMode, double dataSnr) [member function]
+    cls.add_method('DoReportDataOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ackSnr'), param('ns3::WifiMode', 'ackMode'), param('double', 'dataSnr')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportFinalDataFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalDataFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportFinalRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportFinalRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRtsFailed(ns3::WifiRemoteStation * station) [member function]
+    cls.add_method('DoReportRtsFailed', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRtsOk(ns3::WifiRemoteStation * station, double ctsSnr, ns3::WifiMode ctsMode, double rtsSnr) [member function]
+    cls.add_method('DoReportRtsOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'ctsSnr'), param('ns3::WifiMode', 'ctsMode'), param('double', 'rtsSnr')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): void ns3::MinstrelHtWifiManager::DoReportRxOk(ns3::WifiRemoteStation * station, double rxSnr, ns3::WifiMode txMode) [member function]
+    cls.add_method('DoReportRxOk', 
+                   'void', 
+                   [param('ns3::WifiRemoteStation *', 'station'), param('double', 'rxSnr'), param('ns3::WifiMode', 'txMode')], 
+                   visibility='private', is_virtual=True)
+    ## minstrel-ht-wifi-manager.h (module 'wifi'): bool ns3::MinstrelHtWifiManager::IsLowLatency() const [member function]
+    cls.add_method('IsLowLatency', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
+    return
+
 def register_Ns3MinstrelWifiManager_methods(root_module, cls):
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::MinstrelWifiManager::MinstrelWifiManager(ns3::MinstrelWifiManager const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::MinstrelWifiManager const &', 'arg0')])
@@ -13096,25 +14243,70 @@
     cls.add_method('AssignStreams', 
                    'int64_t', 
                    [param('int64_t', 'stream')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::CheckInit(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('CheckInit', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): uint32_t ns3::MinstrelWifiManager::CountRetries(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('CountRetries', 
+                   'uint32_t', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): uint32_t ns3::MinstrelWifiManager::FindRate(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('FindRate', 
+                   'uint32_t', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::GetDataTxVector(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('GetDataTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::GetRtsTxVector(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('GetRtsTxVector', 
+                   'ns3::WifiTxVector', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
     ## minstrel-wifi-manager.h (module 'wifi'): static ns3::TypeId ns3::MinstrelWifiManager::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::InitSampleTable(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('InitSampleTable', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupMac(ns3::Ptr<ns3::WifiMac> mac) [member function]
+    cls.add_method('SetupMac', 
+                   'void', 
+                   [param('ns3::Ptr< ns3::WifiMac >', 'mac')], 
+                   is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::SetupPhy(ns3::Ptr<ns3::WifiPhy> phy) [member function]
     cls.add_method('SetupPhy', 
                    'void', 
                    [param('ns3::Ptr< ns3::WifiPhy >', 'phy')], 
                    is_virtual=True)
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdatePacketCounters(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdatePacketCounters', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateRate(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateRate', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateRetry(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateRetry', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
+    ## minstrel-wifi-manager.h (module 'wifi'): void ns3::MinstrelWifiManager::UpdateStats(ns3::MinstrelWifiRemoteStation * station) [member function]
+    cls.add_method('UpdateStats', 
+                   'void', 
+                   [param('ns3::MinstrelWifiRemoteStation *', 'station')])
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiRemoteStation * ns3::MinstrelWifiManager::DoCreateStation() const [member function]
     cls.add_method('DoCreateStation', 
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## minstrel-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::MinstrelWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -13268,11 +14460,21 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmpduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): uint32_t ns3::MpduAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## mpdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-aggregator.h (module 'wifi'): void ns3::MpduAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
     return
 
 def register_Ns3MpduStandardAggregator_methods(root_module, cls):
@@ -13305,11 +14507,21 @@
                    'bool', 
                    [param('uint32_t', 'packetSize'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('uint8_t', 'blockAckSize')], 
                    is_virtual=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MpduStandardAggregator::GetMaxAmpduSize() const [member function]
+    cls.add_method('GetMaxAmpduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
     ## mpdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MpduStandardAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## mpdu-standard-aggregator.h (module 'wifi'): void ns3::MpduStandardAggregator::SetMaxAmpduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmpduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_virtual=True)
     return
 
 def register_Ns3MsduAggregator_methods(root_module, cls):
@@ -13327,11 +14539,48 @@
                    'std::list< std::pair< ns3::Ptr< ns3::Packet >, ns3::AmsduSubframeHeader > >', 
                    [param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket')], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): uint32_t ns3::MsduAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## msdu-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduAggregator::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## msdu-aggregator.h (module 'wifi'): void ns3::MsduAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_pure_virtual=True, is_virtual=True)
+    return
+
+def register_Ns3MsduStandardAggregator_methods(root_module, cls):
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator::MsduStandardAggregator(ns3::MsduStandardAggregator const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::MsduStandardAggregator const &', 'arg0')])
+    ## msdu-standard-aggregator.h (module 'wifi'): ns3::MsduStandardAggregator::MsduStandardAggregator() [constructor]
+    cls.add_constructor([])
+    ## msdu-standard-aggregator.h (module 'wifi'): bool ns3::MsduStandardAggregator::Aggregate(ns3::Ptr<ns3::Packet const> packet, ns3::Ptr<ns3::Packet> aggregatedPacket, ns3::Mac48Address src, ns3::Mac48Address dest) [member function]
+    cls.add_method('Aggregate', 
+                   'bool', 
+                   [param('ns3::Ptr< ns3::Packet const >', 'packet'), param('ns3::Ptr< ns3::Packet >', 'aggregatedPacket'), param('ns3::Mac48Address', 'src'), param('ns3::Mac48Address', 'dest')], 
+                   is_virtual=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): uint32_t ns3::MsduStandardAggregator::GetMaxAmsduSize() const [member function]
+    cls.add_method('GetMaxAmsduSize', 
+                   'uint32_t', 
+                   [], 
+                   is_const=True, is_virtual=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): static ns3::TypeId ns3::MsduStandardAggregator::GetTypeId() [member function]
+    cls.add_method('GetTypeId', 
+                   'ns3::TypeId', 
+                   [], 
+                   is_static=True)
+    ## msdu-standard-aggregator.h (module 'wifi'): void ns3::MsduStandardAggregator::SetMaxAmsduSize(uint32_t maxSize) [member function]
+    cls.add_method('SetMaxAmsduSize', 
+                   'void', 
+                   [param('uint32_t', 'maxSize')], 
+                   is_virtual=True)
     return
 
 def register_Ns3NakagamiPropagationLossModel_methods(root_module, cls):
@@ -13486,6 +14735,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_Ns3NistErrorRateModel_methods(root_module, cls):
     ## nist-error-rate-model.h (module 'wifi'): ns3::NistErrorRateModel::NistErrorRateModel(ns3::NistErrorRateModel const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::NistErrorRateModel const &', 'arg0')])
@@ -13582,6 +14917,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', 
@@ -13755,10 +15095,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## onoe-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::OnoeWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -14068,10 +15408,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## parf-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::ParfWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -14120,6 +15460,27 @@
                    is_const=True, 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_Ns3RegularWifiMac_methods(root_module, cls):
     ## regular-wifi-mac.h (module 'wifi'): static ns3::TypeId ns3::RegularWifiMac::GetTypeId() [member function]
     cls.add_method('GetTypeId', 
@@ -14207,6 +15568,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', 
@@ -14282,6 +15653,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', 
@@ -14357,6 +15738,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', 
@@ -14422,6 +15808,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_Ns3RraaWifiManager_methods(root_module, cls):
@@ -14439,10 +15835,10 @@
                    'ns3::WifiRemoteStation *', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
-    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station, uint32_t size) [member function]
+    ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetDataTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetDataTxVector', 
                    'ns3::WifiTxVector', 
-                   [param('ns3::WifiRemoteStation *', 'station'), param('uint32_t', 'size')], 
+                   [param('ns3::WifiRemoteStation *', 'station')], 
                    visibility='private', is_virtual=True)
     ## rraa-wifi-manager.h (module 'wifi'): ns3::WifiTxVector ns3::RraaWifiManager::DoGetRtsTxVector(ns3::WifiRemoteStation * station) [member function]
     cls.add_method('DoGetRtsTxVector', 
@@ -15533,10 +16929,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduInfo aMpdu, ns3::Time duration) const [member function]
+    ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::Send(ns3::Ptr<ns3::YansWifiPhy> sender, ns3::Ptr<ns3::Packet const> packet, double txPowerDbm, ns3::WifiTxVector txVector, ns3::WifiPreamble preamble, ns3::mpduType mpdutype, ns3::Time duration) const [member function]
     cls.add_method('Send', 
                    'void', 
-                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduInfo', 'aMpdu'), param('ns3::Time', 'duration')], 
+                   [param('ns3::Ptr< ns3::YansWifiPhy >', 'sender'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('double', 'txPowerDbm'), param('ns3::WifiTxVector', 'txVector'), param('ns3::WifiPreamble', 'preamble'), param('ns3::mpduType', 'mpdutype'), param('ns3::Time', 'duration')], 
                    is_const=True)
     ## yans-wifi-channel.h (module 'wifi'): void ns3::YansWifiChannel::SetPropagationDelayModel(ns3::Ptr<ns3::PropagationDelayModel> delay) [member function]
     cls.add_method('SetPropagationDelayModel', 
@@ -15669,6 +17065,16 @@
     cls.add_method('StartBeaconing', 
                    'void', 
                    [])
+    ## ap-wifi-mac.h (module 'wifi'): bool ns3::ApWifiMac::GetShortSlotTimeEnabled() const [member function]
+    cls.add_method('GetShortSlotTimeEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
+    ## ap-wifi-mac.h (module 'wifi'): bool ns3::ApWifiMac::GetShortPreambleEnabled() const [member function]
+    cls.add_method('GetShortPreambleEnabled', 
+                   'bool', 
+                   [], 
+                   is_const=True)
     ## ap-wifi-mac.h (module 'wifi'): int64_t ns3::ApWifiMac::AssignStreams(int64_t stream) [member function]
     cls.add_method('AssignStreams', 
                    'int64_t', 
@@ -15899,10 +17305,18 @@
 
 def register_functions(root_module):
     module = root_module
+    ## erp-information.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeErpInformationChecker() [free function]
+    module.add_function('MakeErpInformationChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ht-capabilities.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtCapabilitiesChecker() [free function]
     module.add_function('MakeHtCapabilitiesChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
                         [])
+    ## ht-operations.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeHtOperationsChecker() [free function]
+    module.add_function('MakeHtOperationsChecker', 
+                        'ns3::Ptr< ns3::AttributeChecker const >', 
+                        [])
     ## ssid.h (module 'wifi'): extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeSsidChecker() [free function]
     module.add_function('MakeSsidChecker', 
                         'ns3::Ptr< ns3::AttributeChecker const >', 
diff -Naur ns-3.24.1/src/wifi/doc/Makefile ns-3.25/src/wifi/doc/Makefile
--- ns-3.24.1/src/wifi/doc/Makefile	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/doc/Makefile	2016-03-23 21:36:53.000000000 -0700
@@ -1,8 +1,7 @@
 EPSTOPDF = epstopdf
 DIA = dia
 DOT = dot
-CONVERT = convert -density 250
-
+CONVERT = convert -density 120
 
 SOURCE = source
 FIGURES = $(SOURCE)/figures
@@ -17,7 +16,9 @@
 
 IMAGES_EPS = \
 	$(FIGURES)/snir.eps \
-	$(FIGURES)/WifiArchitecture.eps
+	$(FIGURES)/WifiArchitecture.eps \
+        $(FIGURES)/clear-channel.eps \
+        $(FIGURES)/nist-frame-success-rate.eps
 
 # rescale pdf figures as necessary
 $(FIGURES)/snir.pdf_width = 3in
diff -Naur ns-3.24.1/src/wifi/doc/source/figures/clear-channel.eps ns-3.25/src/wifi/doc/source/figures/clear-channel.eps
--- ns-3.24.1/src/wifi/doc/source/figures/clear-channel.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/doc/source/figures/clear-channel.eps	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,897 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: clear-channel.eps
+%%Creator: gnuplot 4.6 patchlevel 5
+%%CreationDate: Sat Jan  9 15:06:52 2016
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+  clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+   { dup 5 get 3 ge
+     { 5 get 3 eq {gsave} {grestore} ifelse }
+     {dup dup 0 get findfont exch 1 get scalefont setfont
+     [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+     get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+     {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+     get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+     dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+     show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+     pop aload pop M} ifelse }ifelse }ifelse }
+     ifelse }
+   forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+     6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+  0 exch R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+  exch dup MFwidth neg 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+  exch dup MFwidth -2 div 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave    { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+Level1 SuppressPDFMark or 
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (clear-channel.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.6 patchlevel 5)
+  /Author (tomh)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Sat Jan  9 15:06:52 2016)
+  /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Times-BoldItalic) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+1.000 UL
+LTb
+LCb setrgbcolor
+686 448 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 448 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 1554 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 1554 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 50)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 2660 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 2660 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 100)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 3765 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 3765 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 150)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4871 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 4871 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 200)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+686 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-102)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1345 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+1345 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-100)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+2004 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+2004 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-98)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+2663 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+2663 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-96)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+3322 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+3322 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-94)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+3981 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+3981 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-92)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+4640 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+4640 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-90)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+5299 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+5299 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-88)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+5958 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+5958 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-86)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+6617 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+6617 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-84)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4871 N
+686 448 L
+6261 0 V
+0 4423 V
+-6261 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Number of packets received)]
+] -46.7 MCshow
+grestore
+LTb
+LCb setrgbcolor
+3816 98 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (RSS\(dBm\))]
+] -46.7 MCshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+% Begin plot #1
+1.000 UL
+LT0
+LC0 setrgbcolor
+LCb setrgbcolor
+6296 4738 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (DsssRate1Mbps)]
+] -46.7 MRshow
+LT0
+6380 4738 M
+399 0 V
+686 448 M
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 133 V
+165 884 V
+165 1416 V
+165 1304 V
+164 354 V
+165 244 V
+165 88 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+% End plot #1
+% Begin plot #2
+stroke
+LT1
+LC1 setrgbcolor
+LCb setrgbcolor
+6296 4598 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (DsssRate2Mbps)]
+] -46.7 MRshow
+LT1
+6380 4598 M
+399 0 V
+686 448 M
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 22 V
+165 111 V
+165 553 V
+165 1702 V
+165 1018 V
+164 641 V
+165 310 V
+165 44 V
+165 22 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+% End plot #2
+% Begin plot #3
+stroke
+LT2
+LC2 setrgbcolor
+LCb setrgbcolor
+6296 4458 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (DsssRate5)]
+[(Times-BoldItalic) 112.0 -42.0 true true 0 (5)]
+[(Times-BoldItalic) 140.0 0.0 true true 0 (Mbps)]
+] -32.7 MRshow
+LT2
+6380 4458 M
+399 0 V
+686 448 M
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 531 V
+165 1150 V
+164 1703 V
+165 707 V
+165 244 V
+165 66 V
+164 22 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+% End plot #3
+% Begin plot #4
+stroke
+LT3
+LC3 setrgbcolor
+LCb setrgbcolor
+6296 4318 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (DsssRate11Mbps)]
+] -46.7 MRshow
+LT3
+6380 4318 M
+399 0 V
+686 448 M
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+165 44 V
+164 531 V
+165 1327 V
+165 1415 V
+165 619 V
+164 421 V
+165 44 V
+165 22 V
+165 0 V
+164 0 V
+165 0 V
+165 0 V
+% End plot #4
+stroke
+LTb
+LCb setrgbcolor
+686 4871 N
+686 448 L
+6261 0 V
+0 4423 V
+-6261 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Times-BoldItalic
diff -Naur ns-3.24.1/src/wifi/doc/source/figures/nist-frame-success-rate.eps ns-3.25/src/wifi/doc/source/figures/nist-frame-success-rate.eps
--- ns-3.24.1/src/wifi/doc/source/figures/nist-frame-success-rate.eps	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/doc/source/figures/nist-frame-success-rate.eps	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,3612 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: nist-frame-success-rate.eps
+%%Creator: gnuplot 4.6 patchlevel 5
+%%CreationDate: Fri Jan  8 17:37:51 2016
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid false def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+  10.0 Dashlength mul mul
+  Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+  ClipToBoundingBox {
+    newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+    clip
+  } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def   % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R 
+	Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+  /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+	dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+	Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke
+  Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+  currentpoint stroke M
+  hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke
+  Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+  hpt2 vpt2 neg V currentpoint stroke M
+  hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke
+  Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke
+  Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+  hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc
+	2 copy moveto
+	2 copy vpt 180 270 arc closepath fill
+	vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 270 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 270 450 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+	2 copy moveto
+	2 copy vpt 90 180 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 180 arc closepath fill
+	2 copy moveto
+	2 copy vpt 270 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 0 90 arc closepath fill
+	2 copy moveto
+	2 copy vpt 180 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+	2 copy vpt 90 360 arc closepath fill
+	vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+	vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+	neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+	exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+	Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+	Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+	2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  closepath stroke grestore} def
+/CircE {stroke [] 0 setdash 
+  hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+  hpt neg vpt neg V hpt vpt neg V
+  hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+  0 vpt2 neg V hpt2 0 V 0 vpt2 V
+  hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+  hpt neg vpt -1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+  hpt neg vpt 1.62 mul V
+  hpt 2 mul 0 V
+  hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+  translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+  Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash 
+  hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+  /Fillden exch def
+  currentrgbcolor
+  /ColB exch def /ColG exch def /ColR exch def
+  /ColR ColR Fillden mul Fillden sub 1 add def
+  /ColG ColG Fillden mul Fillden sub 1 add def
+  /ColB ColB Fillden mul Fillden sub 1 add def
+  ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+%	x,y = lower left corner of box to be filled
+%	w,h = width and height of box
+%	  a = angle in degrees between lines and x-axis
+%	 XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+  PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+  PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+  clip
+  currentlinewidth 0.5 mul setlinewidth
+  /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+  0 0 M PFa 5 get rotate PFs -2 div dup translate
+  0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 M 0 PFs V} for
+  0 PFa 6 get ne {
+	0 1 PFs PFa 4 get div 1 add floor cvi
+	{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+  stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+	{/InterpretLevel1 true def}
+	{/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+	bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} 
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+	0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+	8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+	0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+	0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+	0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+	0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+	12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+	-4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+  TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+/MFshow {
+   { dup 5 get 3 ge
+     { 5 get 3 eq {gsave} {grestore} ifelse }
+     {dup dup 0 get findfont exch 1 get scalefont setfont
+     [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
+     get exch 4 get {Gshow} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
+     {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
+     get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
+     dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
+     show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
+     pop aload pop M} ifelse }ifelse }ifelse }
+     ifelse }
+   forall} def
+/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
+/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
+ {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
+     6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
+/MLshow { currentpoint stroke M
+  0 exch R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MRshow { currentpoint stroke M
+  exch dup MFwidth neg 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/MCshow { currentpoint stroke M
+  exch dup MFwidth -2 div 3 -1 roll R
+  Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
+/XYsave    { [( ) 1 2 true false 3 ()] } bind def
+/XYrestore { [( ) 1 2 true false 4 ()] } bind def
+Level1 SuppressPDFMark or 
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+  userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+  /Title (nist-frame-success-rate.eps)
+  /Subject (gnuplot plot)
+  /Creator (gnuplot 4.6 patchlevel 5)
+  /Author (tomh)
+%  /Producer (gnuplot)
+%  /Keywords ()
+  /CreationDate (Fri Jan  8 17:37:51 2016)
+  /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Times-BoldItalic) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+1.000 UL
+LTb
+LCb setrgbcolor
+686 448 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 448 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 1185 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 1185 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.2)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 1922 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 1922 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.4)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 2660 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 2660 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.6)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 3397 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 3397 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.8)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4134 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 4134 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4871 M
+63 0 V
+6198 0 R
+-63 0 V
+stroke
+602 4871 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1.2)]
+] -46.7 MRshow
+1.000 UL
+LTb
+LCb setrgbcolor
+686 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+686 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (-5)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1580 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+1580 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+2475 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+2475 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 5)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+3369 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+3369 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 10)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+4264 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+4264 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 15)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+5158 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+5158 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 20)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+6053 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+6053 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 25)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+6947 448 M
+0 63 V
+0 4360 R
+0 -63 V
+stroke
+6947 308 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 30)]
+] -46.7 MCshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4871 N
+686 448 L
+6261 0 V
+0 4423 V
+-6261 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 moveto
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Frame Success Rate)]
+] -46.7 MCshow
+grestore
+LTb
+LCb setrgbcolor
+3816 98 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (SNR\(dB\))]
+] -46.7 MCshow
+LTb
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+% Begin plot #1
+5.000 UL
+LT0
+LC0 setrgbcolor
+LCb setrgbcolor
+6296 4738 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate6Mbps)]
+] -46.7 MRshow
+LT0
+6380 4738 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 2 V
+18 13 V
+18 59 V
+18 155 V
+18 283 V
+18 393 V
+18 455 V
+18 457 V
+17 417 V
+18 354 V
+18 286 V
+18 222 V
+18 167 V
+18 123 V
+18 90 V
+18 64 V
+18 45 V
+17 32 V
+18 22 V
+18 15 V
+18 11 V
+18 7 V
+18 5 V
+18 3 V
+18 2 V
+stroke 2511 4130 M
+18 1 V
+17 1 V
+18 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #1
+% Begin plot #2
+stroke
+LT1
+LC1 setrgbcolor
+LCb setrgbcolor
+6296 4598 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate9Mbps)]
+] -46.7 MRshow
+LT1
+6380 4598 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 1 V
+18 6 V
+18 34 V
+18 104 V
+18 212 V
+18 327 V
+18 408 V
+17 439 V
+18 425 V
+18 378 V
+18 320 V
+18 258 V
+18 202 V
+18 154 V
+18 116 V
+18 86 V
+17 62 V
+18 45 V
+18 33 V
+18 23 V
+18 16 V
+18 12 V
+18 8 V
+18 5 V
+18 4 V
+17 3 V
+18 1 V
+18 2 V
+18 0 V
+18 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #2
+% Begin plot #3
+stroke
+LT2
+LC2 setrgbcolor
+LCb setrgbcolor
+6296 4458 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate12Mbps)]
+] -46.7 MRshow
+LT2
+6380 4458 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 1 V
+18 11 V
+18 52 V
+18 144 V
+18 269 V
+17 384 V
+18 451 V
+18 459 V
+18 423 V
+18 361 V
+18 293 V
+18 227 V
+18 173 V
+18 127 V
+17 93 V
+18 66 V
+18 47 V
+18 33 V
+18 23 V
+18 16 V
+18 11 V
+18 7 V
+18 5 V
+17 4 V
+18 2 V
+18 1 V
+18 1 V
+18 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #3
+% Begin plot #4
+stroke
+LT3
+LC3 setrgbcolor
+LCb setrgbcolor
+6296 4318 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate18Mbps)]
+] -46.7 MRshow
+LT3
+6380 4318 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 6 V
+18 29 V
+18 94 V
+17 201 V
+18 316 V
+18 402 V
+18 438 V
+18 428 V
+18 384 V
+18 326 V
+18 264 V
+18 207 V
+17 159 V
+18 119 V
+18 89 V
+18 65 V
+18 46 V
+18 34 V
+18 24 V
+18 17 V
+18 12 V
+17 8 V
+18 6 V
+18 4 V
+18 2 V
+18 2 V
+18 1 V
+18 1 V
+18 1 V
+18 0 V
+17 0 V
+18 1 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #4
+% Begin plot #5
+stroke
+LT4
+LC4 setrgbcolor
+LCb setrgbcolor
+6296 4178 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate24Mbps)]
+] -46.7 MRshow
+LT4
+6380 4178 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 1 V
+18 8 V
+18 34 V
+17 96 V
+18 191 V
+18 293 V
+18 374 V
+18 414 V
+18 412 V
+18 379 V
+18 329 V
+18 273 V
+17 219 V
+18 171 V
+18 131 V
+18 98 V
+18 74 V
+18 54 V
+18 39 V
+18 28 V
+18 21 V
+17 14 V
+18 10 V
+18 7 V
+18 5 V
+18 4 V
+18 2 V
+18 2 V
+18 1 V
+18 0 V
+17 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+stroke 4371 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #5
+% Begin plot #6
+stroke
+LT5
+LC5 setrgbcolor
+LCb setrgbcolor
+6296 4038 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate36Mbps)]
+] -46.7 MRshow
+LT5
+6380 4038 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 1 V
+18 8 V
+18 35 V
+18 100 V
+stroke 4371 592 M
+18 195 V
+18 298 V
+18 376 V
+18 412 V
+17 408 V
+18 374 V
+18 324 V
+18 269 V
+18 217 V
+18 169 V
+18 131 V
+18 99 V
+18 74 V
+17 54 V
+18 41 V
+18 29 V
+18 21 V
+18 15 V
+18 11 V
+18 8 V
+18 5 V
+18 4 V
+17 2 V
+18 2 V
+18 1 V
+18 1 V
+18 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #6
+% Begin plot #7
+stroke
+LT6
+LC6 setrgbcolor
+LCb setrgbcolor
+6296 3898 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate48Mbps)]
+] -46.7 MRshow
+LT6
+6380 3898 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 5 V
+18 22 V
+18 70 V
+18 152 V
+18 253 V
+17 344 V
+18 398 V
+18 412 V
+18 390 V
+18 347 V
+18 294 V
+18 239 V
+18 189 V
+18 147 V
+17 112 V
+18 84 V
+18 63 V
+18 46 V
+18 34 V
+18 24 V
+18 18 V
+18 13 V
+18 9 V
+17 6 V
+18 5 V
+18 3 V
+18 2 V
+18 2 V
+18 1 V
+18 0 V
+18 1 V
+18 0 V
+17 0 V
+18 1 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #7
+% Begin plot #8
+stroke
+LT7
+LC7 setrgbcolor
+LCb setrgbcolor
+6296 3758 M
+[ [(Times-BoldItalic) 140.0 0.0 true true 0 (OfdmRate54Mbps)]
+] -46.7 MRshow
+LT7
+6380 3758 M
+399 0 V
+686 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 2511 448 M
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+stroke 4371 448 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 4 V
+18 19 V
+17 59 V
+18 133 V
+18 224 V
+18 311 V
+18 370 V
+18 393 V
+18 383 V
+18 349 V
+18 304 V
+17 254 V
+18 206 V
+18 165 V
+18 128 V
+18 98 V
+18 75 V
+18 57 V
+18 42 V
+18 31 V
+17 23 V
+18 16 V
+18 12 V
+18 9 V
+18 6 V
+18 5 V
+18 3 V
+18 2 V
+18 2 V
+17 1 V
+18 0 V
+18 1 V
+18 0 V
+18 0 V
+18 1 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+stroke 6231 4134 M
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+18 0 V
+17 0 V
+18 0 V
+18 0 V
+18 0 V
+% End plot #8
+stroke
+1.000 UL
+LTb
+LCb setrgbcolor
+686 4871 N
+686 448 L
+6261 0 V
+0 4423 V
+-6261 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Times-BoldItalic
diff -Naur ns-3.24.1/src/wifi/doc/source/figures/snir.dia ns-3.25/src/wifi/doc/source/figures/snir.dia
--- ns-3.24.1/src/wifi/doc/source/figures/snir.dia	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/doc/source/figures/snir.dia	2016-03-23 21:36:53.000000000 -0700
@@ -1,8 +1,15 @@
-      m杻2o63UꪕuOB@C_&<	gaבf`}^i{a0F3m<:t`0_߻l"oqx$f!&I|e{V~a4:%	I$KBGч?m%pycu3?Vs_B{OUk8mӨ\n+"9Y`xq7xTW]C$;mjc6c;ܘvs+Xs>֜/aDK&WaSV腶ԭx$5mM乗'nDC-ol+ W/V>k$ª?l>}#ymԤy\s0+ii{,vrk&?T̄O4:VtltgBDh:`}G+OG6Uh~OYpuh{*W֓`#3ǜ cf.1YKs04p_ߣF./lnBR)ӒDQV2s&U/}lmY.Z[Ldn|3L-6xO59>zKMf>A ]|B.:JD)A}[(^4
-PV?ǯvl[bo5A-VuW?TB+R	4D(+`DяA;˶0HGd.Q-!W+M59_ooAZZct3Z\S<nVS;Zʓ0+^XH C $A.)%V' J
- *]H3!в++]ҁoEH~)dS@HhԁB_k*dJB?N3#%ϻqۆ} Gnwe_gCzyNwX NSiXP6M.-+ݶS+y`-vu!.<ZdA7M&ˇH1Z@.إ֠]9о׹,b[\ya7ܖ6_\1;@	*"2VS/+yN@<V{@=T>T  r8~4WVzj8Q[Hzn/1\cʶp30~78A	`^;|7y,"V)w݂;D2wN;{0N<aoCe&Hrs.7,P&HNg%:-uإZ%*Xv>fm*V*X)=V
-]~#;P]}O{v=<'^8	ߜ&H2QT`Ft
-*fw{iKSd1~jM)&oeIbGe/!y9-1F"0Fǩ)JjI=!!La5$cErOHօH嬋45$#ErOH6ÑO4+@=±Ǳ1Z+8Vq_8plqlNr_8؂ؚ -+8V1pl؀H9686x(r_8vDqCp`<Mq?864QcL1cKq((x1q<Wc,c cmQyD5Ķ' X؁;
-@lbc틑E1w_T"/0Sda
-0)cKa,j0ܨ1Ri`,*˒x,ǿBe,aĳ$^_0ě`<_V񜋱cSTϖ3a1/c(#cMX){CYEqyi}aYX*O~./˴eN>/mb/,!)=3+,szi}aYTZ륏,sR{i}aYTnO!YfKXr~YU?zKסh.oXg-nFRzyiclQہYK#&Uo÷劬?|nU$zm߳u{/3Њ/&ucSce\*4B?<&?FOݴ5}hz|Lv`m#A<ea_4֤$#72QjcH0-~kr5vnV֡Fuv?;Zʓ`]۝g;h
-=g83}H3<T=s3)ySvz1=uqDѓ9 gT*r ren:7E3,YvD])iUll	sݪl>9CDd`  
\ No newline at end of file
+     ][o8~0<e<]`,v;@UG[G6di^!%_bKcÏJ[E~Ht&_?eD?ßY7ҕz?׏hEZFytL<ߕFy%y<H6|et:,Z&"|?}qu~fmG_1朮qrJI<hRӏ{Mjه>[*Uu }͒f^LER
+!6XqEszne%"˳(!oyj=&DذKK4_2j{ʝe}֢d|4]EOzy\uIS;?_o(EoT"f4^ ftW6~i۝:1W{GOqVviM\2 ɷΜ,nOrQ:j$(!$糵?>`LAb飮3(
+#,,D)Em	<"MotӇrjSMec[tîoq:ܚ'SplXuqre9O4] dtőR{\#`cS~#7Eˁt}'o(;fh8(g@T+Uנ,ze	g,=kgW烏5N]y~%OOp_QV;aUx-ΓIK1|6?fjq`蹚vĖǸA>~}Ry%h]B9f{%c"A4я g6D|oUI"m/جU%mɼZ`m3b]&c183ךMV6NLm,v	7]@I3!>ð(r.4 [w1`u+W[ؒ-nnY'D%
+1#؂9gyd*("RX\=`}hɻP#zM17DMWEj7*HFN8NzkZ$?~ib;e;5tX8%F.]՛~qȦq'}ɢi:M{\Jʱ?8]#1h;*P{ERXG=Cj|PJP`*L(.πN{LԋeP{60i
+#KZx5rԌwAzytT\Ap1*KgMPQОƀ(f"yέa[MlgJȮ슺DZqDDFiel@
+$jWQ
+DlFi˥˅\8#FJl<1i`vX8"\xqZ&JWDJ[M#M@TMХ.GXDN	2`EEx1kq93c*%&"+fODaAA`SAFF	₂XdŹ!"#8ؖpZyfUk0CrNNuȩ<HJ +DU	_`NYh3Qi
+keu32*e3_bYC!zm) Ha,12@G`BESC`EP~Ձ]cx	qvM+G)@X4:bv%:Je;	,wqTK`+sù&p.jx',¿dsDb,|aJC7hG2(=tPF3{A_$ ~-2~mȩV9h+kR2B))8\,T#M6 wV LSk(v4V,Pp<RyN/(Ԝorl<D1c%|YSmΛ]7O}{twj K&ξYNտS B[4.T*s356T0ܢA%1hɩ$UQNR_'Ql*0{V+AG$noF".+dq㘲^y'HTVAnۋI}ҥ9$#g1m\!v~W;Ί]AͦnA]ʾR+%`=RK^8뛚FU	^L&`J#Ebe<ȧV7 xUh-{ҒAX<wa
+vc#}LpW7Ίyj5egO[<jJ 0m7.7[_hjBWo0^UuRAlOm3;8bM>a]~cUo(ąXmӶzC!!pT C(UAlJ_"aGPk
+UƁ0r#9֪7s.7 (w7PX%4GUoKS(lEuDAznp!z5³4&QDy6o
+o>Ӫ7P_CFx_P[<}pr~>ðAwp6`X2ޜr:n!|n6x}*xJJbP{S~)yfikzμfIhLB)~:n88lSvQ9!q[E{JzE($Ucc0ךPQ8^j
+gŷ.x";k|C$D) b9E<Tk^ary7G	3AV)dy,^'o#Xa0qoL9#\{k}Q`'+Wl-*#މqV"|#FVv2Sklb	V3Z+涾;ǰ#ޑx;MA|uцs>7[zx.慯 ;}s_*v(۔8[ٚh4e$
+bϯKJtg?* Y;+	peC5wuDf6LaN;ڨs4O
+9\F`-e,PZaK[-rbWHJ4ĔH;aM0eһJS3#a&%ʣ,uNi|G8G4١FR{%$sdZ>DIP|+A2E.ToQ$tA$dr:"zh	<tEµ{j8"N"Z{=s0҂4ZPWh	3Ҍu)hPXi4(BZPƙ}E.
+y ^Ij	 k%0r#9qƏ)i,9r:&~(9)>+.,??+cU  
\ No newline at end of file
diff -Naur ns-3.24.1/src/wifi/doc/source/wifi-design.rst ns-3.25/src/wifi/doc/source/wifi-design.rst
--- ns-3.24.1/src/wifi/doc/source/wifi-design.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/doc/source/wifi-design.rst	2016-03-23 21:36:53.000000000 -0700
@@ -28,29 +28,42 @@
 * various rate control algorithms including **Aarf, Arf, Cara, Onoe, Rraa,
   ConstantRate, and Minstrel**
 * 802.11s (mesh), described in another chapter
+* 802.11p and WAVE (vehicular), described in another chapter
 
 The set of 802.11 models provided in |ns3| attempts to provide an accurate
 MAC-level implementation of the 802.11 specification and to provide a
-not-so-slow PHY-level model of the 802.11a/b/g/n/ac specifications.
+packet-level abstraction of the PHY-level for different PHYs, corresponding to 
+802.11a/b/e/g/n/ac specifications.
 
 In |ns3|, nodes can have multiple WifiNetDevices on separate channels, and the
 WifiNetDevice can coexist with other device types; this removes an architectural
 limitation found in |ns2|. Presently, however, there is no model for
-cross-channel interference or coupling.
+cross-channel interference or coupling between channels.
 
-The source code for the WifiNetDevice lives in the directory
+The source code for the WifiNetDevice and its models lives in the directory
 ``src/wifi``.
 
-The implementation is modular and provides roughly four levels of models:
+The implementation is modular and provides roughly three sublayers of models:
 
 * the **PHY layer models**
-* the so-called **MAC low models**: they implement DCF and EDCAF
-* the so-called **MAC high models**: they implement the MAC-level beacon
-  generation, probing, and association state machines, and
-* a set of **Rate control algorithms** used by the MAC low models
+* the so-called **MAC low models**: they model functions such as medium
+  access (DCF and EDCA), RTS/CTS and ACK.  In |ns3|, the lower-level MAC
+  is further subdivided into a **MAC low** and **MAC middle** sublayering,
+  with channel access grouped into the **MAC middle**.   
+* the so-called **MAC high models**: they implement non-time-critical processes
+  in Wifi such as the MAC-level beacon generation, probing, and association 
+  state machines, and a set of **Rate control algorithms**.  In the literature,
+  this sublayer is sometimes called the **upper MAC** and consists of more 
+  software-oriented implementations vs. time-critical hardware implementations. 
 
-Next, we provide some overview of each layer.
-More detailed information will be discussed later.
+Next, we provide an design overview of each layer, shown in 
+Figure :ref:`wifi-architecture`.
+
+.. _wifi-architecture:
+
+.. figure:: figures/WifiArchitecture.*
+   
+   WifiNetDevice architecture.
 
 MAC high models
 ===============
@@ -79,10 +92,14 @@
 style support an attribute ``VhtSupported`` that allows configuration
 of 802.11ac Very High Throughput style support.
 
+There are also several **rate control algorithms** that can be used by the
+MAC low layer.  A complete list of available rate control algorithms is 
+provided in a separate section.
+
 MAC low layer
 ==============
 
-The **MAC low layer** is split into three components:
+The **MAC low layer** is split into three main components:
 
 #. ``ns3::MacLow`` which takes care of RTS/CTS/DATA/ACK transactions.
 #. ``ns3::DcfManager`` and ``ns3::DcfState`` which implements the DCF and EDCAF
@@ -95,43 +112,151 @@
    ``ns3::EdcaTxopN`` is is used by QoS-enabled high MACs and also
    performs 802.11n-style MSDU aggregation.
 
-Rate control algorithms
-=======================
-
-There are also several **rate control algorithms** that can be used by the
-MAC low layer.  A complete list of available rate control algorithms is 
-provided in a separate section.
-
 PHY layer models
 ================
 
 The PHY layer implements a single model in the ``ns3::WifiPhy`` class: the
-physical layer model implemented there is described fully in a paper entitled
+physical layer model implemented there is described in a paper entitled
 `Yet Another Network Simulator <http://cutebugs.net/files/wns2-yans.pdf>`_
-Validation results for 802.11b are available in this
-`technical report <http://www.nsnam.org/~pei/80211b.pdf>`_
+The acronym *Yans* derives from this paper title.
 
-.. _wifi-architecture:
+In short, the physical layer models are mainly responsible for modeling 
+the reception of packets and for tracking energy consumption.  There
+are typically three main components to this:
+
+* each packet received is probabilistically evaluated for successful or
+  failed reception.  The probability depends on the modulation, on
+  the signal to noise (and interference) ratio for the packet, and on
+  the state of the physical layer (e.g. reception is not possible while
+  transmission or sleeping is taking place);
+* an object exists to track (bookkeeping) all received signals so that
+  the correct interference power for each packet can be computed when
+  a reception decision has to be made; and
+* one or more error models corresponding to the modulation and standard
+  are used to look up probability of successful reception.
+
+Scope and Limitations
+*********************
+
+The IEEE 802.11 standard [ieee80211]_ is a large specification, 
+and not all aspects are covered by |ns3|; the documentation of |ns3|'s 
+conformance by itself would lead to a very long document.  This section 
+attempts to summarize compliance with the standard and with behavior 
+found in practice.
+
+The physical layer and channel models operate on a per-packet basis, with
+no frequency-selective propagation or interference effects.  Detailed
+link simulations are not performed, nor are frequency-selective fading
+or interference models available.  Directional antennas are also not
+supported at this time.  For additive white gaussian noise (AWGN)
+scenarios, or wideband interference scenarios, performance is governed
+by the application of analytical models (based on modulation and factors
+such as channel width) to the received signal-to-noise ratio, where noise
+combines the effect of thermal noise and of interference from other Wi-Fi
+packets.  Moreover, interference from other technologies is not modeled.
+The following details pertain to the physical layer and channel models:
+
+* 802.11n/ac MIMO currently uses the same 802.11n/ac SISO Yans and Nist error rate models
+* 802.11ac MU-MIMO is not supported
+* Antenna diversity is not supported
+* 802.11n/ac beamforming is not supported
+* PLCP preamble reception is not modeled
+* PHY_RXSTART is not supported
 
-.. figure:: figures/WifiArchitecture.*
-   
-   WifiNetDevice architecture.
+At the MAC layer, most of the main functions found in deployed Wi-Fi
+equipment for 802.11a/b/e/g are implemented, but there are scattered instances
+where some limitations in the models exist.  Most notably, 802.11n/ac 
+configurations are not supported by adaptive rate controls; only the
+so-called ``ConstantRateWifiManager`` can be used by those standards at
+this time.  Support for 802.11n and ac is evolving.  Some additional details
+are as follows:
+
+* 802.11e TXOP is not supported
+* BSSBasicRateSet for 802.11b has been assumed to be 1-2 Mbit/s
+* BSSBasicRateSet for 802.11a/g has been assumed to be 6-12-24 Mbit/s
+* cases where RTS/CTS and ACK are transmitted using HT formats are not supported
 
-The WifiChannel and WifiPhy models
-**********************************
+Design Details
+**************
 
-The WifiChannel subclass can be used to connect together a set of
-``ns3::WifiNetDevice`` network interfaces. The class ``ns3::WifiPhy`` is the
-object within the WifiNetDevice that receives bits from the channel.  
-For the channel propagation modeling, the propagation module is used; see section :ref:`Propagation` for details.
-
-This section summarizes the description of the BER calculations found in the
-yans paper taking into account the Forward Error Correction present in 802.11a
-and describes the algorithm we implemented to decide whether or not a packet can
-be successfully received. See `"Yet Another Network Simulator"
-<http://cutebugs.net/files/wns2-yans.pdf>`_ for more details.
+The remainder of this section is devoted to more in-depth design descriptions
+of some of the Wi-Fi models.  Users interested in skipping to the section
+on usage of the wifi module (User Documentation) may do so at this point.
+We organize these more detailed sections from the bottom-up, in terms of
+layering, by describing the channel and PHY models first, followed by
+the MAC models.
+
+WifiChannel
+===========
+
+``ns3::WifiChannel`` is an abstract base class that allows different channel
+implementations to be connected.  At present, there is only one such channel
+(the ``ns3::YansWifiChannel``).  The class works in tandem with the 
+``ns3::WifiPhy`` class; if you want to provide a new physical layer model,
+you must subclass both ``ns3::WifiChannel`` and ``ns3::WifiPhy``.
+
+The WifiChannel model exists to interconnect WifiPhy objects so that packets
+sent by one Phy are received by some or all other Phys on the channel.
+
+YansWifiChannel
+###############
+
+This is the only channel model presently in the |ns3| wifi module.  The 
+``ns3::YansWifiChannel`` implementation uses the propagation loss and 
+delay models provided within the |ns3| :ref:`Propagation` module.
+In particular, a number of propagation models can be added (chained together,
+if multiple loss models are added) to the channel object, and a propagation 
+delay model also added. Packets sent from a ``ns3::YansWifiPhy`` object
+onto the channel with a particular signal power, are copied to all of the
+other ``ns3::YansWifiPhy`` objects after the signal power is reduced due
+to the propagation loss model(s), and after a delay corresponding to
+transmission (serialization) delay and propagation delay due 
+any channel propagation delay model (typically due to speed-of-light
+delay between the positions of the devices).
+
+Only objects of ``ns3::YansWifiPhy`` may be attached to a 
+``ns3::YansWifiChannel``; therefore, objects modeling other 
+(interfering) technologies such as LTE are not allowed.    Furthermore,
+packets from different channels do not interact; if a channel is logically
+configured for e.g. channels 5 and 6, the packets do not cause 
+adjacent channel interference (even if their channel numbers overlap).
+
+WifiPhy and related models
+==========================
+
+The ``ns3::WifiPhy`` is an abstract base class representing the 802.11
+physical layer functions.  Packets passed to this object (via a
+``SendPacket()`` method are sent over the ``WifiChannel`` object, and
+upon reception, the receiving PHY object decides (based on signal power
+and interference) whether the packet was successful or not.  This class
+also provides a number of callbacks for notifications of physical layer
+events, exposes a notion of a state machine that can be monitored for
+MAC-level processes such as carrier sense, and handles sleep/wake models
+and energy consumption.  The ``ns3::WifiPhy`` hooks to the ``ns3::MacLow``
+object in the WifiNetDevice.
+
+There is currently one implementation of the ``WifiPhy``, which is the
+``ns3::YansWifiPhy``.  It works in conjunction with three other objects:
+
+* **WifiPhyStateHelper**:  Maintains the PHY state machine
+* **InterferenceHelper**:  Tracks all packets observed on the channel
+* **ErrorModel**:  Computes a probability of error for a given SNR
+
+YansWifiPhy and WifiPhyStateHelper
+##################################
+
+Class ``ns3::YansWifiPhy`` is responsible for taking packets passed to
+it from the MAC (the ``ns3::MacLow`` object) and sending them onto the
+``ns3::YansWifiChannel`` to which it is attached.  It is also responsible
+to receive packets from that channel, and, if reception is deemed to have
+been successful, to pass them up to the MAC. 
+
+Class ``ns3::WifiPhyStateHelper`` manages the state machine of the PHY 
+layer, and allows other objects to hook as *listeners* to monitor PHY
+state.  The main use of listeners is for the MAC layer to know when
+the PHY is busy or not (for transmission and collision avoidance).
 
-The PHY layer can be in one of five states:
+The PHY layer can be in one of six states:
 
 #. TX: the PHY is currently transmitting a signal on behalf of its associated
    MAC
@@ -139,34 +264,78 @@
    its last bit to forward it to the MAC.
 #. IDLE: the PHY is not in the TX, RX, or CCA BUSY states.
 #. CCA Busy: the PHY is not in TX or RX state but the measured energy is higher than the energy detection threshold.
+#. SWITCHING: the PHY is switching channels.
 #. SLEEP: the PHY is in a power save mode and cannot send nor receive frames.
 
-When the first bit of a new packet is received while the PHY is not IDLE (that
-is, it is already synchronized on the reception of another earlier packet or it
-is sending data itself), the received packet is dropped. Otherwise, if the PHY
-is IDLE or CCA Busy, we calculate the received energy of the first bit of this new signal
-and compare it against our Energy Detection threshold (as defined by the Clear
-Channel Assessment function mode 1). If the energy of the packet k is higher,
-then the PHY moves to RX state and schedules an event when the last bit of the
-packet is expected to be received. Otherwise, the PHY stays in IDLE 
-or CCA Busy state and drops the packet.
-
-The energy of the received signal is assumed to be zero outside of the reception
-interval of packet k and is calculated from the transmission power with a
-path-loss propagation model in the reception interval.  where the path loss
-exponent, :math:`n`, is chosen equal to :math:`3`, the reference distance,
-:math:`d_0` is choosen equal to :math:`1.0m` and the reference energy is based
-based on a Friis propagation model.
-
-When the last bit of the packet upon which the PHY is synchronized is received,
-we need to calculate the probability that the packet is received with any error
-to decide whether or not the packet on which we were synchronized could be
-successfully received or not: a random number is drawn from a uniform
-distribution and is compared against the probability of error.
-
-To evaluate the probability of error, we start from the piecewise linear 
-functions shown in Figure :ref:`snir` and calculate the 
-SNIR function. 
+Packet reception works as follows.  The ``YansWifiPhy`` attribute 
+CcaMode1Threshold 
+corresponds to what the standard calls the "ED threshold" for CCA Mode 1.  
+In section 16.4.8.5:  "CCA Mode 1: Energy above threshold. CCA shall report 
+a busy medium upon detection of any energy above the ED threshold."  
+
+There is a "noise ED threshold" in the standard for non-Wi-Fi signals, and 
+this is usually set to 20 dB greater than the "carrier sense ED threshold".  
+However, the model doesn't support this, because there are no 'foreign' 
+signals in the YansWifi model-- everything is a Wi-Fi signal.
+
+In the standard, there is also what is called the "minimum modulation
+and coding rate sensitivity" in section 18.3.10.6 CCA requirements. This is 
+the -82 dBm requirement for 20 MHz channels.  This is analogous to the 
+EnergyDetectionThreshold attribute in ``YansWifiPhy``.  CCA busy state is 
+not raised in this model when this threshold is exceeded but instead RX 
+state is immediately reached, since it is assumed that PLCP sync always 
+succeeds in this model.  Even if the PLCP header reception fails, the 
+channel state is still held in RX until YansWifiPhy::EndReceive().
+
+In ns-3, the values of these attributes are set to small default values 
+(-96 dBm for EnergyDetectionThreshold and -99 dBm for CcaMode1Threshold).  
+So, if a signal comes in at > -96 dBm and the state is IDLE or CCA BUSY, 
+this model will lock onto it for the signal duration and raise RX state.  
+If it comes in at <= -96 dBm but >= -99 dBm, it will definitely raise 
+CCA BUSY but not RX state.  If it comes in < -99 dBm, it gets added to 
+the interference tracker and, by itself, it will not raise CCA BUSY, but 
+maybe a later signal will contribute more power so that the threshold 
+of -99 dBm is reached at a later time.
+
+The energy of the signal intended to be received is 
+calculated from the transmission power and adjusted based on the Tx gain
+of the transmitter, Rx gain of the receiver, and any path loss propagation
+model in effect.
+
+The packet reception occurs in two stages.   First, an event is scheduled
+for when the PLCP header has been received. PLCP header is often transmitted
+at a lower modulation rate than is the payload.  The portion of the packet
+corresponding to the PLCP header is evaluated for probability of error 
+based on the observed SNR.  The InterferenceHelper object returns a value
+for "probability of error (PER)" for this header based on the SNR that has
+been tracked by the InterferenceHelper.  The ``YansWifiPhy`` then draws
+a random number from a uniform distribution and compares it against the 
+PER and decides success or failure.  The process is again repeated after 
+the payload has been received (possibly with a different error model 
+applied for the different modulation).  If both the header and payload 
+are successfully received, the packet is passed up to the ``MacLow`` object.  
+
+Even if packet objects received by the PHY are not part of the reception
+process, they are remembered by the InterferenceHelper object for purposes
+of SINR computation and making clear channel assessment decisions.
+
+InterferenceHelper
+##################
+
+The InterferenceHelper is an object that tracks all incoming packets and
+calculates probability of error values for packets being received, and
+also evaluates whether energy on the channel rises above the CCA
+threshold.
+
+The basic operation of probability of error calculations is shown in Figure
+:ref:`snir`.  Packets are represented as bits (not symbols) in the |ns3|
+model, and the InterferenceHelper breaks the packet into one or more
+"chunks" each with a different signal to noise (and interference) ratio
+(SNIR).  Each chunk is separately evaluated by asking for the probability
+of error for a given number of bits from the error model in use.  The
+InterferenceHelper builds an aggregate "probability of error" value
+based on these chunks and their duration, and returns this back to
+the ``YansWifiPhy`` for a reception decision.
 
 .. _snir:
 
@@ -174,16 +343,61 @@
    
    *SNIR function over time.*
 
-From the SNIR function we can derive the Bit Error Rate (BER) and Packet Error Rate (PER) for
-the modulation and coding scheme being used for the transmission.  Please refer to [pei80211ofdm]_, [pei80211b]_, [lacage2006yans]_, [Haccoun]_ and [Frenger]_ for a detailed description of the available BER/PER models.
-
-WifiChannel configuration
-=========================
+From the SNIR function we can derive the Bit Error Rate (BER) and Packet 
+Error Rate (PER) for
+the modulation and coding scheme being used for the transmission.  
+
+ErrorModel
+##########
+
+The error models are described in more detail in outside references.  Please refer to [pei80211ofdm]_, [pei80211b]_, [lacage2006yans]_, [Haccoun]_ and [Frenger]_ for a detailed description of the available BER/PER models.
+
+The current |ns3| error rate models are for additive white gaussian
+noise channels (AWGN) only; any potential fast fading effects are not modeled.
+
+The original error rate model was called the ``ns3::YansErrorRateModel`` and
+was based on analytical results.  For 802.11b modulations, the 1 Mbps mode 
+is based on DBPSK. BER is from equation 5.2-69 from [proakis2001]_.
+The 2 Mbps model is based on DQPSK. Equation 8 of [ferrari2004]_.  
+More details are provided in [lacage2006yans]_.
+
+The ``ns3::NistErrorRateModel`` was later added and became the |ns3| default.
+The model was largely aligned with the previous ``ns3::YansErrorRateModel``
+for DSSS modulations 1 Mbps and 2 Mbps, but the 5.5 Mbps and 11 Mbps models
+were re-based on equations (17) and (18) from [pursley2009]_.
+For OFDM modulations, newer results were
+obtained based on work previously done at NIST [miller2003]_.  The results
+were also compared against the CMU wireless network emulator, and details
+of the validation are provided in [pei80211ofdm]_.  Since OFDM modes use
+hard-decision of punctured codes, the coded BER is calculated using
+Chernoff bounds.
+
+The 802.11b model was split from the OFDM model when the NIST error rate
+model was added, into a new model called DsssErrorRateModel.  The current
+behavior is that users may 
+
+Furthermore, the 5.5 Mbps and 11 Mbps models for 802.11b rely on library
+methods implemented in the GNU Scientific Library (GSL).  The Waf build
+system tries to detect whether the host platform has GSL installed; if so,
+it compiles in the newer models from [pursley2009]_ for 5.5 Mbps and 11 Mbps;
+if not, it uses a backup model derived from Matlab simulations.
+
+As a result, there are three error models:
+
+#. ``ns3::DsssErrorRateModel``:  contains models for 802.11b modes.  The
+   802.11b 1 Mbps and 2 Mbps error models are based on classical modulation
+   analysis.  If GNU GSL is installed, the 5.5 Mbps and 11 Mbps from 
+   [pursley2009]_ are used; otherwise, a backup Matlab model is used.
+#. ``ns3::NistErrorRateModel``: is the default for OFDM modes and reuses
+   ``ns3::DsssErrorRateModel`` for 802.11b modes. 
+#. ``ns3::YansErrorRateModel``: is the legacy for OFDM modes and reuses
+   ``ns3::DsssErrorRateModel`` for 802.11b modes. 
 
-The WifiChannel implementation uses the propagation loss and delay models provided within the |ns3| :ref:`Propagation` module.
+Users should select either Nist or Yans models for OFDM (Nist is default), 
+and Dsss will be used in either case for 802.11b.
 
 The MAC model
-*************
+=============
 
 The 802.11 Distributed Coordination Function is used to calculate when to grant
 access to the transmission medium. While implementing the DCF would have been
@@ -230,7 +444,7 @@
 * etc.
 
 Rate control algorithms
-***********************
+#######################
 
 Multiple rate control algorithms are available in |ns3|.
 Some rate control algorithms are modeled after real algorithms used in real devices;
@@ -256,7 +470,7 @@
 * ``AparfWifiManager`` [chevillat2005aparf]_
 
 ConstantRateWifiManager
-=======================
+#######################
 
 The constant rate control algorithm always uses the same
 transmission mode for every packet. Users can set a desired
@@ -289,7 +503,7 @@
   all 'request' control packets
 
 IdealWifiManager
-================
+################
 
 The ideal rate control algorithm selects the best
 mode according to the SNR of the previous packet sent.
@@ -309,7 +523,7 @@
   that is used to calculate the SNR threshold for each mode.
 
 MinstrelWifiManager
-===================
+###################
 
 The minstrel rate control algorithm is a rate control algorithm originated from
 madwifi project.  It is currently the default rate control algorithm of the Linux kernel.
@@ -325,7 +539,7 @@
 For a more detailed information about minstrel, see [linuxminstrel]_.
 
 Modifying Wifi model
-********************
+####################
 
 Modifying the default wifi model is one of the common tasks when performing research.
 We provide an overview of how to make changes to the default wifi model in this section.
@@ -348,17 +562,3 @@
 * Modifying or creating new rate control algorithms can be done by creating a new child class of Wi-Fi remote
   station manager or modifying the existing ones.
 
-Note on the current implementation
-**********************************
-
-* 802.11g does not support 9 microseconds slot
-* PHY_RXSTART is not supported
-* 802.11e TXOP is not supported
-* 802.11n MIMO is not supported
-* 802.11n/ac MIMO is not supported
-* 802.11n/ac beamforming is not supported
-* PLCP preamble reception is not modeled
-* BSSBasicRateSet for 802.11b has been assumed to be 1-2 Mbit/s
-* BSSBasicRateSet for 802.11a/g has been assumed to be 6-12-24 Mbit/s
-* cases where RTS/CTS and ACK are transmitted using HT formats are not supported
-* Only ``ConstantRateWifiManager`` is supported by **802.11n** or **802.11ac**
diff -Naur ns-3.24.1/src/wifi/doc/source/wifi-references.rst ns-3.25/src/wifi/doc/source/wifi-references.rst
--- ns-3.24.1/src/wifi/doc/source/wifi-references.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/doc/source/wifi-references.rst	2016-03-23 21:36:53.000000000 -0700
@@ -2,11 +2,10 @@
 
 .. only:: html
 
-=================================
 References
-=================================
+==========
 
-.. [ieee80211] IEEE Std 802.11-2007 *Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications*
+.. [ieee80211] IEEE Std 802.11-2012, *Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications*
 
 .. [pei80211b] \G. Pei and Tom Henderson, `Validation of ns-3 802.11b PHY model <http://www.nsnam.org/~pei/80211b.pdf>`__ 
 
@@ -30,6 +29,19 @@
 
 .. [maguolo2008aarfcd] \ F. Maguolo, M. Lacage, and T. Turletti, *Efficient collision detection for auto rate fallback algorithm*, in IEEE Symposium on Computers and Communications, 2008
 
+.. [proakis2001] \ J. Proakis, Digital Communications, Wiley, 2001.
+
+.. [miller2003] \  L. E. Miller, “Validation of 802.11a/UWB Coexistence Simulation.” Technical Report, October 2003.  Available `online <http://www.antd.nist.gov/wctg/manet/docs/coexvalid_031017.pdf>`__
+
+.. [ferrari2004] \ G. Ferrari and G. Corazza, "Tight bounds and accurate approximations for DQPSK transmission bit error rate", Electronics Letters, 40(20):1284-85, September 2004.
+
+.. [pursley2009] \ M. Pursley and T. Royster, "Properties and performance of the IEEE 802.11b complementary code key signal sets," IEEE Transactions on Communications, 57(2);440-449, February 2009.
+
 .. [akella2007parf] \ A. Akella, G. Judd, S. Seshan, and P. Steenkiste, 'Self-management in chaotic wireless deployments', in Wireless Networks, Kluwer Academic Publishers, 2007, 13, 737-755.  `<http://www.cs.odu.edu/~nadeem/classes/cs795-WNS-S13/papers/enter-006.pdf>`__
 
 .. [chevillat2005aparf] \  Chevillat, P.; Jelitto, J., and Truong, H. L., 'Dynamic data rate and transmit power adjustment in IEEE 802.11 wireless LANs', in International Journal of Wireless Information Networks, Springer, 2005, 12, 123-145.  `<http://www.cs.mun.ca/~yzchen/papers/papers/rate_adaptation/80211_dynamic_rate_power_adjustment_chevillat_j2005.pdf>`__
+
+.. [hepner2015] \ C. Hepner, A. Witt, and R. Muenzner, "In depth analysis of the ns-3 physical layer abstraction for WLAN systems and evaluation of its influences on network simulation results", BW-CAR Symposium on Information and Communication Systems (SInCom) 2015.  `<http://sincom.informatik.hs-furtwangen.de/index.php?id=85>`__
+
+.. [baldo2010] \ N. Baldo et al., "Validation of the ns-3 IEEE 802.11 model using the EXTREME testbed", Proceedings of SIMUTools Conference, March 2010.
+
diff -Naur ns-3.24.1/src/wifi/doc/source/wifi-testing.rst ns-3.25/src/wifi/doc/source/wifi-testing.rst
--- ns-3.24.1/src/wifi/doc/source/wifi-testing.rst	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/doc/source/wifi-testing.rst	2016-03-23 21:36:53.000000000 -0700
@@ -5,3 +5,54 @@
 Testing Documentation
 +++++++++++++++++++++
 
+At present, most of the available documentation about testing and validation
+exists in publications, some of which are referenced below.
+
+Error model
+***********
+
+Validation results for the 802.11b error model are available in this
+`technical report <http://www.nsnam.org/~pei/80211b.pdf>`__
+
+Two clarifications on the results should be noted.  First, Figure 1-4
+of the above reference
+corresponds to the |ns3| NIST BER model.   In the program in the 
+Appendix of the paper (80211b.c), there are two constants used to generate
+the data.  The first, packet size, is set to 1024 bytes.  The second,
+"noise", is set to a value of 7 dB; this was empirically picked to align
+the curves the best with the reported data from the CMU testbed.  Although
+a value of 1.55 dB would correspond to the reported -99 dBm noise floor
+from the CMU paper, a noise figure of 7 dB results in the best fit with the
+CMU experimental data.  This default of 7 dB is the RxNoiseFigure in the
+``ns3::YansWifiPhy`` model.  Other values for noise figure will shift the 
+curves leftward or rightward but not change the slope. 
+
+The curves can be reproduced by running the ``wifi-clear-channel-cmu.cc`` 
+example program in the ``examples/wireless`` directory, and the figure produced
+(when GNU Scientific Library (GSL) is enabled) is reproduced below in 
+Figure :ref:`fig-clear-channel-80211b`.
+
+.. _fig-clear-channel-80211b:
+
+.. figure:: figures/clear-channel.*
+   :align: center
+
+   Clear channel (AWGN) error model for 802.11b
+
+Validation results for the 802.11 OFDM error model are available in this
+`technical report <https://www.nsnam.org/~pei/80211ofdm.pdf>`__.  The curves
+can be reproduced by running the ``ofdm-validation.cc`` example program
+in the ``examples/wireless`` directory, and the figure is reproduced below
+in Figure :ref:`fig-nist-frame-success-rate`.
+
+.. _fig-nist-frame-success-rate:
+
+.. figure:: figures/nist-frame-success-rate.*
+   :align: center
+
+   Frame error rate (NIST model) for OFDM Wi-Fi
+
+
+MAC validation
+**************
+Validation of the MAC layer has been performed in [baldo2010]_.
diff -Naur ns-3.24.1/src/wifi/doc/source/wifi-user.rst ns-3.25/src/wifi/doc/source/wifi-user.rst
--- ns-3.24.1/src/wifi/doc/source/wifi-user.rst	2015-09-28 20:17:55.000000000 -0700
+++ ns-3.25/src/wifi/doc/source/wifi-user.rst	2016-03-23 21:36:53.000000000 -0700
@@ -117,19 +117,26 @@
 
  wifiPhyHelper.Set ("ShortGuardEnabled", BooleanValue(true));
 
+In order to enable 802.11n/ac MIMO, the number of Rx antennas as well as the number of Tx antennas need to be configured.
+For example, this code enables 2x2 MIMO::
+
+ wifiPhyHelper.Set ("TxAntennas", UintegerValue (2));
+ wifiPhyHelper.Set ("RxAntennas", UintegerValue (2));
+
 Furthermore, 802.11n provides an optional mode (GreenField mode) to reduce preamble durations and which is only compatible with 802.11n devices. This mode is enabled as follows::
 
  wifiPhyHelper.Set ("GreenfieldEnabled",BooleanValue(true));
 
 802.11n PHY layer can support both 20 (default) or 40 MHz channel width, and 802.11ac PHY layer can use either 20, 40, 80 (default) or 160 MHz channel width. Since the channel width value is overwritten by ``WifiHelper::SetStandard``, this should be done post-install using ``Config::Set``::
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211ac);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("VHtMcs9"), "ControlMode", StringValue("VhtMcs0"));
-  VhtWifiMacHelper mac = VhtWifiMacHelper::Default ();
 
   //Install PHY and MAC
   Ssid ssid = Ssid ("ns3-wifi");
+  WifiMacHelper mac;
+
   mac.SetType ("ns3::StaWifiMac",
   "Ssid", SsidValue (ssid),
   "ActiveProbing", BooleanValue (false));
@@ -149,41 +156,28 @@
 WifiMacHelper
 =============
 
-The next step is to configure the MAC model.
-We use WifiMacHelper to accomplish this.
-WifiMacHelper takes care of both the MAC low model and MAC high model.
-A user must decide if 802.11/WMM-style QoS and/or 802.11n-style High throughput (HT) and/or 802.11ac-style Very High throughput (VHT) support is required.
-
-NqosWifiMacHelper and QosWifiMacHelper
-++++++++++++++++++++++++++++++++++++++
-
-The ``ns3::NqosWifiMacHelper`` and ``ns3::QosWifiMacHelper`` configure an
-object factory to create instances of a ``ns3::WifiMac``. They are used to
-configure MAC parameters like type of MAC.  
+The next step is to configure the MAC model. We use WifiMacHelper to accomplish this.
+WifiMacHelper takes care of both the MAC low model and MAC high model, and configures an object factory to create instances of a ``ns3::WifiMac``.
+It is used to configure MAC parameters like type of MAC, and to select whether 802.11/WMM-style QoS and/or 802.11n-style High throughput (HT) and/or 802.11ac-style Very High throughput (VHT) support are/is required.
 
-The former, ``ns3::NqosWifiMacHelper``, supports creation of MAC
-instances that do not have 802.11e/WMM-style QoS nor 802.11n-style High throughput (HT) nor 802.11ac-style Very High throughput (VHT) support enabled.
+By default, it creates an ad-hoc MAC instance that does not have 802.11e/WMM-style QoS nor 802.11n-style High throughput (HT) nor 802.11ac-style Very High throughput (VHT) support enabled.
 
-For example the following user code configures a non-QoS and non-HT MAC that
+For example the following user code configures a non-QoS and non-(V)HT MAC that
 will be a non-AP STA in an infrastructure network where the AP has
 SSID ``ns-3-ssid``::
 
-    NqosWifiMacHelper wifiMacHelper = NqosWifiMacHelper::Default ();
+    WifiMacHelper wifiMacHelper;
     Ssid ssid = Ssid ("ns-3-ssid");
     wifiMacHelper.SetType ("ns3::StaWifiMac",
                           "Ssid", SsidValue (ssid),
                           "ActiveProbing", BooleanValue (false));
 
-To create MAC instances with QoS support enabled,
-``ns3::QosWifiMacHelper`` is used in place of
-``ns3::NqosWifiMacHelper``.
-
-The following code shows an example use of ``ns3::QosWifiMacHelper`` to 
-create an AP with QoS enabled::
+The following code shows how to create an AP with QoS enabled::
 
-  QosWifiMacHelper wifiMacHelper = QosWifiMacHelper::Default ();
+  WifiMacHelper wifiMacHelper;
   wifiMacHelper.SetType ("ns3::ApWifiMac",
                          "Ssid", SsidValue (ssid),
+                         "QosSupported", BooleanValue (true),
                          "BeaconGeneration", BooleanValue (true),
                          "BeaconInterval", TimeValue (Seconds (2.5)));
 
@@ -198,41 +192,45 @@
 
 To create ad-hoc MAC instances, simply use ``ns3::AdhocWifiMac`` instead of ``ns3::StaWifiMac`` or ``ns3::ApWifiMac``.
 
-HtWifiMacHelper
-+++++++++++++++
+When selecting **802.11n** as the desired wifi standard, both 802.11e/WMM-style QoS and 802.11n-style High throughput (HT) support gets enabled.
+Similarly, When selecting **802.11ac** as the desired wifi standard, 802.11e/WMM-style QoS, 802.11n-style High throughput (HT) and 802.11ac-style Very High throughput (VHT) support gets enabled.
 
-The ``ns3::HtWifiMacHelper`` configures an
-object factory to create instances of a ``ns3::WifiMac``. It is used to
-supports creation of MAC instances that have 802.11n-style High throughput (HT) and QoS support enabled. In particular, this object can be also used to set:
-
-* an MSDU aggregator for a particular Access Category (AC) in order to use 
-  802.11n MSDU aggregation feature;
-* block ack parameters like threshold (number of packets for which block ack
-  mechanism should be used) and inactivity timeout.
+For MAC instances that have QoS support enabled, the ``ns3::WifiMacHelper`` can be also used to set:
 
-For example the following user code configures a HT MAC that
-will be a non-AP STA with QoS enabled, aggregation on AC_VO, and Block Ack on AC_BE, in an infrastructure network where the AP has
-SSID ``ns-3-ssid``::
+* block ack threshold (number of packets for which block ack mechanism should be used);
+* block ack inactivity timeout.
+
+For example the following user code configures a MAC that will be a non-AP STA with QoS enabled and a block ack threshold for AC_BE set to 2 packets,
+in an infrastructure network where the AP has SSID ``ns-3-ssid``::
 
-    HtWifiMacHelper wifiMacHelper = HtWifiMacHelper::Default ();
+    WifiMacHelper wifiMacHelper;
     Ssid ssid = Ssid ("ns-3-ssid");
     wifiMacHelper.SetType ("ns3::StaWifiMac",
                           "Ssid", SsidValue (ssid),
+                          "QosSupported", BooleanValue (true),
+                          "BE_BlockAckThreshold", UintegerValue (2),
                           "ActiveProbing", BooleanValue (false));
 
-    wifiMacHelper.SetMsduAggregatorForAc (AC_VO, "ns3::MsduStandardAggregator",
-                                          "MaxAmsduSize", UintegerValue (3839));
-    wifiMacHelper.SetBlockAckThresholdForAc (AC_BE, 10);
-    wifiMacHelper.SetBlockAckInactivityTimeoutForAc (AC_BE, 5);
-
-This object can be also used to set in the same way as ``ns3::QosWifiMacHelper``.
-
-VhtWifiMacHelper
-++++++++++++++++
-
-The ``ns3::VhtWifiMacHelper`` configures an
-object factory to create instances of a ``ns3::WifiMac``. It is used to
-supports creation of MAC instances that have 802.11ac-style Very High throughput (VHT) and QoS support enabled. This object is similar to ``HtWifiMacHelper``.
+For MAC instances that have 802.11n-style High throughput (HT) and/or 802.11ac-style Very High throughput (VHT) support enabled, the ``ns3::WifiMacHelper`` can be also used to set:
+
+* MSDU aggregation parameters for a particular Access Category (AC) in order to use 802.11n/ac A-MSDU feature;
+* MPDU aggregation parameters for a particular Access Category (AC) in order to use 802.11n/ac A-MPDU feature.
+
+By defaut, MSDU aggration feature is disabled for all ACs and MPDU aggregation is enabled for AC_VI and AC_BE, with a maximum aggregation size of 65535 bytes.
+
+For example the following user code configures a MAC that will be a non-AP STA with HT and QoS enabled, MPDU aggregation enabled for AC_VO with a maximum aggregation size of 65535 bytes, and MSDU aggregation enabled for AC_BE with a maximum aggregation size of 7935 bytes,
+in an infrastructure network where the AP has SSID ``ns-3-ssid``::
+
+    WifiHelper wifi;
+    wifi.SetStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+
+    WifiMacHelper wifiMacHelper;
+    Ssid ssid = Ssid ("ns-3-ssid");
+    wifiMacHelper.SetType ("ns3::StaWifiMac",
+                          "Ssid", SsidValue (ssid),
+                          "VO_MaxAmpduSize", UintegerValue (65535),
+                          "BE_MaxAmsduSize", UintegerValue (7935),
+                          "ActiveProbing", BooleanValue (false));
 
 WifiHelper
 ==========
@@ -240,7 +238,7 @@
 We're now ready to create WifiNetDevices. First, let's create
 a WifiHelper with default settings::
 
-  WifiHelper wifiHelper = WifiHelper::Default ();
+  WifiHelper wifiHelper;
 
 What does this do?  It sets the default wifi standard to **802.11a** and sets the RemoteStationManager to
 ``ns3::ArfWifiManager``.  You can change the RemoteStationManager by calling the
@@ -258,13 +256,14 @@
 The ``WifiHelper::SetStandard`` method set various default timing parameters as defined in the selected standard version, overwriting values that may exist or have been previously configured.
 In order to change parameters that are overwritten by ``WifiHelper::SetStandard``, this should be done post-install using ``Config::Set``::
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211n_2_4GHZ);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue("HtMcs7"), "ControlMode", StringValue("HtMcs0"));
-  HtWifiMacHelper mac = HtWifiMacHelper::Default ();
 
   //Install PHY and MAC
   Ssid ssid = Ssid ("ns3-wifi");
+
+  WifiMacHelper mac;
   mac.SetType ("ns3::StaWifiMac",
   "Ssid", SsidValue (ssid),
   "ActiveProbing", BooleanValue (false));
@@ -336,7 +335,7 @@
   wifiPhy.SetChannel (wifiChannel.Create ());
 
   // Add a non-QoS upper mac, and disable rate control (i.e. ConstantRateWifiManager)
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
@@ -385,7 +384,7 @@
   wifiPhy.SetChannel (wifiChannel.Create ());
 
   // Add a non-QoS upper mac, and disable rate control
-  NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
+  WifiMacHelper wifiMac;
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode",StringValue (phyMode),
                                 "ControlMode",StringValue (phyMode));
@@ -417,17 +416,3 @@
   mobility.Install (sta);
 
   // other set up (e.g. InternetStack, Application)
-
-Note on the current implementation
-**********************************
-
-* 802.11g supports a default of long slot time (20 microseconds)
-* PHY_RXSTART is not supported
-* 802.11e TXOP is not supported
-* 802.11n/ac MIMO is not supported
-* 802.11n/ac beamforming is not supported
-* PLCP preamble reception is not modeled
-* BSSBasicRateSet for 802.11b has been assumed to be 1-2 Mbit/s
-* BSSBasicRateSet for 802.11a/g has been assumed to be 6-12-24 Mbit/s
-* cases where RTS/CTS and ACK are transmitted using HT formats are not supported
-* Only ``ConstantRateWifiManager`` is supported by **802.11n** or **802.11ac**
diff -Naur ns-3.24.1/src/wifi/examples/ideal-wifi-manager-example.cc ns-3.25/src/wifi/examples/ideal-wifi-manager-example.cc
--- ns-3.24.1/src/wifi/examples/ideal-wifi-manager-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/examples/ideal-wifi-manager-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,388 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 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
+ *
+ * Author: Tom Henderson <tomhend@u.washington.edu>
+ */
+
+// Test the operation of IdealWifiManager as the SNR is varied, and create
+// a gnuplot output file for plotting
+//
+// By default, the 802.11b standard is plotted.  Several command line 
+// arguments can change the following options:
+// --standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)
+// --shortGuard (for 802.11n/ac)
+// --nss (for 802.11n/ac)
+// --channelWidth (for 802.11n/ac)
+// --broadcast instead of unicast (default is unicast)
+// --rtsThreshold (by default, value of 99999 disables it)
+
+#include <cmath>
+#include <sstream>
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/stats-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/propagation-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("IdealWifiManagerExample");
+
+// 290K @ 20 MHz
+const double NOISE_DBM_Hz = -174.0;
+double noiseDbm = NOISE_DBM_Hz;
+
+double g_intervalBytes = 0;
+uint64_t g_intervalRate = 0;
+
+void
+PacketRx (Ptr<const Packet> pkt, const Address &addr)
+{
+  NS_LOG_DEBUG ("Received size " << pkt->GetSize ());
+  g_intervalBytes += pkt->GetSize ();
+}
+
+void
+RateChange (uint64_t oldVal, uint64_t newVal)
+{
+  NS_LOG_DEBUG ("Change from " << oldVal << " to " << newVal);
+  g_intervalRate = newVal;
+}
+
+struct Step
+{
+  double stepSize;
+  double stepTime;
+};
+
+struct StandardInfo
+{
+  StandardInfo ()
+  {
+    m_name = "none";
+  }
+  StandardInfo (std::string name, enum WifiPhyStandard standard, uint32_t width, bool sgi, double snrLow, double snrHigh, double xMin, double xMax, double yMax)
+   : m_name (name),
+     m_standard (standard),
+     m_width (width),
+     m_snrLow (snrLow),
+     m_snrHigh (snrHigh),
+     m_xMin (xMin),
+     m_xMax (xMax),
+     m_yMax (yMax)
+    {}
+  std::string m_name;
+  enum WifiPhyStandard m_standard;
+  uint32_t m_width;
+  double m_snrLow;
+  double m_snrHigh;
+  double m_xMin; 
+  double m_xMax; 
+  double m_yMax; 
+};
+
+void
+ChangeSignalAndReportRate (Ptr<FixedRssLossModel> rssModel, struct Step step, double rss, Gnuplot2dDataset& rateDataset, Gnuplot2dDataset& actualDataset)
+{
+  NS_LOG_FUNCTION (rssModel << step.stepSize << step.stepTime << rss);
+  double snr = rss - noiseDbm;
+  rateDataset.Add (snr, g_intervalRate / 1000000.0);
+  // Calculate received rate since last interval
+  double currentRate = ((g_intervalBytes * 8)/step.stepTime) / 1e6; // Mb/s
+  actualDataset.Add (snr, currentRate);
+  rssModel->SetRss (rss - step.stepSize);
+  NS_LOG_INFO ("At time " << Simulator::Now ().As (Time::S) << "; observed rate " << currentRate << "; setting new power to " << rss - step.stepSize);
+  g_intervalBytes = 0;
+  Simulator::Schedule (Seconds (step.stepTime), &ChangeSignalAndReportRate, rssModel, step, (rss - step.stepSize), rateDataset, actualDataset);
+}
+
+int main (int argc, char *argv[])
+{
+  std::vector <StandardInfo> standards;
+  uint32_t steps;
+
+  uint32_t rtsThreshold = 999999;  // disabled even for large A-MPDU
+  double stepSize = 1; // dBm
+  double stepTime = 0.5; // seconds
+  uint32_t packetSize = 1024;  // bytes
+  int broadcast = 0;
+  int ap1_x = 0;
+  int ap1_y = 0;
+  int sta1_x = 5;
+  int sta1_y = 0;
+  uint16_t nss = 1;
+  bool shortGuardInterval = false;
+  uint32_t channelWidth = 20;
+  std::string standard ("802.11b");
+  StandardInfo selectedStandard;
+
+  CommandLine cmd;
+  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("stepSize", "Power between steps (dBm)", stepSize);
+  cmd.AddValue ("stepTime", "Time on each step (seconds)", stepTime);
+  cmd.AddValue ("broadcast", "Send broadcast instead of unicast", broadcast);
+  cmd.AddValue ("channelWidth", "Set channel width (valid only for 802.11n or ac)", channelWidth);
+  cmd.AddValue ("nss", "Set nss (valid only for 802.11n or ac)", nss);
+  cmd.AddValue ("shortGuard", "Set short guard interval (802.11n/ac)", shortGuardInterval);
+  cmd.AddValue ("standard", "Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)", standard);
+  cmd.Parse (argc, argv);
+
+  if (standard == "802.11b")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 22, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard);
+    }
+  else if (standard == "802.11a" || standard == "802.11g")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard);
+    }
+  else if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard);
+    }
+  else if (standard == "802.11ac")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40 && channelWidth != 80 && channelWidth != 160, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard);
+    }
+
+  std::string plotName = "ideal-wifi-manager-example-";
+  std::string dataName = "ideal-wifi-manager-example-";
+  plotName += standard;
+  dataName += standard;
+  if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac")
+    {
+      std::ostringstream oss;
+      std::string gi;
+      if (shortGuardInterval)
+        {
+          gi = "SGI";
+        }
+      else
+        {
+          gi = "LGI";
+        }
+      oss << "-" << channelWidth << "MHz-" << gi << "-" <<nss << "SS";
+      plotName += oss.str ();
+      dataName += oss.str ();
+    }
+  plotName += ".eps";
+  dataName += ".plt";
+  std::ofstream outfile (dataName.c_str ());
+  Gnuplot gnuplot = Gnuplot (plotName);
+
+  // As channel width increases, scale up plot's yRange value
+  uint32_t channelRateFactor = channelWidth / 20;
+  channelRateFactor = channelRateFactor * nss;
+
+  // The first number is channel width, second is minimum SNR, third is maximum
+  // SNR, fourth and fifth provide xrange axis limits, and sixth the yaxis
+  // maximum
+  standards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, false, -5, 11, -6, 15, 15));
+  standards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, false, -5, 27, -6, 30, 60));
+  standards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, channelWidth, shortGuardInterval, 3, 30, 0, 35, 80 * channelRateFactor));
+  standards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, channelWidth, shortGuardInterval, 3, 30, 0, 35, 80 * channelRateFactor));
+  standards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, channelWidth, shortGuardInterval, 5, 35, 0, 40, 120 * channelRateFactor));
+  standards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, false, 3, 27, 0, 30, 60));
+ 
+  for (std::vector<StandardInfo>::size_type i = 0; i != standards.size(); i++)
+    {
+      if (standard == standards[i].m_name)
+        {
+          selectedStandard = standards[i];
+        }
+    }
+  NS_ABORT_IF (selectedStandard.m_name == "none");
+  std::cout << "Testing " << selectedStandard.m_name << "..." << std::endl;
+  NS_ABORT_MSG_IF (selectedStandard.m_snrLow >= selectedStandard.m_snrHigh, "SNR values in wrong order"); 
+  steps = static_cast<uint32_t> (std::floor ((selectedStandard.m_snrHigh - selectedStandard.m_snrLow )/stepSize)) + 1;
+  NS_LOG_DEBUG ("Using " << steps << " steps for SNR range " << selectedStandard.m_snrLow << ":" << selectedStandard.m_snrHigh);
+  Ptr<Node> clientNode = CreateObject<Node> ();
+  Ptr<Node> serverNode = CreateObject<Node> ();
+
+  WifiHelper wifi;
+  wifi.SetStandard (selectedStandard.m_standard);
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  wifiPhy.Set ("RxGain", DoubleValue (0.0));
+  wifiPhy.Set ("RxNoiseFigure", DoubleValue (0.0));
+  wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0));
+  wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0));
+
+  Ptr<YansWifiChannel> wifiChannel = CreateObject<YansWifiChannel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  wifiChannel->SetPropagationDelayModel (delayModel);
+  Ptr<FixedRssLossModel> rssLossModel = CreateObject<FixedRssLossModel> ();
+  wifiChannel->SetPropagationLossModel (rssLossModel);
+  wifiPhy.SetChannel (wifiChannel);
+
+  wifi.SetRemoteStationManager ("ns3::IdealWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold));
+
+  // Use Adhoc so we don't get into association issues
+  NetDeviceContainer serverDevice;
+  NetDeviceContainer clientDevice;
+
+  WifiMacHelper wifiMac;
+  wifiMac.SetType ("ns3::AdhocWifiMac");
+  serverDevice = wifi.Install (wifiPhy, wifiMac, serverNode);
+  clientDevice = wifi.Install (wifiPhy, wifiMac, clientNode);
+
+  Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::IdealWifiManager/Rate", MakeCallback(&RateChange)); 
+  // Configure the mobility.
+  MobilityHelper mobility;
+ Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  //Initial position of AP and STA
+  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
+  NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0));
+  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
+  NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (clientNode);
+  mobility.Install (serverNode);
+
+  Gnuplot2dDataset rateDataset (selectedStandard.m_name + std::string ("-rate selected"));
+  Gnuplot2dDataset actualDataset (selectedStandard.m_name + std::string ("-observed"));
+  struct Step step;
+  step.stepSize = stepSize;
+  step.stepTime = stepTime;
+  
+  // Perform post-install configuration from defaults for channel width,
+  // guard interval, and nss, if necessary
+  // Obtain pointer to the WifiPhy
+  Ptr<NetDevice> ndClient = clientDevice.Get (0);
+  Ptr<NetDevice> ndServer = serverDevice.Get (0);
+  Ptr<WifiNetDevice> wndClient = ndClient->GetObject<WifiNetDevice> ();
+  Ptr<WifiNetDevice> wndServer = ndServer->GetObject<WifiNetDevice> ();
+  Ptr<WifiPhy> wifiPhyPtrClient = wndClient->GetPhy ();
+  Ptr<WifiPhy> wifiPhyPtrServer = wndServer->GetPhy ();
+  wifiPhyPtrClient->SetNumberOfTransmitAntennas (nss);
+  wifiPhyPtrClient->SetNumberOfReceiveAntennas (nss);
+  wifiPhyPtrServer->SetNumberOfTransmitAntennas (nss);
+  wifiPhyPtrServer->SetNumberOfReceiveAntennas (nss);
+  // Only set the channel width and guard interval for HT and VHT modes
+  if (selectedStandard.m_name == "802.11n-5GHz" || 
+      selectedStandard.m_name == "802.11n-2.4GHz" ||
+      selectedStandard.m_name == "802.11ac")
+    {
+      wifiPhyPtrClient->SetChannelWidth (selectedStandard.m_width);
+      wifiPhyPtrServer->SetChannelWidth (selectedStandard.m_width);
+      wifiPhyPtrClient->SetGuardInterval (shortGuardInterval);
+      wifiPhyPtrServer->SetGuardInterval (shortGuardInterval);
+    }
+  NS_LOG_DEBUG ("Channel width " << wifiPhyPtrClient->GetChannelWidth () << " noiseDbm " << noiseDbm);
+  NS_LOG_DEBUG ("NSS " << wifiPhyPtrClient->GetSupportedTxSpatialStreams ());
+
+  // Configure signal and noise, and schedule first iteration
+  noiseDbm += 10 * log10 (selectedStandard.m_width * 1000000);
+  double rssCurrent = (selectedStandard.m_snrHigh + noiseDbm);
+  rssLossModel->SetRss (rssCurrent);
+  NS_LOG_INFO ("Setting initial Rss to " << rssCurrent);
+  //Move the STA by stepsSize meters every stepTime seconds
+  Simulator::Schedule (Seconds (0.5 + stepTime), &ChangeSignalAndReportRate, rssLossModel, step, rssCurrent, rateDataset, actualDataset);
+
+  PacketSocketHelper packetSocketHelper;
+  packetSocketHelper.Install (serverNode);
+  packetSocketHelper.Install (clientNode);
+  
+  PacketSocketAddress socketAddr;
+  socketAddr.SetSingleDevice (serverDevice.Get (0)->GetIfIndex ());
+  if (broadcast)
+    {
+      socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetBroadcast ());
+    }
+  else
+    {
+      socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetAddress ());
+    }
+  // Arbitrary protocol type.
+  // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing
+  //       The only mux/demux is based on the protocol field
+  socketAddr.SetProtocol (1);
+
+  Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
+  client->SetRemote (socketAddr);
+  client->SetStartTime (Seconds (0.5));  // allow simulation warmup
+  client->SetAttribute ("MaxPackets", UintegerValue (0));  // unlimited
+  client->SetAttribute ("PacketSize", UintegerValue (packetSize));
+
+  // Set a maximum rate 10% above the yMax specified for the selected standard 
+  double rate = selectedStandard.m_yMax * 1e6 * 1.10;
+  double clientInterval = static_cast<double> (packetSize) * 8 / rate;
+  NS_LOG_DEBUG ("Setting interval to " << clientInterval << " sec for rate of " << rate << " bits/sec");
+
+  client->SetAttribute ("Interval", TimeValue (Seconds (clientInterval)));
+  clientNode->AddApplication (client);
+
+  Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
+  server->SetLocal (socketAddr);
+  server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketRx));
+  serverNode->AddApplication (server);
+
+  Simulator::Stop (Seconds ((steps + 1) * stepTime));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  gnuplot.AddDataset (rateDataset);
+  gnuplot.AddDataset (actualDataset);
+
+  std::ostringstream xMinStr, xMaxStr, yMaxStr;
+  std::string xRangeStr ("set xrange [");
+  xMinStr << selectedStandard.m_xMin;
+  xRangeStr.append (xMinStr.str ());
+  xRangeStr.append (":");
+  xMaxStr << selectedStandard.m_xMax;
+  xRangeStr.append (xMaxStr.str ());
+  xRangeStr.append ("]");
+  std::string yRangeStr ("set yrange [0:");
+  yMaxStr << selectedStandard.m_yMax;
+  yRangeStr.append (yMaxStr.str ());
+  yRangeStr.append ("]");
+
+  std::ostringstream widthStrStr;
+  std::ostringstream nssStrStr;
+  std::string title ("Wi-Fi ideal rate control: ");
+  title.append (standard);
+  title.append (" channel width: ");
+  widthStrStr << selectedStandard.m_width;
+  title.append (widthStrStr.str ());
+  title.append (" MHz nss: ");
+  nssStrStr << nss;
+  title.append (nssStrStr.str ());
+  if (shortGuardInterval == true)
+    {
+      title.append (" shortGuard: true");
+    }
+
+  gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  gnuplot.SetLegend ("SNR (dB)", "Rate (Mb/s)");
+  gnuplot.SetTitle (title);
+  gnuplot.SetExtra (xRangeStr);
+  gnuplot.AppendExtra (yRangeStr);
+  gnuplot.AppendExtra ("set key top left");
+  gnuplot.GenerateOutput (outfile);
+  outfile.close ();
+
+  return 0;
+}
+
diff -Naur ns-3.24.1/src/wifi/examples/minstrel-ht-wifi-manager-example.cc ns-3.25/src/wifi/examples/minstrel-ht-wifi-manager-example.cc
--- ns-3.24.1/src/wifi/examples/minstrel-ht-wifi-manager-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/examples/minstrel-ht-wifi-manager-example.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,372 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 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
+ *
+ * Author: Tom Henderson <tomhend@u.washington.edu>
+ *         Matías Richart <mrichart@fing.edu.uy>
+ */
+
+// Test the operation of IdealWifiManager as the SNR is varied, and create
+// a gnuplot output file for plotting
+//
+// By default, the 802.11b standard is plotted.  Several command line
+// arguments can change the following options:
+//    --rtsThreshold:     RTS threshold [65535]
+//    --BE_MaxAmpduSize:  BE Mac A-MPDU size [65535]
+//    --stepSize:         Power between steps (dBm) [1]
+//    --stepTime:         Time on each step (seconds) [1]
+//    --broadcast:        Send broadcast instead of unicast [0]
+//    --channelWidth:     Set channel width (valid only for 802.11n or ac) [20]
+//    --standard:         Set standard (802.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11ac, and others...) [802.11b]
+
+#include "ns3/core-module.h"
+#include "ns3/network-module.h"
+#include "ns3/wifi-module.h"
+#include "ns3/stats-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/propagation-module.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE ("MinstrelHtWifiManagerExample");
+
+// 20 MHz, 290K
+const double NOISE_DBM_Hz = -174.0;
+double noiseDbm = NOISE_DBM_Hz;
+
+double g_intervalBytes = 0;
+uint64_t g_intervalRate = 0;
+
+void
+PacketRx (Ptr<const Packet> pkt, const Address &addr)
+{
+  NS_LOG_DEBUG ("Received size " << pkt->GetSize ());
+  g_intervalBytes += pkt->GetSize ();
+}
+
+void
+RateChange (uint64_t newVal, Mac48Address dest)
+{
+  NS_LOG_DEBUG ("Change to " << newVal);
+  g_intervalRate = newVal;
+}
+
+struct Step
+{
+  double stepSize;
+  double stepTime;
+};
+
+struct StandardInfo
+{
+  StandardInfo ()
+  {
+    m_name = "none";
+  }
+  StandardInfo (std::string name, enum WifiPhyStandard standard, uint32_t width, bool sgi, double snrLow, double snrHigh, double xMin, double xMax, double yMax)
+    : m_name (name),
+      m_standard (standard),
+      m_width (width),
+      m_sgi (sgi),
+      m_snrLow (snrLow),
+      m_snrHigh (snrHigh),
+      m_xMin (xMin),
+      m_xMax (xMax),
+      m_yMax (yMax)
+  {
+  }
+  std::string m_name;
+  enum WifiPhyStandard m_standard;
+  uint32_t m_width;
+  bool m_sgi;
+  double m_snrLow;
+  double m_snrHigh;
+  double m_xMin;
+  double m_xMax;
+  double m_yMax;
+};
+
+void
+ChangeSignalAndReportRate (Ptr<FixedRssLossModel> rssModel, struct Step step, double rss, Gnuplot2dDataset& rateDataset, Gnuplot2dDataset& actualDataset)
+{
+  NS_LOG_FUNCTION (rssModel << step.stepSize << step.stepTime << rss);
+  double snr = rss - noiseDbm; //dB
+  rateDataset.Add (snr, g_intervalRate / 1000000.0);
+  // Calculate received rate since last interval
+  double currentRate = ((g_intervalBytes * 8) / step.stepTime) / 1e6; // Mb/s
+  actualDataset.Add (snr, currentRate);
+  rssModel->SetRss (rss - step.stepSize);
+  NS_LOG_INFO ("At time " << Simulator::Now ().As (Time::S) << "; observed rate " << currentRate << "; setting new power to " << rss - step.stepSize);
+  g_intervalBytes = 0;
+  Simulator::Schedule (Seconds (step.stepTime), &ChangeSignalAndReportRate, rssModel, step, (rss - step.stepSize), rateDataset, actualDataset);
+}
+
+int main (int argc, char *argv[])
+{
+  std::vector <StandardInfo> standards;
+  int steps;
+  uint32_t rtsThreshold = 65535;
+  uint32_t BE_MaxAmpduSize = 65535;
+  double stepSize = 1; // dBm
+  double stepTime = 1; // seconds
+  uint32_t packetSize = 1024;  // bytes
+  int broadcast = 0;
+  int ap1_x = 0;
+  int ap1_y = 0;
+  int sta1_x = 5;
+  int sta1_y = 0;
+  uint16_t nss = 1;
+  bool shortGuardInterval = false;
+  uint32_t channelWidth = 20;
+  std::string standard ("802.11b");
+  StandardInfo selectedStandard;
+  std::string outfileName ("minstrel-ht-");
+
+  CommandLine cmd;
+  cmd.AddValue ("rtsThreshold", "RTS threshold", rtsThreshold);
+  cmd.AddValue ("BE_MaxAmpduSize", "BE Max A-MPDU size", BE_MaxAmpduSize);
+  cmd.AddValue ("stepSize", "Power between steps (dBm)", stepSize);
+  cmd.AddValue ("stepTime", "Time on each step (seconds)", stepTime);
+  cmd.AddValue ("broadcast", "Send broadcast instead of unicast", broadcast);
+  cmd.AddValue ("channelWidth", "Set channel width (valid only for 802.11n or ac)", channelWidth);
+  cmd.AddValue ("shortGuard", "Set short guard interval (802.11n/ac)", shortGuardInterval);
+  cmd.AddValue ("nss", "Set nss (valid only for 802.11n or ac)", nss);
+  cmd.AddValue ("standard", "Set standard (02.11a, 802.11b, 802.11g, 802.11n-5GHz, 802.11n-2.4GHz, 802.11ac, 802.11-holland, 802.11-10MHz, 802.11-5MHz)", standard);
+  cmd.Parse (argc, argv);
+  
+  if (standard == "802.11b")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 22, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard);
+    }
+  else if (standard == "802.11a" || standard == "802.11g")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss != 1, "Invalid nss for standard " << standard);
+    }
+  else if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard);
+    }
+  else if (standard == "802.11ac")
+    {
+      NS_ABORT_MSG_IF (channelWidth != 20 && channelWidth != 40 && channelWidth != 80 && channelWidth != 160, "Invalid channel width for standard " << standard);
+      NS_ABORT_MSG_IF (nss == 0 || nss > 4, "Invalid nss " << nss << " for standard " << standard);
+    }
+
+  outfileName.append (standard);
+  if (standard == "802.11n-5GHz" || standard == "802.11n-2.4GHz" || standard == "802.11ac")
+    {
+      std::ostringstream oss;
+      std::string gi;
+      if (shortGuardInterval)
+        {
+          gi = "SGI";
+        }
+      else
+        {
+          gi = "LGI";
+        }
+      oss << "-" << channelWidth << "MHz-" << gi << "-" <<nss << "SS";
+      outfileName += oss.str ();
+    }
+  std::string tmp = outfileName + ".plt";
+  std::ofstream outfile (tmp.c_str ());
+  tmp = outfileName + ".eps";
+  Gnuplot gnuplot = Gnuplot (tmp.c_str ());
+
+  // The first number is channel width, second is minimum SNR, third is maximum
+  // SNR, fourth and fifth provide xrange axis limits, and sixth the yaxis
+  // maximum
+  standards.push_back (StandardInfo ("802.11a", WIFI_PHY_STANDARD_80211a, 20, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11b", WIFI_PHY_STANDARD_80211b, 22, false, -5, 11, -6, 15, 15));
+  standards.push_back (StandardInfo ("802.11g", WIFI_PHY_STANDARD_80211g, 20, false, -5, 27, -6, 30, 80));
+  standards.push_back (StandardInfo ("802.11n-5GHz", WIFI_PHY_STANDARD_80211n_5GHZ, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80));
+  standards.push_back (StandardInfo ("802.11n-2.4GHz", WIFI_PHY_STANDARD_80211n_2_4GHZ, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80));
+  standards.push_back (StandardInfo ("802.11ac", WIFI_PHY_STANDARD_80211ac, channelWidth, shortGuardInterval, 5, 30, 0, 35, 80));
+  standards.push_back (StandardInfo ("802.11-holland", WIFI_PHY_STANDARD_holland, 20, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11-10MHz", WIFI_PHY_STANDARD_80211_10MHZ, 10, false, 3, 27, 0, 30, 60));
+  standards.push_back (StandardInfo ("802.11-5MHz", WIFI_PHY_STANDARD_80211_5MHZ, 5, false, 3, 27, 0, 30, 60));
+
+  for (std::vector<StandardInfo>::size_type i = 0; i != standards.size (); i++)
+    {
+      if (standard == standards[i].m_name)
+        {
+          selectedStandard = standards[i];
+        }
+    }
+  NS_ABORT_IF (selectedStandard.m_name == "none");
+  std::cout << "Testing " << selectedStandard.m_name << "..." << std::endl;
+  NS_ABORT_MSG_IF (selectedStandard.m_snrLow >= selectedStandard.m_snrHigh, "SNR values in wrong order");
+  steps = std::abs ((int) (selectedStandard.m_snrHigh - selectedStandard.m_snrLow ) / stepSize) + 1;
+  Ptr<Node> clientNode = CreateObject<Node> ();
+  Ptr<Node> serverNode = CreateObject<Node> ();
+
+  WifiHelper wifi;
+  wifi.SetStandard (selectedStandard.m_standard);
+  YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
+  wifiPhy.Set ("RxGain", DoubleValue (0.0));
+  wifiPhy.Set ("RxNoiseFigure", DoubleValue (0.0));
+  wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0));
+  wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0));
+
+  Ptr<YansWifiChannel> wifiChannel = CreateObject<YansWifiChannel> ();
+  Ptr<ConstantSpeedPropagationDelayModel> delayModel = CreateObject<ConstantSpeedPropagationDelayModel> ();
+  wifiChannel->SetPropagationDelayModel (delayModel);
+  Ptr<FixedRssLossModel> rssLossModel = CreateObject<FixedRssLossModel> ();
+  wifiChannel->SetPropagationLossModel (rssLossModel);
+  wifiPhy.SetChannel (wifiChannel);
+  wifiPhy.Set ("ShortGuardEnabled", BooleanValue (selectedStandard.m_sgi));
+
+  wifi.SetRemoteStationManager ("ns3::MinstrelHtWifiManager", "RtsCtsThreshold", UintegerValue (rtsThreshold), "PrintStats", BooleanValue (true));
+
+  // Use Adhoc so we don't get into association issues
+  NetDeviceContainer serverDevice;
+  NetDeviceContainer clientDevice;
+
+  WifiMacHelper wifiMac;
+  wifiMac.SetType ("ns3::AdhocWifiMac",
+                   "BE_MaxAmpduSize", UintegerValue (BE_MaxAmpduSize));
+  serverDevice = wifi.Install (wifiPhy, wifiMac, serverNode);
+  clientDevice = wifi.Install (wifiPhy, wifiMac, clientNode);
+
+  Config::ConnectWithoutContext ("/NodeList/0/DeviceList/*/$ns3::WifiNetDevice/RemoteStationManager/$ns3::MinstrelHtWifiManager/RateChange", MakeCallback (&RateChange));
+
+  // Configure the mobility.
+  MobilityHelper mobility;
+  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
+  //Initial position of AP and STA
+  positionAlloc->Add (Vector (ap1_x, ap1_y, 0.0));
+  NS_LOG_INFO ("Setting initial AP position to " << Vector (ap1_x, ap1_y, 0.0));
+  positionAlloc->Add (Vector (sta1_x, sta1_y, 0.0));
+  NS_LOG_INFO ("Setting initial STA position to " << Vector (sta1_x, sta1_y, 0.0));
+  mobility.SetPositionAllocator (positionAlloc);
+  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
+  mobility.Install (clientNode);
+  mobility.Install (serverNode);
+
+  Gnuplot2dDataset rateDataset (selectedStandard.m_name + std::string ("-rate selected"));
+  Gnuplot2dDataset actualDataset (selectedStandard.m_name + std::string ("-observed"));
+  struct Step step;
+  step.stepSize = stepSize;
+  step.stepTime = stepTime;
+
+  // Set channel width
+  // Adjust noise for channel width
+  // Obtain pointer to the WifiPhy
+  Ptr<NetDevice> ndClient = clientDevice.Get (0);
+  Ptr<WifiNetDevice> wndClient = ndClient->GetObject<WifiNetDevice> ();
+  Ptr<WifiPhy> wifiPhyPtrClient = wndClient->GetPhy ();
+  wifiPhyPtrClient->SetChannelWidth (selectedStandard.m_width);
+  wifiPhyPtrClient->SetNumberOfTransmitAntennas (nss);
+  wifiPhyPtrClient->SetNumberOfReceiveAntennas (nss);
+  noiseDbm += 10 * log10 (selectedStandard.m_width * 1000000);
+  NS_LOG_DEBUG ("Channel width " << wifiPhyPtrClient->GetChannelWidth () << " noiseDbm " << noiseDbm);
+
+  // Set channel width
+  // Adjust noise for channel width
+  // Obtain pointer to the WifiPhy
+  Ptr<NetDevice> ndServer = serverDevice.Get (0);
+  Ptr<WifiNetDevice> wndServer = ndServer->GetObject<WifiNetDevice> ();
+  Ptr<WifiPhy> wifiPhyPtrServer = wndServer->GetPhy ();
+  wifiPhyPtrServer->SetChannelWidth (selectedStandard.m_width);
+  wifiPhyPtrServer->SetNumberOfTransmitAntennas (nss);
+  wifiPhyPtrServer->SetNumberOfReceiveAntennas (nss);
+
+  double rssCurrent = (selectedStandard.m_snrHigh + noiseDbm);
+  rssLossModel->SetRss (rssCurrent);
+  NS_LOG_INFO ("Setting initial Rss to " << rssCurrent);
+  //Move the STA by stepsSize meters every stepTime seconds
+  Simulator::Schedule (Seconds (0.5 + stepTime), &ChangeSignalAndReportRate, rssLossModel, step, rssCurrent, rateDataset, actualDataset);
+
+  PacketSocketHelper packetSocketHelper;
+  packetSocketHelper.Install (serverNode);
+  packetSocketHelper.Install (clientNode);
+
+  PacketSocketAddress socketAddr;
+  socketAddr.SetSingleDevice (serverDevice.Get (0)->GetIfIndex ());
+  if (broadcast)
+    {
+      socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetBroadcast ());
+    }
+  else
+    {
+      socketAddr.SetPhysicalAddress (serverDevice.Get (0)->GetAddress ());
+    }
+  // Arbitrary protocol type.
+  // Note: PacketSocket doesn't have any L4 multiplexing or demultiplexing
+  //       The only mux/demux is based on the protocol field
+  socketAddr.SetProtocol (1);
+
+  Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
+  client->SetRemote (socketAddr);
+  client->SetStartTime (Seconds (0.5));
+  client->SetAttribute ("MaxPackets", UintegerValue (0));
+  client->SetAttribute ("PacketSize", UintegerValue (packetSize));
+  client->SetAttribute ("Interval", TimeValue (MicroSeconds (20)));
+  clientNode->AddApplication (client);
+
+  Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
+  server->SetLocal (socketAddr);
+  server->TraceConnectWithoutContext ("Rx", MakeCallback (&PacketRx));
+  serverNode->AddApplication (server);
+
+  Simulator::Stop (Seconds ((steps + 1) * stepTime));
+  Simulator::Run ();
+  Simulator::Destroy ();
+
+  gnuplot.AddDataset (rateDataset);
+  gnuplot.AddDataset (actualDataset);
+
+  std::ostringstream xMinStr, xMaxStr, yMaxStr;
+  std::string xRangeStr ("set xrange [");
+  xMinStr << selectedStandard.m_xMin;
+  xRangeStr.append (xMinStr.str ());
+  xRangeStr.append (":");
+  xMaxStr << selectedStandard.m_xMax;
+  xRangeStr.append (xMaxStr.str ());
+  xRangeStr.append ("]");
+  std::string yRangeStr ("set yrange [0:");
+  yMaxStr << selectedStandard.m_yMax;
+  yRangeStr.append (yMaxStr.str ());
+  yRangeStr.append ("]");
+  
+  std::ostringstream widthStrStr;
+  std::ostringstream nssStrStr;
+  std::string title ("Wi-Fi Minstrel ht rate control: ");
+  title.append (standard);
+  title.append (" channel width: ");
+  widthStrStr << selectedStandard.m_width;
+  title.append (widthStrStr.str ());
+  title.append (" MHz nss: ");
+  nssStrStr << nss;
+  title.append (nssStrStr.str ());
+  if (shortGuardInterval == true)
+    {
+      title.append (" shortGuard: true");
+    }
+
+  gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
+  gnuplot.SetLegend ("SNR (dB)", "Rate (Mb/s)");
+  gnuplot.SetTitle (title);
+  gnuplot.SetExtra  ("set xrange [0:50]");
+  gnuplot.SetExtra  ("set yrange [0:150]");
+  gnuplot.SetExtra  ("set key reverse left Left");
+  gnuplot.GenerateOutput (outfile);
+  outfile.close ();
+  return 0;
+}
diff -Naur ns-3.24.1/src/wifi/examples/test-interference-helper.cc ns-3.25/src/wifi/examples/test-interference-helper.cc
--- ns-3.24.1/src/wifi/examples/test-interference-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/examples/test-interference-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -106,7 +106,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelA);
   txVector.SetMode (WifiMode (m_input.txModeA));
-  m_txA->SendPacket (p, txVector, m_input.preamble, 0, 0);
+  m_txA->SendPacket (p, txVector, m_input.preamble);
 }
 
 void
@@ -116,7 +116,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelB);
   txVector.SetMode (WifiMode (m_input.txModeB));
-  m_txB->SendPacket (p, txVector, m_input.preamble, 0, 0);
+  m_txB->SendPacket (p, txVector, m_input.preamble);
 }
 
 InterferenceExperiment::InterferenceExperiment ()
diff -Naur ns-3.24.1/src/wifi/examples/wifi-phy-test.cc ns-3.25/src/wifi/examples/wifi-phy-test.cc
--- ns-3.24.1/src/wifi/examples/wifi-phy-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/examples/wifi-phy-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -74,7 +74,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevel);
   txVector.SetMode (mode);
-  m_tx->SendPacket (p, txVector, WIFI_PREAMBLE_LONG, 0, 0);
+  m_tx->SendPacket (p, txVector, WIFI_PREAMBLE_LONG);
 }
 
 void
@@ -182,7 +182,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelA);
   txVector.SetMode (WifiMode (m_input.txModeA));
-  m_txA->SendPacket (p, txVector, WIFI_PREAMBLE_LONG, 0, 0);
+  m_txA->SendPacket (p, txVector, WIFI_PREAMBLE_LONG);
 }
 
 void
@@ -193,7 +193,7 @@
   WifiTxVector txVector;
   txVector.SetTxPowerLevel (m_input.txPowerLevelB);
   txVector.SetMode (WifiMode (m_input.txModeB));
-  m_txB->SendPacket (p, txVector, WIFI_PREAMBLE_LONG, 0, 0);
+  m_txB->SendPacket (p, txVector, WIFI_PREAMBLE_LONG);
 }
 
 void
diff -Naur ns-3.24.1/src/wifi/examples/wscript ns-3.25/src/wifi/examples/wscript
--- ns-3.24.1/src/wifi/examples/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/examples/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -11,3 +11,11 @@
     obj = bld.create_ns3_program('test-interference-helper',
         ['core', 'mobility', 'network', 'wifi'])
     obj.source = 'test-interference-helper.cc'
+
+    obj = bld.create_ns3_program('ideal-wifi-manager-example',
+        ['core', 'network', 'wifi', 'stats', 'mobility', 'propagation'])
+    obj.source = 'ideal-wifi-manager-example.cc'
+
+    obj = bld.create_ns3_program('minstrel-ht-wifi-manager-example',
+        ['core', 'network', 'wifi', 'stats', 'mobility', 'propagation'])
+    obj.source = 'minstrel-ht-wifi-manager-example.cc'
diff -Naur ns-3.24.1/src/wifi/helper/athstats-helper.cc ns-3.25/src/wifi/helper/athstats-helper.cc
--- ns-3.24.1/src/wifi/helper/athstats-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/athstats-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -259,7 +259,7 @@
 void
 AthstatsWifiTraceSink::WriteStats ()
 {
-  NS_ABORT_MSG_UNLESS (this, "function called with null this pointer, now=" << Now () );
+  NS_LOG_FUNCTION (this);
   //The comments below refer to how each value maps to madwifi's athstats
   //I know C strings are ugly but that's the quickest way to use exactly the same format as in madwifi
   char str[200];
diff -Naur ns-3.24.1/src/wifi/helper/ht-wifi-mac-helper.h ns-3.25/src/wifi/helper/ht-wifi-mac-helper.h
--- ns-3.24.1/src/wifi/helper/ht-wifi-mac-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/ht-wifi-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -27,6 +27,10 @@
 #include "qos-wifi-mac-helper.h"
 #include <map>
 
+/**
+ * (Deprecated) ns3::HtWifiMacHelper declaration.
+ */
+
 namespace ns3 {
 
 /**
diff -Naur ns-3.24.1/src/wifi/helper/nqos-wifi-mac-helper.cc ns-3.25/src/wifi/helper/nqos-wifi-mac-helper.cc
--- ns-3.24.1/src/wifi/helper/nqos-wifi-mac-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/nqos-wifi-mac-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -55,7 +55,10 @@
                             std::string n4, const AttributeValue &v4,
                             std::string n5, const AttributeValue &v5,
                             std::string n6, const AttributeValue &v6,
-                            std::string n7, const AttributeValue &v7)
+                            std::string n7, const AttributeValue &v7,
+                            std::string n8, const AttributeValue &v8,
+                            std::string n9, const AttributeValue &v9,
+                            std::string n10, const AttributeValue &v10)
 {
   m_mac.SetTypeId (type);
   m_mac.Set (n0, v0);
@@ -66,6 +69,9 @@
   m_mac.Set (n5, v5);
   m_mac.Set (n6, v6);
   m_mac.Set (n7, v7);
+  m_mac.Set (n8, v8);
+  m_mac.Set (n9, v9);
+  m_mac.Set (n10, v10);
 }
 
 Ptr<WifiMac>
diff -Naur ns-3.24.1/src/wifi/helper/nqos-wifi-mac-helper.h ns-3.25/src/wifi/helper/nqos-wifi-mac-helper.h
--- ns-3.24.1/src/wifi/helper/nqos-wifi-mac-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/nqos-wifi-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,6 +23,10 @@
 
 #include "wifi-helper.h"
 
+/**
+ * (Deprecated) ns3::NonQosWifiMacHelper declaration.
+ */
+
 namespace ns3 {
 
 /**
@@ -68,6 +72,12 @@
    * \param v6 the value of the attribute to set
    * \param n7 the name of the attribute to set
    * \param v7 the value of the attribute to set
+   * \param n8 the name of the attribute to set
+   * \param v8 the value of the attribute to set
+   * \param n9 the name of the attribute to set
+   * \param v9 the value of the attribute to set
+   * \param n10 the name of the attribute to set
+   * \param v10 the value of the attribute to set
    *
    * All the attributes specified in this method should exist
    * in the requested mac.
@@ -80,7 +90,10 @@
                         std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
                         std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
                         std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue (),
+                        std::string n8 = "", const AttributeValue &v8 = EmptyAttributeValue (),
+                        std::string n9 = "", const AttributeValue &v9 = EmptyAttributeValue (),
+                        std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue ());
 protected:
   ObjectFactory m_mac;
 private:
diff -Naur ns-3.24.1/src/wifi/helper/qos-wifi-mac-helper.cc ns-3.25/src/wifi/helper/qos-wifi-mac-helper.cc
--- ns-3.24.1/src/wifi/helper/qos-wifi-mac-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/qos-wifi-mac-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -20,12 +20,12 @@
 
 #include "qos-wifi-mac-helper.h"
 #include "ns3/msdu-aggregator.h"
+#include "ns3/mpdu-aggregator.h"
 #include "ns3/wifi-mac.h"
 #include "ns3/edca-txop-n.h"
 #include "ns3/pointer.h"
 #include "ns3/boolean.h"
 #include "ns3/uinteger.h"
-#include "ns3/mpdu-aggregator.h"
 #include "ns3/mac-low.h"
 
 namespace ns3 {
@@ -61,7 +61,10 @@
                            std::string n4, const AttributeValue &v4,
                            std::string n5, const AttributeValue &v5,
                            std::string n6, const AttributeValue &v6,
-                           std::string n7, const AttributeValue &v7)
+                           std::string n7, const AttributeValue &v7,
+                           std::string n8, const AttributeValue &v8,
+                           std::string n9, const AttributeValue &v9,
+                           std::string n10, const AttributeValue &v10)
 {
   m_mac.SetTypeId (type);
   m_mac.Set (n0, v0);
@@ -72,6 +75,9 @@
   m_mac.Set (n5, v5);
   m_mac.Set (n6, v6);
   m_mac.Set (n7, v7);
+  m_mac.Set (n8, v8);
+  m_mac.Set (n9, v9);
+  m_mac.Set (n10, v10);
 }
 
 void
@@ -81,8 +87,8 @@
                                           std::string n2, const AttributeValue &v2,
                                           std::string n3, const AttributeValue &v3)
 {
-  std::map<AcIndex, ObjectFactory>::iterator it = m_aggregators.find (ac);
-  if (it != m_aggregators.end ())
+  std::map<AcIndex, ObjectFactory>::iterator it = m_msduAggregators.find (ac);
+  if (it != m_msduAggregators.end ())
     {
       it->second.SetTypeId (type);
       it->second.Set (n0, v0);
@@ -98,23 +104,36 @@
       factory.Set (n1, v1);
       factory.Set (n2, v2);
       factory.Set (n3, v3);
-      m_aggregators.insert (std::make_pair (ac, factory));
+      m_msduAggregators.insert (std::make_pair (ac, factory));
     }
 }
 
 void
-QosWifiMacHelper::SetMpduAggregatorForAc (enum AcIndex ac, std::string name,
+QosWifiMacHelper::SetMpduAggregatorForAc (enum AcIndex ac, std::string type,
                                           std::string n0, const AttributeValue &v0,
                                           std::string n1, const AttributeValue &v1,
                                           std::string n2, const AttributeValue &v2,
                                           std::string n3, const AttributeValue &v3)
 {
-  m_mpduAggregator = ObjectFactory ();
-  m_mpduAggregator.SetTypeId (name);
-  m_mpduAggregator.Set (n0, v0);
-  m_mpduAggregator.Set (n1, v1);
-  m_mpduAggregator.Set (n2, v2);
-  m_mpduAggregator.Set (n3, v3);
+  std::map<AcIndex, ObjectFactory>::iterator it = m_mpduAggregators.find (ac);
+  if (it != m_mpduAggregators.end ())
+    {
+      it->second.SetTypeId (type);
+      it->second.Set (n0, v0);
+      it->second.Set (n1, v1);
+      it->second.Set (n2, v2);
+      it->second.Set (n3, v3);
+    }
+  else
+    {
+      ObjectFactory factory;
+      factory.SetTypeId (type);
+      factory.Set (n0, v0);
+      factory.Set (n1, v1);
+      factory.Set (n2, v2);
+      factory.Set (n3, v3);
+      m_mpduAggregators.insert (std::make_pair (ac, factory));
+    }
 }
 
 void
@@ -132,27 +151,31 @@
 void
 QosWifiMacHelper::Setup (Ptr<WifiMac> mac, enum AcIndex ac, std::string dcaAttrName) const
 {
-  std::map<AcIndex, ObjectFactory>::const_iterator it = m_aggregators.find (ac);
   PointerValue ptr;
   mac->GetAttribute (dcaAttrName, ptr);
   Ptr<EdcaTxopN> edca = ptr.Get<EdcaTxopN> ();
 
-  if (m_mpduAggregator.GetTypeId ().GetUid () != 0)
+  std::map<AcIndex, ObjectFactory>::const_iterator it_msdu = m_msduAggregators.find (ac);
+  if (it_msdu != m_msduAggregators.end ())
     {
-      Ptr<MpduAggregator> mpduaggregator = m_mpduAggregator.Create<MpduAggregator> ();
-      Ptr<MacLow> low = edca->Low ();
-      low->SetMpduAggregator (mpduaggregator);
+      ObjectFactory factory = it_msdu->second;
+      Ptr<MsduAggregator> msduAggregator = factory.Create<MsduAggregator> ();
+      edca->SetMsduAggregator (msduAggregator);
     }
-  if (it != m_aggregators.end ())
+
+  std::map<AcIndex, ObjectFactory>::const_iterator it_mpdu = m_mpduAggregators.find (ac);
+  if (it_mpdu != m_mpduAggregators.end ())
     {
-      ObjectFactory factory = it->second;
-      Ptr<MsduAggregator> aggregator = factory.Create<MsduAggregator> ();
-      edca->SetMsduAggregator (aggregator);
+      ObjectFactory factory = it_mpdu->second;
+      Ptr<MpduAggregator> mpduAggregator = factory.Create<MpduAggregator> ();
+      edca->SetMpduAggregator (mpduAggregator);
     }
+    
   if (m_bAckThresholds.find (ac) != m_bAckThresholds.end ())
     {
       edca->SetBlockAckThreshold (m_bAckThresholds.find (ac)->second);
     }
+    
   if (m_bAckInactivityTimeouts.find (ac) != m_bAckInactivityTimeouts.end ())
     {
       edca->SetBlockAckInactivityTimeout (m_bAckInactivityTimeouts.find (ac)->second);
diff -Naur ns-3.24.1/src/wifi/helper/qos-wifi-mac-helper.h ns-3.25/src/wifi/helper/qos-wifi-mac-helper.h
--- ns-3.24.1/src/wifi/helper/qos-wifi-mac-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/qos-wifi-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -26,6 +26,10 @@
 
 #include <map>
 
+/**
+ * (Deprecated) ns3::QosWifiMacHelper declaration.
+ */
+
 namespace ns3 {
 
 /**
@@ -73,6 +77,12 @@
    * \param v6 the value of the attribute to set
    * \param n7 the name of the attribute to set
    * \param v7 the value of the attribute to set
+   * \param n8 the name of the attribute to set
+   * \param v8 the value of the attribute to set
+   * \param n9 the name of the attribute to set
+   * \param v9 the value of the attribute to set
+   * \param n10 the name of the attribute to set
+   * \param v10 the value of the attribute to set
    *
    * All the attributes specified in this method should exist
    * in the requested mac.
@@ -85,7 +95,10 @@
                         std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
                         std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
                         std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
-                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue (),
+                        std::string n8 = "", const AttributeValue &v8 = EmptyAttributeValue (),
+                        std::string n9 = "", const AttributeValue &v9 = EmptyAttributeValue (),
+                        std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue ());
   /**
    * Set the class, type and attributes for the Msdu aggregator
    *
@@ -169,8 +182,8 @@
   virtual Ptr<WifiMac> Create (void) const;
   void Setup (Ptr<WifiMac> mac, enum AcIndex ac, std::string dcaAttrName) const;
 
-  std::map<AcIndex, ObjectFactory> m_aggregators;
-  ObjectFactory m_mpduAggregator;
+  std::map<AcIndex, ObjectFactory> m_msduAggregators;
+  std::map<AcIndex, ObjectFactory> m_mpduAggregators;
   /*
    * Next maps contain, for every access category, the values for
    * block ack threshold and block ack inactivity timeout.
diff -Naur ns-3.24.1/src/wifi/helper/vht-wifi-mac-helper.h ns-3.25/src/wifi/helper/vht-wifi-mac-helper.h
--- ns-3.24.1/src/wifi/helper/vht-wifi-mac-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/vht-wifi-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -27,6 +27,10 @@
 #include "qos-wifi-mac-helper.h"
 #include <map>
 
+/**
+ * (Deprecated) ns3::VhtWifiMacHelper declaration.
+ */
+
 namespace ns3 {
 
 /**
diff -Naur ns-3.24.1/src/wifi/helper/wifi-helper.cc ns-3.25/src/wifi/helper/wifi-helper.cc
--- ns-3.24.1/src/wifi/helper/wifi-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/wifi-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -49,10 +49,6 @@
 {
 }
 
-WifiMacHelper::~WifiMacHelper ()
-{
-}
-
 WifiHelper::~WifiHelper ()
 {
 }
@@ -60,6 +56,7 @@
 WifiHelper::WifiHelper ()
   : m_standard (WIFI_PHY_STANDARD_80211a)
 {
+  SetRemoteStationManager ("ns3::ArfWifiManager");
 }
 
 WifiHelper
diff -Naur ns-3.24.1/src/wifi/helper/wifi-helper.h ns-3.25/src/wifi/helper/wifi-helper.h
--- ns-3.24.1/src/wifi/helper/wifi-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/wifi-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -30,11 +30,11 @@
 #include "ns3/net-device-container.h"
 #include "ns3/wifi-phy-standard.h"
 #include "ns3/trace-helper.h"
+#include "ns3/wifi-mac-helper.h"
 
 namespace ns3 {
 
 class WifiPhy;
-class WifiMac;
 class WifiNetDevice;
 class Node;
 
@@ -67,26 +67,6 @@
 
 
 /**
- * \brief create MAC objects
- *
- * This base class must be implemented by new MAC implementation which wish to integrate
- * with the \ref ns3::WifiHelper class.
- */
-class WifiMacHelper
-{
-public:
-  virtual ~WifiMacHelper ();
-  /**
-   * \returns a new MAC object.
-   *
-   * Subclasses must implement this method to allow the ns3::WifiHelper class
-   * to create MAC objects from ns3::WifiHelper::Install.
-   */
-  virtual Ptr<WifiMac> Create (void) const = 0;
-};
-
-
-/**
  * \brief helps to create WifiNetDevice objects
  *
  * This class can help to create a large set of similar
@@ -101,6 +81,10 @@
   /**
    * Create a Wifi helper in an empty state: all its parameters
    * must be set before calling ns3::WifiHelper::Install
+   *
+   * The default state is defined as being an Adhoc MAC layer with an ARF rate control algorithm
+   * and both objects using their default attribute values. 
+   * By default, configure MAC and PHY for 802.11a.
    */
   WifiHelper ();
 
@@ -110,8 +94,11 @@
    * The default state is defined as being an Adhoc MAC layer with an ARF rate control algorithm
    * and both objects using their default attribute values. By default, configure MAC and PHY
    * for 802.11a.
+   *
+   * \deprecated This method will go away in future versions of ns-3.
+   * The constructor of the class is now performing the same job, which makes this function useless.
    */
-  static WifiHelper Default (void);
+  static WifiHelper Default (void) NS_DEPRECATED;
 
   /**
    * \param type the type of ns3::WifiRemoteStationManager to create.
diff -Naur ns-3.24.1/src/wifi/helper/wifi-mac-helper.cc ns-3.25/src/wifi/helper/wifi-mac-helper.cc
--- ns-3.24.1/src/wifi/helper/wifi-mac-helper.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/helper/wifi-mac-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,75 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016
+ *
+ * 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 "wifi-mac-helper.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/pointer.h"
+#include "ns3/boolean.h"
+#include "ns3/dca-txop.h"
+
+namespace ns3 {
+
+WifiMacHelper::WifiMacHelper ()
+{
+  //By default, we create an AdHoc MAC layer without QoS.
+  SetType ("ns3::AdhocWifiMac",
+           "QosSupported", BooleanValue (false));
+}
+
+WifiMacHelper::~WifiMacHelper ()
+{
+}
+
+void
+WifiMacHelper::SetType (std::string type,
+                        std::string n0, const AttributeValue &v0,
+                        std::string n1, const AttributeValue &v1,
+                        std::string n2, const AttributeValue &v2,
+                        std::string n3, const AttributeValue &v3,
+                        std::string n4, const AttributeValue &v4,
+                        std::string n5, const AttributeValue &v5,
+                        std::string n6, const AttributeValue &v6,
+                        std::string n7, const AttributeValue &v7,
+                        std::string n8, const AttributeValue &v8,
+                        std::string n9, const AttributeValue &v9,
+                        std::string n10, const AttributeValue &v10)
+{
+  m_mac.SetTypeId (type);
+  m_mac.Set (n0, v0);
+  m_mac.Set (n1, v1);
+  m_mac.Set (n2, v2);
+  m_mac.Set (n3, v3);
+  m_mac.Set (n4, v4);
+  m_mac.Set (n5, v5);
+  m_mac.Set (n6, v6);
+  m_mac.Set (n7, v7);
+  m_mac.Set (n8, v8);
+  m_mac.Set (n9, v9);
+  m_mac.Set (n10, v10);
+}
+
+Ptr<WifiMac>
+WifiMacHelper::Create (void) const
+{
+  Ptr<WifiMac> mac = m_mac.Create<WifiMac> ();
+  return mac;
+}
+
+} //namespace ns3
diff -Naur ns-3.24.1/src/wifi/helper/wifi-mac-helper.h ns-3.25/src/wifi/helper/wifi-mac-helper.h
--- ns-3.24.1/src/wifi/helper/wifi-mac-helper.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/helper/wifi-mac-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,121 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2016
+ *
+ * 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>
+ */
+
+#ifndef WIFI_MAC_HELPER_H
+#define WIFI_MAC_HELPER_H
+
+#include <string>
+#include "ns3/attribute.h"
+#include "ns3/object-factory.h"
+
+namespace ns3 {
+
+class WifiMac;
+
+/**
+ * \brief create MAC layers for a ns3::WifiNetDevice.
+ *
+ * This class can create MACs of type ns3::ApWifiMac, ns3::StaWifiMac and ns3::AdhocWifiMac.
+ * Its purpose is to allow a WifiHelper to configure and install WifiMac objects on a collection 
+ * of nodes. The WifiMac objects themselves are mainly composed of TxMiddle, RxMiddle, DcfManager, 
+ * MacLow, WifiRemoteStationManager, MpduAggregator and MsduAggregartor objects, so this helper 
+ * offers the opportunity to configure attribute values away from their default values, on a 
+ * per-NodeContainer basis. By default, it creates an Adhoc MAC layer without QoS. Typically, 
+ * it is used to set type and attribute values, then hand this object over to the WifiHelper that
+ * finishes the job of installing.
+ *
+ * This class is a merge of two previous helpers (ns3::NqosWifiMacHelper and ns::3 QosWifiMacHelper)
+ * that Mirko Banchi (mk.banchi@gmail.com) originally contributed.
+ * It should now be used instead of those two deprecated helpers.
+ *
+ * This class may be further subclassed (WaveMacHelper is an example of this).
+ *
+ */
+class WifiMacHelper
+{
+public:
+  /**
+   * Create a WifiMacHelper to make life easier for people who want to
+   * work with Wifi MAC layers.
+   */
+  WifiMacHelper ();
+  /**
+   * Destroy a WifiMacHelper.
+   */
+  virtual ~WifiMacHelper ();
+
+  /**
+   * \param type the type of ns3::WifiMac to create.
+   * Valid values of the type field must be a type subclassed from WifiMac.
+   *
+   * \param n0 the name of the attribute to set
+   * \param v0 the value of the attribute to set
+   * \param n1 the name of the attribute to set
+   * \param v1 the value of the attribute to set
+   * \param n2 the name of the attribute to set
+   * \param v2 the value of the attribute to set
+   * \param n3 the name of the attribute to set
+   * \param v3 the value of the attribute to set
+   * \param n4 the name of the attribute to set
+   * \param v4 the value of the attribute to set
+   * \param n5 the name of the attribute to set
+   * \param v5 the value of the attribute to set
+   * \param n6 the name of the attribute to set
+   * \param v6 the value of the attribute to set
+   * \param n7 the name of the attribute to set
+   * \param v7 the value of the attribute to set
+   * \param n8 the name of the attribute to set
+   * \param v8 the value of the attribute to set
+   * \param n9 the name of the attribute to set
+   * \param v9 the value of the attribute to set
+   * \param n10 the name of the attribute to set
+   * \param v10 the value of the attribute to set
+   *
+   * All the attributes specified in this method should exist
+   * in the requested mac.
+   */
+  virtual void SetType (std::string type,
+                        std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
+                        std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
+                        std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
+                        std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
+                        std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
+                        std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
+                        std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
+                        std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue (),
+                        std::string n8 = "", const AttributeValue &v8 = EmptyAttributeValue (),
+                        std::string n9 = "", const AttributeValue &v9 = EmptyAttributeValue (),
+                        std::string n10 = "", const AttributeValue &v10 = EmptyAttributeValue ());
+
+  /**
+   * \returns a new MAC object.
+   *
+   * This allows the ns3::WifiHelper class to create MAC objects from ns3::WifiHelper::Install.
+   */
+  virtual Ptr<WifiMac> Create (void) const;
+
+
+protected:
+  ObjectFactory m_mac;
+};
+
+} // namespace ns3
+
+#endif /* WIFI_MAC_HELPER_H */
diff -Naur ns-3.24.1/src/wifi/helper/yans-wifi-helper.cc ns-3.25/src/wifi/helper/yans-wifi-helper.cc
--- ns-3.24.1/src/wifi/helper/yans-wifi-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/helper/yans-wifi-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -330,7 +330,7 @@
             mcsRate = rate - 128;
 
             mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
               }
@@ -371,7 +371,6 @@
         if (txVector.IsAggregation ())
           {
             uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
-            ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_DELIMITER_CRC_KNOWN;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
             /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
             AmpduSubframeHeader hdr;
@@ -379,11 +378,11 @@
             p->RemoveHeader (hdr);
             extractedLength = hdr.GetLength ();
             p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.packetType == 2 || (hdr.GetEof () == true && hdr.GetLength () > 0))
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
               {
                 ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
               }
-            header.SetAmpduStatus (aMpdu.referenceNumber, ampduStatusFlags, hdr.GetCrc ());
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
           }
 
         if (preamble == WIFI_PREAMBLE_VHT)
@@ -412,15 +411,15 @@
 
             vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
             //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 vhtBandwidth = 1;
               }
-            else if (txVector.GetChannelWidth () == 80000000)
+            else if (txVector.GetChannelWidth () == 80)
               {
                 vhtBandwidth = 4;
               }
-            else if (txVector.GetChannelWidth () == 160000000)
+            else if (txVector.GetChannelWidth () == 160)
               {
                 vhtBandwidth = 11;
               }
@@ -527,7 +526,7 @@
             mcsRate = rate - 128;
 
             mcsKnown |= RadiotapHeader::MCS_KNOWN_BANDWIDTH;
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 mcsFlags |= RadiotapHeader::MCS_FLAGS_BANDWIDTH_40;
               }
@@ -567,7 +566,7 @@
 
         if (txVector.IsAggregation ())
           {
-            uint16_t ampduStatusFlags = 0;
+            uint16_t ampduStatusFlags = RadiotapHeader::A_MPDU_STATUS_NONE;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_DELIMITER_CRC_KNOWN;
             ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST_KNOWN;
             /* For PCAP file, MPDU Delimiter and Padding should be removed by the MAC Driver */
@@ -576,11 +575,11 @@
             p->RemoveHeader (hdr);
             extractedLength = hdr.GetLength ();
             p = p->CreateFragment (0, static_cast<uint32_t> (extractedLength));
-            if (aMpdu.packetType == 2 || (hdr.GetEof () == true && hdr.GetLength () > 0))
+            if (aMpdu.type == LAST_MPDU_IN_AGGREGATE || (hdr.GetEof () == true && hdr.GetLength () > 0))
               {
                 ampduStatusFlags |= RadiotapHeader::A_MPDU_STATUS_LAST;
               }
-            header.SetAmpduStatus (aMpdu.referenceNumber, ampduStatusFlags, hdr.GetCrc ());
+            header.SetAmpduStatus (aMpdu.mpduRefNumber, ampduStatusFlags, hdr.GetCrc ());
           }
 
         if (preamble == WIFI_PREAMBLE_VHT)
@@ -609,15 +608,15 @@
 
             vhtKnown |= RadiotapHeader::VHT_KNOWN_BANDWIDTH;
             //not all bandwidth values are currently supported
-            if (txVector.GetChannelWidth () == 40000000)
+            if (txVector.GetChannelWidth () == 40)
               {
                 vhtBandwidth = 1;
               }
-            else if (txVector.GetChannelWidth () == 80000000)
+            else if (txVector.GetChannelWidth () == 80)
               {
                 vhtBandwidth = 4;
               }
-            else if (txVector.GetChannelWidth () == 160000000)
+            else if (txVector.GetChannelWidth () == 160)
               {
                 vhtBandwidth = 11;
               }
diff -Naur ns-3.24.1/src/wifi/model/aarfcd-wifi-manager.cc ns-3.25/src/wifi/model/aarfcd-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/aarfcd-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aarfcd-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -300,9 +300,9 @@
 }
 
 WifiTxVector
-AarfcdWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+AarfcdWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   AarfcdWifiRemoteStation *station = (AarfcdWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -326,7 +326,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/aarfcd-wifi-manager.h ns-3.25/src/wifi/model/aarfcd-wifi-manager.h
--- ns-3.24.1/src/wifi/model/aarfcd-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aarfcd-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -68,7 +68,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *station,
                           Ptr<const Packet> packet, bool normally);
diff -Naur ns-3.24.1/src/wifi/model/aarf-wifi-manager.cc ns-3.25/src/wifi/model/aarf-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/aarf-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aarf-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -228,9 +228,9 @@
 }
 
 WifiTxVector
-AarfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+AarfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   AarfWifiRemoteStation *station = (AarfWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -254,7 +254,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/aarf-wifi-manager.h ns-3.25/src/wifi/model/aarf-wifi-manager.h
--- ns-3.24.1/src/wifi/model/aarf-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aarf-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -53,7 +53,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/adhoc-wifi-mac.cc ns-3.25/src/wifi/model/adhoc-wifi-mac.cc
--- ns-3.24.1/src/wifi/model/adhoc-wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/adhoc-wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -86,6 +86,15 @@
     {
       //In ad hoc mode, we assume that every destination supports all
       //the rates we support.
+      if (m_htSupported || m_vhtSupported)
+        {
+          m_stationManager->AddAllSupportedMcs (to);
+          m_stationManager->AddStationHtCapabilities (to, GetHtCapabilities());
+        }
+      if (m_vhtSupported)
+        {
+          m_stationManager->AddStationVhtCapabilities (to, GetVhtCapabilities());
+        }
       m_stationManager->AddAllSupportedModes (to);
       m_stationManager->RecordDisassociated (to);
     }
@@ -128,6 +137,10 @@
       hdr.SetTypeData ();
     }
 
+  if (m_htSupported || m_vhtSupported)
+    {
+      hdr.SetNoOrder ();
+    }
   hdr.SetAddr1 (to);
   hdr.SetAddr2 (m_low->GetAddress ());
   hdr.SetAddr3 (GetBssid ());
diff -Naur ns-3.24.1/src/wifi/model/amrr-wifi-manager.cc ns-3.25/src/wifi/model/amrr-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/amrr-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/amrr-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -291,9 +291,9 @@
 }
 
 WifiTxVector
-AmrrWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+AmrrWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   AmrrWifiRemoteStation *station = (AmrrWifiRemoteStation *)st;
   UpdateMode (station);
   NS_ASSERT (station->m_txrate < GetNSupported (station));
@@ -356,8 +356,16 @@
       channelWidth = 20;
     }
   UpdateMode (station);
-  /// \todo can we implement something smarter ?
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/amrr-wifi-manager.h ns-3.25/src/wifi/model/amrr-wifi-manager.h
--- ns-3.24.1/src/wifi/model/amrr-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/amrr-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -58,7 +58,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/aparf-wifi-manager.cc ns-3.25/src/wifi/model/aparf-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/aparf-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aparf-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -318,9 +318,9 @@
 }
 
 WifiTxVector
-AparfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+AparfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   AparfWifiRemoteStation *station = (AparfWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -345,7 +345,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/aparf-wifi-manager.h ns-3.25/src/wifi/model/aparf-wifi-manager.h
--- ns-3.24.1/src/wifi/model/aparf-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/aparf-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -75,7 +75,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/ap-wifi-mac.cc ns-3.25/src/wifi/model/ap-wifi-mac.cc
--- ns-3.24.1/src/wifi/model/ap-wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ap-wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -50,25 +50,34 @@
     .SetParent<RegularWifiMac> ()
     .SetGroupName ("Wifi")
     .AddConstructor<ApWifiMac> ()
-    .AddAttribute ("BeaconInterval", "Delay between two beacons",
+    .AddAttribute ("BeaconInterval",
+                   "Delay between two beacons",
                    TimeValue (MicroSeconds (102400)),
                    MakeTimeAccessor (&ApWifiMac::GetBeaconInterval,
                                      &ApWifiMac::SetBeaconInterval),
                    MakeTimeChecker ())
-    .AddAttribute ("BeaconJitter", "A uniform random variable to cause the initial beacon starting time (after simulation time 0) "
+    .AddAttribute ("BeaconJitter",
+                   "A uniform random variable to cause the initial beacon starting time (after simulation time 0) "
                    "to be distributed between 0 and the BeaconInterval.",
                    StringValue ("ns3::UniformRandomVariable"),
                    MakePointerAccessor (&ApWifiMac::m_beaconJitter),
                    MakePointerChecker<UniformRandomVariable> ())
-    .AddAttribute ("EnableBeaconJitter", "If beacons are enabled, whether to jitter the initial send event.",
+    .AddAttribute ("EnableBeaconJitter",
+                   "If beacons are enabled, whether to jitter the initial send event.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&ApWifiMac::m_enableBeaconJitter),
                    MakeBooleanChecker ())
-    .AddAttribute ("BeaconGeneration", "Whether or not beacons are generated.",
+    .AddAttribute ("BeaconGeneration",
+                   "Whether or not beacons are generated.",
                    BooleanValue (true),
                    MakeBooleanAccessor (&ApWifiMac::SetBeaconGeneration,
                                         &ApWifiMac::GetBeaconGeneration),
                    MakeBooleanChecker ())
+    .AddAttribute ("EnableNonErpProtection", "Whether or not protection mechanism should be used when non-ERP STAs are present within the BSS."
+                   "This parameter is only used when ERP is supported by the AP.",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&ApWifiMac::m_enableNonErpProtection),
+                   MakeBooleanChecker ())
   ;
   return tid;
 }
@@ -93,6 +102,9 @@
 ApWifiMac::~ApWifiMac ()
 {
   NS_LOG_FUNCTION (this);
+  m_staList.clear();
+  m_nonErpStations.clear ();
+  m_nonHtStations.clear ();
 }
 
 void
@@ -190,6 +202,44 @@
   return 1;
 }
 
+bool
+ApWifiMac::GetShortSlotTimeEnabled (void) const
+{
+  if (m_nonErpStations.size () != 0)
+    {
+      return false;
+    }
+  if (m_erpSupported == true && GetShortSlotTimeSupported () == true)
+    {
+      for (std::list<Mac48Address>::const_iterator i = m_staList.begin (); i != m_staList.end (); i++)
+      {
+        if (m_stationManager->GetShortSlotTimeSupported (*i) == false)
+          {
+            return false;
+          }
+      }
+      return true;
+    }
+  return false;
+}
+
+bool
+ApWifiMac::GetShortPreambleEnabled (void) const
+{
+  if (m_erpSupported || m_phy->GetShortPlcpPreambleSupported ())
+    {
+      for (std::list<Mac48Address>::const_iterator i = m_nonErpStations.begin (); i != m_nonErpStations.end (); i++)
+      {
+        if (m_stationManager->GetShortPreambleSupported (*i) == false)
+          {
+            return false;
+          }
+      }
+      return true;
+    }
+  return false;
+}
+
 void
 ApWifiMac::ForwardDown (Ptr<const Packet> packet, Mac48Address from,
                         Mac48Address to)
@@ -299,10 +349,10 @@
 {
   NS_LOG_FUNCTION (this);
   SupportedRates rates;
-  //If it is an HT-AP then add the BSSMembershipSelectorSet
-  //which only includes 127 for HT now. The standard says that the BSSMembershipSelectorSet
+  //If it is an HT-AP or VHT-AP, then add the BSSMembershipSelectorSet
+  //The standard says that the BSSMembershipSelectorSet
   //must have its MSB set to 1 (must be treated as a Basic Rate)
-  //Also the standard mentioned that at leat 1 element should be included in the SupportedRates the rest can be in the ExtendedSupportedRates
+  //Also the standard mentioned that at least 1 element should be included in the SupportedRates the rest can be in the ExtendedSupportedRates
   if (m_htSupported || m_vhtSupported)
     {
       for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
@@ -310,17 +360,22 @@
           rates.SetBasicRate (m_phy->GetBssMembershipSelector (i));
         }
     }
+  // 
+  uint8_t nss = 1;  // Number of spatial streams is 1 for non-MIMO modes
   //Send the set of supported rates and make sure that we indicate
   //the Basic Rate set in this set of supported rates.
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
     {
       WifiMode mode = m_phy->GetMode (i);
-      rates.AddSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1));
+      uint64_t modeDataRate = mode.GetDataRate (m_phy->GetChannelWidth (), false, nss);
+      NS_LOG_DEBUG ("Adding supported rate of " << modeDataRate);
+      rates.AddSupportedRate (modeDataRate);
       //Add rates that are part of the BSSBasicRateSet (manufacturer dependent!)
       //here we choose to add the mandatory rates to the BSSBasicRateSet,
-      //exept for 802.11b where we assume that only the non HR-DSSS rates are part of the BSSBasicRateSet
+      //except for 802.11b where we assume that only the non HR-DSSS rates are part of the BSSBasicRateSet
       if (mode.IsMandatory () && (mode.GetModulationClass () != WIFI_MOD_CLASS_HR_DSSS))
         {
+          NS_LOG_DEBUG ("Adding basic mode " << mode.GetUniqueName ());
           m_stationManager->AddBasicMode (mode);
         }
     }
@@ -328,77 +383,61 @@
   for (uint32_t j = 0; j < m_stationManager->GetNBasicModes (); j++)
     {
       WifiMode mode = m_stationManager->GetBasicMode (j);
-      rates.SetBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1));
+      uint64_t modeDataRate = mode.GetDataRate (m_phy->GetChannelWidth (), false, nss);
+      NS_LOG_DEBUG ("Setting basic rate " << mode.GetUniqueName ());
+      rates.SetBasicRate (modeDataRate);
     }
 
   return rates;
 }
 
-HtCapabilities
-ApWifiMac::GetHtCapabilities (void) const
+CapabilityInformation
+ApWifiMac::GetCapabilities (void) const
 {
-  HtCapabilities capabilities;
-  capabilities.SetHtSupported (1);
-  if (m_htSupported)
-    {
-      capabilities.SetLdpc (m_phy->GetLdpc ());
-      capabilities.SetSupportedChannelWidth (m_phy->GetChannelWidth () == 40);
-      capabilities.SetShortGuardInterval20 (m_phy->GetGuardInterval ());
-      capabilities.SetShortGuardInterval40 (m_phy->GetChannelWidth () == 40 && m_phy->GetGuardInterval ());
-      capabilities.SetGreenfield (m_phy->GetGreenfield ());
-      capabilities.SetMaxAmsduLength (1); //hardcoded for now (TBD)
-      capabilities.SetLSigProtectionSupport (!m_phy->GetGreenfield ());
-      capabilities.SetMaxAmpduLength (3); //hardcoded for now (TBD)
-      uint64_t maxSupportedRate = 0; //in bit/s
-      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
-        {
-          WifiMode mcs = m_phy->GetMcs (i);
-          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
-          if (mcs.GetDataRate (m_phy->GetGuardInterval (), m_phy->GetGuardInterval (), 1) > maxSupportedRate)
-            {
-              maxSupportedRate = mcs.GetDataRate (m_phy->GetGuardInterval (), m_phy->GetGuardInterval (), 1);
-            }
-        }
-      capabilities.SetRxHighestSupportedDataRate (maxSupportedRate / 1e6); //in Mbit/s
-      capabilities.SetTxMcsSetDefined (m_phy->GetNMcs () > 0);
-      capabilities.SetTxMaxNSpatialStreams (m_phy->GetNumberOfTransmitAntennas ());
-    }
+  CapabilityInformation capabilities;
+  capabilities.SetShortPreamble (GetShortPreambleEnabled ());
+  capabilities.SetShortSlotTime (GetShortSlotTimeEnabled ());
   return capabilities;
 }
 
-VhtCapabilities
-ApWifiMac::GetVhtCapabilities (void) const
+ErpInformation
+ApWifiMac::GetErpInformation (void) const
 {
-  VhtCapabilities capabilities;
-  capabilities.SetVhtSupported (1);
-  if (m_vhtSupported)
-    {
-      if (m_phy->GetChannelWidth () == 160)
+  ErpInformation information;
+  information.SetErpSupported (1);
+  if (m_erpSupported)
+    {
+      information.SetNonErpPresent (!m_nonErpStations.empty ());
+      information.SetUseProtection (GetUseNonErpProtection ());
+      if (GetShortPreambleEnabled ())
         {
-          capabilities.SetSupportedChannelWidthSet (1);
+          information.SetBarkerPreambleMode (0);
         }
       else
         {
-          capabilities.SetSupportedChannelWidthSet (0);
+          information.SetBarkerPreambleMode (1);
+        }
+    }
+  return information;
+}
+
+HtOperations
+ApWifiMac::GetHtOperations (void) const
+{
+  HtOperations operations;
+  operations.SetHtSupported (1);
+  if (m_htSupported)
+    {
+      if (!m_nonHtStations.empty ())
+        {
+          operations.SetHtProtection (MIXED_MODE_PROTECTION);
         }
-      capabilities.SetMaxMpduLength (2); //hardcoded for now (TBD)
-      capabilities.SetRxLdpc (m_phy->GetLdpc ());
-      capabilities.SetShortGuardIntervalFor80Mhz ((m_phy->GetChannelWidth () == 80) && m_phy->GetGuardInterval ());
-      capabilities.SetShortGuardIntervalFor160Mhz ((m_phy->GetChannelWidth () == 160) && m_phy->GetGuardInterval ());
-      capabilities.SetMaxAmpduLengthExponent (7); //hardcoded for now (TBD)
-      uint8_t maxMcs = 0;
-      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
+      else
         {
-          WifiMode mcs = m_phy->GetMcs (i);
-          if (mcs.GetMcsValue () > maxMcs)
-            {
-              maxMcs = mcs.GetMcsValue ();
-            }
+          operations.SetHtProtection (NO_PROTECTION);
         }
-      capabilities.SetRxMcsMap (maxMcs, 1); //Only 1 SS is currently supported
-      capabilities.SetTxMcsMap (maxMcs, 1); //Only 1 SS is currently supported
     }
-  return capabilities;
+  return operations;
 }
 
 void
@@ -417,9 +456,17 @@
   probe.SetSsid (GetSsid ());
   probe.SetSupportedRates (GetSupportedRates ());
   probe.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
+  probe.SetCapabilities (GetCapabilities ());
+  m_stationManager->SetShortPreambleEnabled (GetShortPreambleEnabled ());
+  m_stationManager->SetShortSlotTimeEnabled (GetShortSlotTimeEnabled ());
+  if (m_erpSupported)
+    {
+      probe.SetErpInformation (GetErpInformation ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       probe.SetHtCapabilities (GetHtCapabilities ());
+      probe.SetHtOperations (GetHtOperations ());
       hdr.SetNoOrder ();
     }
   if (m_vhtSupported)
@@ -452,6 +499,7 @@
   if (success)
     {
       code.SetSuccess ();
+      m_staList.push_back (to);
     }
   else
     {
@@ -459,10 +507,15 @@
     }
   assoc.SetSupportedRates (GetSupportedRates ());
   assoc.SetStatusCode (code);
-
+  assoc.SetCapabilities (GetCapabilities ());
+  if (m_erpSupported)
+    {
+      assoc.SetErpInformation (GetErpInformation ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       assoc.SetHtCapabilities (GetHtCapabilities ());
+      assoc.SetHtOperations (GetHtOperations ());
       hdr.SetNoOrder ();
     }
   if (m_vhtSupported)
@@ -494,9 +547,17 @@
   beacon.SetSsid (GetSsid ());
   beacon.SetSupportedRates (GetSupportedRates ());
   beacon.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ());
+  beacon.SetCapabilities (GetCapabilities ());
+  m_stationManager->SetShortPreambleEnabled (GetShortPreambleEnabled ());
+  m_stationManager->SetShortSlotTimeEnabled (GetShortSlotTimeEnabled ());
+  if (m_erpSupported)
+    {
+      beacon.SetErpInformation (GetErpInformation ());
+    }
   if (m_htSupported || m_vhtSupported)
     {
       beacon.SetHtCapabilities (GetHtCapabilities ());
+      beacon.SetHtOperations (GetHtOperations ());
       hdr.SetNoOrder ();
     }
   if (m_vhtSupported)
@@ -508,6 +569,23 @@
   //The beacon has it's own special queue, so we load it in there
   m_beaconDca->Queue (packet, hdr);
   m_beaconEvent = Simulator::Schedule (m_beaconInterval, &ApWifiMac::SendOneBeacon, this);
+  
+  //If a STA that does not support Short Slot Time associates,
+  //the AP shall use long slot time beginning at the first Beacon
+  //subsequent to the association of the long slot time STA.
+  if (m_erpSupported)
+    {
+    if (GetShortSlotTimeEnabled () == true)
+      {
+        //Enable short slot time
+        SetSlot (MicroSeconds (9));
+      }
+    else
+      {
+        //Disable short slot time
+        SetSlot (MicroSeconds (20));
+      }
+    }
 }
 
 void
@@ -630,42 +708,87 @@
               //rate set is compatible with our Basic Rate set
               MgtAssocRequestHeader assocReq;
               packet->RemoveHeader (assocReq);
+              CapabilityInformation capabilities = assocReq.GetCapabilities ();
+              m_stationManager->AddSupportedPlcpPreamble (from, capabilities.IsShortPreamble ());
               SupportedRates rates = assocReq.GetSupportedRates ();
               bool problem = false;
+              bool isHtStation = false;
+              bool isOfdmStation = false;
+              bool isErpStation = false;
+              bool isDsssStation = false;
               for (uint32_t i = 0; i < m_stationManager->GetNBasicModes (); i++)
                 {
                   WifiMode mode = m_stationManager->GetBasicMode (i);
-                  if (!rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                  uint8_t nss = 1; // Assume 1 spatial stream in basic mode
+                  if (!rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
                     {
-                      problem = true;
-                      break;
+                      if ((mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS) || (mode.GetModulationClass () == WIFI_MOD_CLASS_HR_DSSS))
+                        {
+                          isDsssStation = false;
+                        }
+                      else if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+                        {
+                          isErpStation = false;
+                        }
+                      else if (mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM)
+                        {
+                          isOfdmStation = false;
+                        }
+                      if (isDsssStation == false && isErpStation == false && isOfdmStation == false)
+                        {
+                          problem = true;
+                          break;
+                        }
+                    }
+                  else
+                    {
+                      if ((mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS) || (mode.GetModulationClass () == WIFI_MOD_CLASS_HR_DSSS))
+                        {
+                          isDsssStation = true;
+                        }
+                      else if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+                        {
+                          isErpStation = true;
+                        }
+                      else if (mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM)
+                        {
+                          isOfdmStation = true;
+                        }
                     }
                 }
+              m_stationManager->AddSupportedErpSlotTime (from, capabilities.IsShortSlotTime () && isErpStation);
               if (m_htSupported)
                 {
-                  //check that the STA supports all MCSs in Basic MCS Set
+                  //check whether the HT STA supports all MCSs in Basic MCS Set
                   HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
-                  for (uint32_t i = 0; i < m_stationManager->GetNBasicMcs (); i++)
+                  if (htcapabilities.GetHtCapabilitiesInfo () != 0)
                     {
-                      WifiMode mcs = m_stationManager->GetBasicMcs (i);
-                      if (!htcapabilities.IsSupportedMcs (mcs.GetMcsValue ()))
+                      isHtStation = true;
+                      for (uint32_t i = 0; i < m_stationManager->GetNBasicMcs (); i++)
                         {
-                          problem = true;
-                          break;
+                          WifiMode mcs = m_stationManager->GetBasicMcs (i);
+                          if (!htcapabilities.IsSupportedMcs (mcs.GetMcsValue ()))
+                            {
+                              problem = true;
+                              break;
+                            }
                         }
                     }
                 }
               if (m_vhtSupported)
                 {
-                  //check that the STA supports all MCSs in Basic MCS Set
+                  //check whether the VHT STA supports all MCSs in Basic MCS Set
                   VhtCapabilities vhtcapabilities = assocReq.GetVhtCapabilities ();
-                  for (uint32_t i = 0; i < m_stationManager->GetNBasicMcs (); i++)
+                  if (vhtcapabilities.GetVhtCapabilitiesInfo () != 0)
                     {
-                      WifiMode mcs = m_stationManager->GetBasicMcs (i);
-                      if (!vhtcapabilities.IsSupportedTxMcs (mcs.GetMcsValue ()))
+                      for (uint32_t i = 0; i < m_stationManager->GetNBasicMcs (); i++)
                         {
-                          problem = true;
-                          break;
+                          WifiMode mcs = m_stationManager->GetBasicMcs (i);
+                          if (!vhtcapabilities.IsSupportedTxMcs (mcs.GetMcsValue ()))
+                            {
+                              problem = true;
+                              break;
+                            }
                         }
                     }
                 }
@@ -683,7 +806,8 @@
                   for (uint32_t j = 0; j < m_phy->GetNModes (); j++)
                     {
                       WifiMode mode = m_phy->GetMode (j);
-                      if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                      uint8_t nss = 1; // Assume 1 spatial stream in basic mode
+                      if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
                         {
                           m_stationManager->AddSupportedMode (from, mode);
                         }
@@ -691,7 +815,7 @@
                   if (m_htSupported)
                     {
                       HtCapabilities htcapabilities = assocReq.GetHtCapabilities ();
-                      m_stationManager->AddStationHtCapabilities (from,htcapabilities);
+                      m_stationManager->AddStationHtCapabilities (from, htcapabilities);
                       for (uint32_t j = 0; j < m_phy->GetNMcs (); j++)
                         {
                           WifiMode mcs = m_phy->GetMcs (j);
@@ -716,6 +840,14 @@
                         }
                     }
                   m_stationManager->RecordWaitAssocTxOk (from);
+                  if (!isHtStation)
+                    {
+                      m_nonHtStations.push_back (hdr->GetAddr2 ());
+                    }
+                  if (!isErpStation && isDsssStation)
+                    {
+                      m_nonErpStations.push_back (hdr->GetAddr2 ());
+                    }
                   // send assoc response with success status.
                   SendAssocResp (hdr->GetAddr2 (), true);
                 }
@@ -724,6 +856,30 @@
           else if (hdr->IsDisassociation ())
             {
               m_stationManager->RecordDisassociated (from);
+              for (std::list<Mac48Address>::iterator i = m_staList.begin (); i != m_staList.end (); i++)
+              {
+                if ((*i) == from)
+                  {
+                    m_staList.erase (i);
+                    break;
+                  }
+              }
+              for (std::list<Mac48Address>::iterator j = m_nonErpStations.begin (); j != m_nonErpStations.end (); j++)
+              {
+                if ((*j) == from)
+                  {
+                    m_nonErpStations.erase (j);
+                    break;
+                  }
+              }
+              for (std::list<Mac48Address>::iterator j = m_nonHtStations.begin (); j != m_nonHtStations.end (); j++)
+              {
+                if ((*j) == from)
+                  {
+                    m_nonHtStations.erase (j);
+                    break;
+                  }
+              }
               return;
             }
         }
@@ -784,4 +940,12 @@
   RegularWifiMac::DoInitialize ();
 }
 
+bool
+ApWifiMac::GetUseNonErpProtection (void) const
+{
+  bool useProtection = !m_nonErpStations.empty () && m_enableNonErpProtection;
+  m_stationManager->SetUseNonErpProtection (useProtection);
+  return useProtection;
+}
+
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/ap-wifi-mac.h ns-3.25/src/wifi/model/ap-wifi-mac.h
--- ns-3.24.1/src/wifi/model/ap-wifi-mac.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ap-wifi-mac.h	2016-03-23 21:36:53.000000000 -0700
@@ -24,11 +24,14 @@
 #define AP_WIFI_MAC_H
 
 #include "regular-wifi-mac.h"
+#include "capability-information.h"
 #include "ht-capabilities.h"
+#include "ht-operations.h"
+#include "vht-capabilities.h"
 #include "amsdu-subframe-header.h"
 #include "supported-rates.h"
+#include "erp-information.h"
 #include "ns3/random-variable-stream.h"
-#include "vht-capabilities.h"
 
 namespace ns3 {
 
@@ -98,6 +101,19 @@
    * Start beacon transmission immediately.
    */
   void StartBeaconing (void);
+  /**
+   * Determine whether short slot time should be enabled or not in the BSS.
+   * Typically, true is returned only when there is no non-erp stations associated
+   * to the AP, and that short slot time is supported by the AP and by all other
+   * ERP stations that are associated to the AP. Otherwise, false is returned.
+   */
+  bool GetShortSlotTimeEnabled (void) const;
+  /**
+   * Determine whether short preamble should be enabled or not in the BSS.
+   * Typically, true is returned only when the AP and all associated 
+   * stations support short PLCP preamble.
+   */
+  bool GetShortPreambleEnabled (void) const;
 
   /**
    * Assign a fixed random variable stream number to the random variables
@@ -181,17 +197,23 @@
    */
   void SendOneBeacon (void);
   /**
-   * Return the HT capability of the current AP.
+   * Return the Capability information of the current AP.
+   *
+   * \return the Capability information that we support
+   */
+  CapabilityInformation GetCapabilities (void) const;
+  /**
+   * Return the ERP information of the current AP.
    *
-   * \return the HT capability that we support
+   * \return the ERP information that we support
    */
-  HtCapabilities GetHtCapabilities (void) const;
+  ErpInformation GetErpInformation (void) const;
   /**
-   * Return the VHT capability of the current AP.
+   * Return the HT operations of the current AP.
    *
-   * \return the VHT capability that we support
+   * \return the HT operations that we support
    */
-  VhtCapabilities GetVhtCapabilities (void) const;
+  HtOperations GetHtOperations (void) const;
   /**
    * Return an instance of SupportedRates that contains all rates that we support
    * including HT rates.
@@ -211,16 +233,27 @@
    * \return true if beacons are periodically generated, false otherwise
    */
   bool GetBeaconGeneration (void) const;
+  /**
+   * Return whether protection for non-ERP stations is used in the BSS.
+   *
+   * \return true if protection for non-ERP stations is used in the BSS, 
+   *         false otherwise
+   */
+  bool GetUseNonErpProtection (void) const;
 
   virtual void DoDispose (void);
   virtual void DoInitialize (void);
 
   Ptr<DcaTxop> m_beaconDca;                  //!< Dedicated DcaTxop for beacons
   Time m_beaconInterval;                     //!< Interval between beacons
-  bool m_enableBeaconGeneration;             //!< Flag if beacons are being generated
+  bool m_enableBeaconGeneration;             //!< Flag whether beacons are being generated
   EventId m_beaconEvent;                     //!< Event to generate one beacon
   Ptr<UniformRandomVariable> m_beaconJitter; //!< UniformRandomVariable used to randomize the time of the first beacon
-  bool m_enableBeaconJitter;                 //!< Flag if the first beacon should be generated at random time
+  bool m_enableBeaconJitter;                 //!< Flag whether the first beacon should be generated at random time
+  std::list<Mac48Address> m_staList;         //!< List of all stations currently associated to the AP
+  std::list<Mac48Address> m_nonErpStations;  //!< List of all non-ERP stations currently associated to the AP
+  std::list<Mac48Address> m_nonHtStations;   //!< List of all non-HT stations currently associated to the AP
+  bool m_enableNonErpProtection;             //!< Flag whether protection mechanism is used or not when non-ERP STAs are present within the BSS
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/arf-wifi-manager.cc ns-3.25/src/wifi/model/arf-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/arf-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/arf-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -204,9 +204,9 @@
 }
 
 WifiTxVector
-ArfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+ArfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   ArfWifiRemoteStation *station = (ArfWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -230,7 +230,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/arf-wifi-manager.h ns-3.25/src/wifi/model/arf-wifi-manager.h
--- ns-3.24.1/src/wifi/model/arf-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/arf-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -61,7 +61,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/block-ack-manager.cc ns-3.25/src/wifi/model/block-ack-manager.cc
--- ns-3.24.1/src/wifi/model/block-ack-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/block-ack-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -526,9 +526,9 @@
 }
 
 void
-BlockAckManager::NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode)
+BlockAckManager::NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr)
 {
-  NS_LOG_FUNCTION (this << blockAck << recipient);
+  NS_LOG_FUNCTION (this << blockAck << recipient << rxSnr << txMode.GetUniqueName () << dataSnr);
   uint16_t sequenceFirstLost = 0;
   if (!blockAck->IsMultiTid ())
     {
@@ -536,6 +536,8 @@
       if (ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED))
         {
           bool foundFirstLost = false;
+          uint32_t nSuccessfulMpdus = 0;
+          uint32_t nFailedMpdus = 0;
           AgreementsI it = m_agreements.find (std::make_pair (recipient, tid));
           PacketQueueI queueEnd = it->second.second.end ();
 
@@ -558,6 +560,7 @@
                   if (blockAck->IsFragmentReceived ((*queueIt).hdr.GetSequenceNumber (),
                                                     (*queueIt).hdr.GetFragmentNumber ()))
                     {
+                      nSuccessfulMpdus++;
                       queueIt = it->second.second.erase (queueIt);
                     }
                   else
@@ -568,12 +571,11 @@
                           sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
                           (*it).second.first.SetStartingSequence (sequenceFirstLost);
                         }
-
+                      nFailedMpdus++;
                       if (!AlreadyExists ((*queueIt).hdr.GetSequenceNumber (),recipient,tid))
                         {
                           InsertInRetryQueue (queueIt);
                         }
-
                       queueIt++;
                     }
                 }
@@ -588,8 +590,7 @@
                       while (queueIt != queueEnd
                              && (*queueIt).hdr.GetSequenceNumber () == currentSeq)
                         {
-                          //notify remote station of successful transmission
-                          m_stationManager->ReportDataOk ((*queueIt).hdr.GetAddr1 (), &(*queueIt).hdr, 0, txMode, 0);
+                          nSuccessfulMpdus++;
                           if (!m_txOkCallback.IsNull ())
                             {
                               m_txOkCallback ((*queueIt).hdr);
@@ -605,8 +606,7 @@
                           sequenceFirstLost = (*queueIt).hdr.GetSequenceNumber ();
                           (*it).second.first.SetStartingSequence (sequenceFirstLost);
                         }
-                      //notify remote station of unsuccessful transmission
-                      m_stationManager->ReportDataFailed ((*queueIt).hdr.GetAddr1 (), &(*queueIt).hdr);
+                      nFailedMpdus++;
                       if (!m_txFailedCallback.IsNull ())
                         {
                           m_txFailedCallback ((*queueIt).hdr);
@@ -619,6 +619,7 @@
                     }
                 }
             }
+          m_stationManager->ReportAmpduTxStatus (recipient, tid, nSuccessfulMpdus, nFailedMpdus, rxSnr, dataSnr);
           uint16_t newSeq = m_txMiddle->GetNextSeqNumberByTidAndAddress (tid, recipient);
           if ((foundFirstLost && !SwitchToBlockAckIfNeeded (recipient, tid, sequenceFirstLost))
               || (!foundFirstLost && !SwitchToBlockAckIfNeeded (recipient, tid, newSeq)))
diff -Naur ns-3.24.1/src/wifi/model/block-ack-manager.h ns-3.25/src/wifi/model/block-ack-manager.h
--- ns-3.24.1/src/wifi/model/block-ack-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/block-ack-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -164,14 +164,16 @@
   /**
    * \param blockAck The received block ack frame.
    * \param recipient Sender of block ack frame.
+   * \param rxSnr received SNR of the block ack frame itself
    * \param txMode mode of block ack frame.
+   * \param dataSnr data SNR reported by remote station
    *
    * Invoked upon receipt of a block ack frame. Typically, this function, is called
    * by ns3::EdcaTxopN object. Performs a check on which MPDUs, previously sent
    * with ack policy set to Block Ack, were correctly received by the recipient.
    * An acknowledged MPDU is removed from the buffer, retransmitted otherwise.
    */
-  void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode);
+  void NotifyGotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr);
   /**
    * \param recipient Address of peer station involved in block ack mechanism.
    * \param tid Traffic ID.
diff -Naur ns-3.24.1/src/wifi/model/capability-information.cc ns-3.25/src/wifi/model/capability-information.cc
--- ns-3.24.1/src/wifi/model/capability-information.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/capability-information.cc	2016-03-23 21:36:53.000000000 -0700
@@ -47,6 +47,26 @@
   Set (1);
 }
 
+void
+CapabilityInformation::SetShortPreamble (bool shortPreamble)
+{
+  NS_LOG_FUNCTION (this);
+  if (shortPreamble)
+    {
+      Set (5);
+    }
+}
+
+void
+CapabilityInformation::SetShortSlotTime (bool shortSlotTime)
+{
+  NS_LOG_FUNCTION (this);
+  if (shortSlotTime)
+    {
+      Set (10);
+    }
+}
+
 bool
 CapabilityInformation::IsEss (void) const
 {
@@ -61,6 +81,20 @@
   return Is (1);
 }
 
+bool
+CapabilityInformation::IsShortPreamble (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return Is (5);
+}
+
+bool
+CapabilityInformation::IsShortSlotTime (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return Is (10);
+}
+
 void
 CapabilityInformation::Set (uint8_t n)
 {
diff -Naur ns-3.24.1/src/wifi/model/capability-information.h ns-3.25/src/wifi/model/capability-information.h
--- ns-3.24.1/src/wifi/model/capability-information.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/capability-information.h	2016-03-23 21:36:53.000000000 -0700
@@ -46,6 +46,22 @@
    * in the capability information field.
    */
   void SetIbss (void);
+  /**
+   * Set the short preamble bit
+   * in the capability information field.
+   *
+   * /param shortPreamble the short preamble bit
+   *
+   */
+  void SetShortPreamble (bool shortPreamble);
+  /**
+   * Set the short slot time bit
+   * in the capability information field.
+   *
+   * /param shortslotTime the short preamble bit
+   *
+   */
+  void SetShortSlotTime (bool shortSlotTime);
 
   /**
    * Check if the Extended Service Set (ESS) bit
@@ -63,6 +79,22 @@
    *         field is set to 1
    */
   bool IsIbss (void) const;
+  /**
+   * Check if the short preamble bit
+   * in the capability information field is set to 1.
+   *
+   * \return short preamble bit in the capability information
+   *         field is set to 1
+   */
+  bool IsShortPreamble (void) const;
+  /**
+   * Check if the short slot time
+   * in the capability information field is set to 1.
+   *
+   * \return short slot time bit in the capability information
+   *         field is set to 1
+   */
+  bool IsShortSlotTime (void) const;
 
   /**
    * Return the serialized size of capability
diff -Naur ns-3.24.1/src/wifi/model/cara-wifi-manager.cc ns-3.25/src/wifi/model/cara-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/cara-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/cara-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -178,10 +178,9 @@
 }
 
 WifiTxVector
-CaraWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
-                                    uint32_t size)
+CaraWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   CaraWifiRemoteStation *station = (CaraWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -205,7 +204,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/cara-wifi-manager.h ns-3.25/src/wifi/model/cara-wifi-manager.h
--- ns-3.24.1/src/wifi/model/cara-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/cara-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -57,7 +57,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *station,
                           Ptr<const Packet> packet, bool normally);
diff -Naur ns-3.24.1/src/wifi/model/constant-rate-wifi-manager.cc ns-3.25/src/wifi/model/constant-rate-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/constant-rate-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/constant-rate-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -114,10 +114,10 @@
 }
 
 WifiTxVector
-ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+ConstantRateWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
-  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), 1, 0, GetChannelWidth (st), GetAggregation (st), false);
+  NS_LOG_FUNCTION (this << st);
+  return WifiTxVector (m_dataMode, GetDefaultTxPowerLevel (), GetLongRetryCount (st), GetShortGuardInterval (st), Min(GetNumberOfTransmitAntennas (), GetNumberOfSupportedRxAntennas (st)), 0, GetChannelWidth (st), GetAggregation (st), false);
 }
 
 WifiTxVector
diff -Naur ns-3.24.1/src/wifi/model/constant-rate-wifi-manager.h ns-3.25/src/wifi/model/constant-rate-wifi-manager.h
--- ns-3.24.1/src/wifi/model/constant-rate-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/constant-rate-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -54,7 +54,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/dca-txop.cc ns-3.25/src/wifi/model/dca-txop.cc
--- ns-3.24.1/src/wifi/model/dca-txop.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dca-txop.cc	2016-03-23 21:36:53.000000000 -0700
@@ -48,7 +48,10 @@
     : m_txop (txop)
   {
   }
-
+  virtual bool IsEdca (void) const
+  {
+    return false;
+  }
 private:
   virtual void DoNotifyAccessGranted (void)
   {
@@ -277,9 +280,7 @@
 {
   NS_LOG_FUNCTION (this << packet << &hdr);
   WifiMacTrailer fcs;
-  uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
-  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr,
-                                     packet, fullPacketSize);
+  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr, packet);
   m_queue->Enqueue (packet, hdr);
   StartAccessIfNeeded ();
 }
@@ -323,14 +324,6 @@
   return m_low;
 }
 
-bool
-DcaTxop::NeedRts (Ptr<const Packet> packet, const WifiMacHeader *header)
-{
-  NS_LOG_FUNCTION (this << packet << header);
-  return m_stationManager->NeedRts (header->GetAddr1 (), header,
-                                    packet);
-}
-
 void
 DcaTxop::DoInitialize ()
 {
@@ -475,14 +468,6 @@
         {
           WifiMacHeader hdr;
           Ptr<Packet> fragment = GetFragmentPacket (&hdr);
-          if (NeedRts (fragment, &hdr))
-            {
-              params.EnableRts ();
-            }
-          else
-            {
-              params.DisableRts ();
-            }
           if (IsLastFragment ())
             {
               NS_LOG_DEBUG ("fragmenting last fragment size=" << fragment->GetSize ());
@@ -498,16 +483,6 @@
         }
       else
         {
-          if (NeedRts (m_currentPacket, &m_currentHdr))
-            {
-              params.EnableRts ();
-              NS_LOG_DEBUG ("tx unicast rts");
-            }
-          else
-            {
-              params.DisableRts ();
-              NS_LOG_DEBUG ("tx unicast");
-            }
           params.DisableNextData ();
           Low ()->StartTransmission (m_currentPacket, &m_currentHdr,
                                      params, m_transmissionListener);
diff -Naur ns-3.24.1/src/wifi/model/dca-txop.h ns-3.25/src/wifi/model/dca-txop.h
--- ns-3.24.1/src/wifi/model/dca-txop.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dca-txop.h	2016-03-23 21:36:53.000000000 -0700
@@ -228,7 +228,7 @@
    */
   void GotAck (double snr, WifiMode txMode);
   /**
-   * Event handler when an ACK is received.
+   * Event handler when an ACK is missed.
    */
   void MissedAck (void);
   /**
@@ -256,16 +256,6 @@
   void StartAccessIfNeeded (void);
 
   /**
-   * Check if the current packet should be sent with a RTS protection.
-   *
-   * \param packet
-   * \param header
-   *
-   * \return true if RTS protection should be used,
-   *         false otherwise
-   */
-  bool NeedRts (Ptr<const Packet> packet, const WifiMacHeader *header);
-  /**
    * Check if RTS should be re-transmitted if CTS was missed.
    *
    * \return true if RTS should be re-transmitted,
diff -Naur ns-3.24.1/src/wifi/model/dcf.h ns-3.25/src/wifi/model/dcf.h
--- ns-3.24.1/src/wifi/model/dcf.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dcf.h	2016-03-23 21:36:53.000000000 -0700
@@ -35,15 +35,15 @@
   static TypeId GetTypeId (void);
 
   /**
-   * Set the minimum congestion window size.
+   * Set the minimum contention window size.
    *
-   * \param minCw the minimum congestion window size
+   * \param minCw the minimum contention window size
    */
   virtual void SetMinCw (uint32_t minCw) = 0;
   /**
-   * Set the maximum congestion window size.
+   * Set the maximum contention window size.
    *
-   * \param maxCw the maximum congestion window size
+   * \param maxCw the maximum contention window size
    */
   virtual void SetMaxCw (uint32_t maxCw) = 0;
   /**
@@ -54,15 +54,15 @@
    */
   virtual void SetAifsn (uint32_t aifsn) = 0;
   /**
-   * Return the minimum congestion window size.
+   * Return the minimum contention window size.
    *
-   * \return the minimum congestion window size
+   * \return the minimum contention window size
    */
   virtual uint32_t GetMinCw (void) const = 0;
   /**
-   * Return the maximum congestion window size.
+   * Return the maximum contention window size.
    *
-   * \return the maximum congestion window size
+   * \return the maximum contention window size
    */
   virtual uint32_t GetMaxCw (void) const = 0;
   /**
diff -Naur ns-3.24.1/src/wifi/model/dcf-manager.cc ns-3.25/src/wifi/model/dcf-manager.cc
--- ns-3.24.1/src/wifi/model/dcf-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dcf-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -61,15 +61,23 @@
 void
 DcfState::SetCwMin (uint32_t minCw)
 {
+  bool changed = (m_cwMin != minCw);
   m_cwMin = minCw;
-  ResetCw ();
+  if (changed == true)
+    {
+      ResetCw ();
+    }
 }
 
 void
 DcfState::SetCwMax (uint32_t maxCw)
 {
+  bool changed = (m_cwMax != maxCw);
   m_cwMax = maxCw;
-  ResetCw ();
+  if (changed == true)
+    {
+      ResetCw ();
+    }
 }
 
 uint32_t
@@ -637,6 +645,21 @@
         {
           uint32_t nus = (Simulator::Now () - backoffStart).GetMicroSeconds ();
           uint32_t nIntSlots = nus / m_slotTimeUs;
+          /*
+           * EDCA behaves slightly different to DCA. For EDCA we
+           * decrement once at the slot boundary at the end of AIFS as
+           * well as once at the end of each clear slot
+           * thereafter. For DCA we only decrement at the end of each
+           * clear slot after DIFS. We account for the extra backoff
+           * by incrementing the slot count here in the case of
+           * EDCA. The if statement whose body we are in has confirmed
+           * that a minimum of AIFS has elapsed since last busy
+           * medium.
+           */
+          if (state->IsEdca ())
+            {
+              nIntSlots++;
+            }
           uint32_t n = std::min (nIntSlots, state->GetBackoffSlots ());
           MY_DEBUG ("dcf " << k << " dec backoff slots=" << n);
           Time backoffUpdateBound = backoffStart + MicroSeconds (n * m_slotTimeUs);
diff -Naur ns-3.24.1/src/wifi/model/dcf-manager.h ns-3.25/src/wifi/model/dcf-manager.h
--- ns-3.24.1/src/wifi/model/dcf-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dcf-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -50,6 +50,16 @@
   virtual ~DcfState ();
 
   /**
+   * \return whether this DCF state is an EDCA state
+   *
+   * This method, which must be overridden in derived classes,
+   * indicates whether DCF or EDCAF rules should be used for this
+   * channel access function. This affects the behavior of DcfManager
+   * when dealing with this instance. 
+   */
+  virtual bool IsEdca (void) const = 0;
+
+  /**
    * \param aifsn the number of slots which make up an AIFS for a specific DCF.
    *        a DIFS corresponds to an AIFSN = 2.
    *
diff -Naur ns-3.24.1/src/wifi/model/dsss-error-rate-model.cc ns-3.25/src/wifi/model/dsss-error-rate-model.cc
--- ns-3.24.1/src/wifi/model/dsss-error-rate-model.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dsss-error-rate-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -26,7 +26,7 @@
 
 NS_LOG_COMPONENT_DEFINE ("DsssErrorRateModel");
 
-#ifndef ENABLE_GSL
+#ifndef HAVE_GSL
 const double DsssErrorRateModel::WLAN_SIR_PERFECT = 10.0;
 const double DsssErrorRateModel::WLAN_SIR_IMPOSSIBLE = 0.1;
 #endif
@@ -61,7 +61,7 @@
 DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (double sinr, uint32_t nbits)
 {
   NS_LOG_FUNCTION_NOARGS ();
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
   //symbol error probability
   double EbN0 = sinr * 22000000.0 / 1375000.0 / 4.0;
   double sep = SymbolErrorProb16Cck (4.0 * EbN0 / 2.0);
@@ -95,7 +95,8 @@
 DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (double sinr, uint32_t nbits)
 {
   NS_LOG_FUNCTION_NOARGS ();
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
+  NS_LOG_DEBUG ("GSL enabled ");
   //symbol error probability
   double EbN0 = sinr * 22000000.0 / 1375000.0 / 8.0;
   double sep = SymbolErrorProb256Cck (8.0 * EbN0 / 2.0);
@@ -127,7 +128,7 @@
 #endif
 }
 
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
 double
 IntegralFunction (double x, void *params)
 {
diff -Naur ns-3.24.1/src/wifi/model/dsss-error-rate-model.h ns-3.25/src/wifi/model/dsss-error-rate-model.h
--- ns-3.24.1/src/wifi/model/dsss-error-rate-model.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/dsss-error-rate-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -22,7 +22,7 @@
 #define DSS_ERROR_RATE_MODEL_H
 
 #include <stdint.h>
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
 #include <gsl/gsl_math.h>
 #include <gsl/gsl_integration.h>
 #include <gsl/gsl_cdf.h>
@@ -31,7 +31,7 @@
 
 namespace ns3 {
 
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
 typedef struct FunctionParameterType
 {
   double beta;
@@ -78,7 +78,7 @@
   /**
    * Return the chunk success rate of the differential BPSK.
    *
-   * \param sinr the SINR of the chunk
+   * \param sinr the SINR ratio (not dB) of the chunk
    * \param nbits the size of the chunk
    *
    * \return the chunk success rate of the differential BPSK
@@ -87,7 +87,7 @@
   /**
    * Return the chunk success rate of the differential encoded QPSK.
    *
-   * \param sinr the SINR of the chunk
+   * \param sinr the SINR ratio (not dB) of the chunk
    * \param nbits the size of the chunk
    *
    * \return the chunk success rate of the differential encoded QPSK.
@@ -97,7 +97,7 @@
    * Return the chunk success rate of the differential encoded QPSK for
    * 5.5Mbps data rate.
    *
-   * \param sinr the SINR of the chunk
+   * \param sinr the SINR ratio (not dB) of the chunk
    * \param nbits the size of the chunk
    *
    * \return the chunk success rate of the differential encoded QPSK for
@@ -107,13 +107,13 @@
    * Return the chunk success rate of the differential encoded QPSK for
    * 11Mbps data rate.
    *
-   * \param sinr the SINR of the chunk
+   * \param sinr the SINR ratio (not dB) of the chunk
    * \param nbits the size of the chunk
    *
    * \return the chunk success rate of the differential encoded QPSK for
    */
   static double GetDsssDqpskCck11SuccessRate (double sinr,uint32_t nbits);
-#ifdef ENABLE_GSL
+#ifdef HAVE_GSL
   static double SymbolErrorProb16Cck (double e2); /// equation (18) in Pursley's paper
   static double SymbolErrorProb256Cck (double e1); /// equation (17) in Pursley's paper
 #else
diff -Naur ns-3.24.1/src/wifi/model/edca-txop-n.cc ns-3.25/src/wifi/model/edca-txop-n.cc
--- ns-3.24.1/src/wifi/model/edca-txop-n.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/edca-txop-n.cc	2016-03-23 21:36:53.000000000 -0700
@@ -32,6 +32,7 @@
 #include "random-stream.h"
 #include "wifi-mac-queue.h"
 #include "msdu-aggregator.h"
+#include "mpdu-aggregator.h"
 #include "mgt-headers.h"
 #include "qos-blocked-destinations.h"
 
@@ -50,6 +51,11 @@
   {
   }
 
+  virtual bool IsEdca (void) const
+  {
+    return true;
+  }
+
 private:
   virtual void DoNotifyAccessGranted (void)
   {
@@ -109,13 +115,13 @@
   {
     m_txop->MissedAck ();
   }
-  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode txMode)
+  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, double rxSnr, WifiMode txMode, double dataSnr)
   {
-    m_txop->GotBlockAck (blockAck, source,txMode);
+    m_txop->GotBlockAck (blockAck, source, rxSnr, txMode, dataSnr);
   }
-  virtual void MissedBlockAck (void)
+  virtual void MissedBlockAck (uint32_t nMpdus)
   {
-    m_txop->MissedBlockAck ();
+    m_txop->MissedBlockAck (nMpdus);
   }
   virtual void StartNext (void)
   {
@@ -163,9 +169,9 @@
   {
     m_txop->CompleteAmpduTransfer (recipient, tid);
   }
-  virtual void SetAmpdu (bool ampdu)
+  virtual void SetAmpdu (Mac48Address dest, bool enableAmpdu)
   {
-    return m_txop->SetAmpduExist (ampdu);
+    return m_txop->SetAmpduExist (dest, enableAmpdu);
   }
   virtual void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp)
   {
@@ -203,6 +209,10 @@
   {
     return m_txop->GetMsduAggregator ();
   }
+  virtual Ptr<MpduAggregator> GetMpduAggregator (void) const
+  {
+    return m_txop->GetMpduAggregator ();
+  }
   virtual Mac48Address GetSrcAddressForAggregation (const WifiMacHeader &hdr)
   {
     return m_txop->MapSrcAddressForAggregation (hdr);
@@ -225,21 +235,6 @@
     .SetParent<ns3::Dcf> ()
     .SetGroupName ("Wifi")
     .AddConstructor<EdcaTxopN> ()
-    .AddAttribute ("BlockAckThreshold",
-                   "If number of packets in this queue reaches this value, "
-                   "block ack mechanism is used. If this value is 0, block ack is never used.",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&EdcaTxopN::SetBlockAckThreshold,
-                                         &EdcaTxopN::GetBlockAckThreshold),
-                   MakeUintegerChecker<uint8_t> (0, 64))
-    .AddAttribute ("BlockAckInactivityTimeout",
-                   "Represents max time (blocks of 1024 micro seconds) allowed for block ack"
-                   "inactivity. If this value isn't equal to 0 a timer start after that a"
-                   "block ack setup is completed and will be reset every time that a block"
-                   "ack frame is received. If this value is 0, block ack inactivity timeout won't be used.",
-                   UintegerValue (0),
-                   MakeUintegerAccessor (&EdcaTxopN::SetBlockAckInactivityTimeout),
-                   MakeUintegerChecker<uint16_t> ())
     .AddAttribute ("Queue",
                    "The WifiMacQueue object",
                    PointerValue (),
@@ -252,10 +247,10 @@
 EdcaTxopN::EdcaTxopN ()
   : m_manager (0),
     m_currentPacket (0),
-    m_aggregator (0),
+    m_msduAggregator (0),
+    m_mpduAggregator (0),
     m_typeOfStation (STA),
-    m_blockAckType (COMPRESSED_BLOCK_ACK),
-    m_ampduExist (false)
+    m_blockAckType (COMPRESSED_BLOCK_ACK)
 {
   NS_LOG_FUNCTION (this);
   m_transmissionListener = new EdcaTxopN::TransmissionListener (this);
@@ -299,7 +294,8 @@
   m_baManager = 0;
   m_blockAckListener = 0;
   m_txMiddle = 0;
-  m_aggregator = 0;
+  m_msduAggregator = 0;
+  m_mpduAggregator = 0;
 }
 
 bool
@@ -495,7 +491,6 @@
               return;
             }
           if (m_currentHdr.IsQosData () && !m_currentHdr.GetAddr1 ().IsBroadcast ()
-              && m_blockAckThreshold > 0
               && !m_baManager->ExistsAgreement (m_currentHdr.GetAddr1 (), m_currentHdr.GetQosTid ())
               && SetupBlockAckIfNeeded ())
             {
@@ -548,13 +543,10 @@
         {
           params.EnableAck ();
         }
-      if (NeedFragmentation () && ((m_currentHdr.IsQosData ()
-                                    && !m_currentHdr.IsQosAmsdu ())
-                                   ||
-                                   (m_currentHdr.IsData ()
-                                    && !m_currentHdr.IsQosData () && m_currentHdr.IsQosAmsdu ()))
-          && (m_blockAckThreshold == 0
-              || m_blockAckType == BASIC_BLOCK_ACK))
+      if (((m_currentHdr.IsQosData () && !m_currentHdr.IsQosAmsdu ())
+           ||(m_currentHdr.IsData () && !m_currentHdr.IsQosData () && m_currentHdr.IsQosAmsdu ()))
+          && (m_blockAckThreshold == 0 || m_blockAckType == BASIC_BLOCK_ACK)
+          && NeedFragmentation ())
         {
           //With COMPRESSED_BLOCK_ACK fragmentation must be avoided.
           params.DisableRts ();
@@ -581,11 +573,11 @@
               && m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (),
                                                WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 (), &tstamp)
               && !m_currentHdr.GetAddr1 ().IsBroadcast ()
-              && m_aggregator != 0 && !m_currentHdr.IsRetry ())
+              && m_msduAggregator != 0 && !m_currentHdr.IsRetry ())
             {
               /* here is performed aggregation */
               Ptr<Packet> currentAggregatedPacket = Create<Packet> ();
-              m_aggregator->Aggregate (m_currentPacket, currentAggregatedPacket,
+              m_msduAggregator->Aggregate (m_currentPacket, currentAggregatedPacket,
                                        MapSrcAddressForAggregation (peekedHdr),
                                        MapDestAddressForAggregation (peekedHdr));
               bool aggregated = false;
@@ -595,7 +587,7 @@
                                                                              m_currentHdr.GetAddr1 (), &tstamp);
               while (peekedPacket != 0)
                 {
-                  aggregated = m_aggregator->Aggregate (peekedPacket, currentAggregatedPacket,
+                  aggregated = m_msduAggregator->Aggregate (peekedPacket, currentAggregatedPacket,
                                                         MapSrcAddressForAggregation (peekedHdr),
                                                         MapDestAddressForAggregation (peekedHdr));
                   if (aggregated)
@@ -619,20 +611,10 @@
                   NS_LOG_DEBUG ("tx unicast A-MSDU");
                 }
             }
-          if (NeedRts ())
-            {
-              params.EnableRts ();
-              NS_LOG_DEBUG ("tx unicast rts");
-            }
-          else
-            {
-              params.DisableRts ();
-              NS_LOG_DEBUG ("tx unicast");
-            }
           params.DisableNextData ();
           m_low->StartTransmission (m_currentPacket, &m_currentHdr,
                                     params, m_transmissionListener);
-          if (!GetAmpduExist ())
+          if (!GetAmpduExist (m_currentHdr.GetAddr1 ()))
             {
               CompleteTx ();
             }
@@ -675,7 +657,7 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
-      if (GetAmpduExist ())
+      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
         {
           m_low->FlushAggregateQueue ();
           uint8_t tid = 0;
@@ -683,9 +665,15 @@
             {
               tid = m_currentHdr.GetQosTid ();
             }
+          else if (m_currentHdr.IsBlockAckReq ())
+            {
+              CtrlBAckRequestHeader baReqHdr;
+              m_currentPacket->PeekHeader (baReqHdr);
+              tid = baReqHdr.GetTidInfo ();
+            }
           else
             {
-              NS_FATAL_ERROR ("Current packet is not Qos Data");
+              NS_FATAL_ERROR ("Current packet is not Qos Data nor BlockAckReq");
             }
 
           if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
@@ -760,9 +748,7 @@
 {
   NS_LOG_FUNCTION (this << packet << &hdr);
   WifiMacTrailer fcs;
-  uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
-  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr,
-                                     packet, fullPacketSize);
+  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr, packet);
   m_queue->Enqueue (packet, hdr);
   StartAccessIfNeeded ();
 }
@@ -827,7 +813,7 @@
         {
           m_txFailedCallback (m_currentHdr);
         }
-      if (GetAmpduExist ())
+      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
         {
           uint8_t tid = 0;
           if (m_currentHdr.IsQosData ())
@@ -884,13 +870,34 @@
 }
 
 void
-EdcaTxopN::MissedBlockAck (void)
+EdcaTxopN::MissedBlockAck (uint32_t nMpdus)
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("missed block ack");
+  uint8_t tid = 0;
+  if (m_currentHdr.IsQosData ())
+    {
+      tid = m_currentHdr.GetQosTid ();
+    }
+  else if (m_currentHdr.IsBlockAckReq ())
+    {
+      CtrlBAckRequestHeader baReqHdr;
+      m_currentPacket->PeekHeader (baReqHdr);
+      tid = baReqHdr.GetTidInfo ();
+    }
+  else if (m_currentHdr.IsBlockAck ())
+    {
+      CtrlBAckResponseHeader baRespHdr;
+      m_currentPacket->PeekHeader (baRespHdr);
+      tid = baRespHdr.GetTidInfo ();
+    }
+  if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
+    {
+      m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0);
+    }
   if (NeedBarRetransmission ())
     {
-      if (!GetAmpduExist ())
+      if (!GetAmpduExist (m_currentHdr.GetAddr1 ()))
         {
           //should i report this to station addressed by ADDR1?
           NS_LOG_DEBUG ("Retransmit block ack request");
@@ -902,24 +909,20 @@
           NS_LOG_DEBUG ("Transmit Block Ack Request");
           CtrlBAckRequestHeader reqHdr;
           reqHdr.SetType (COMPRESSED_BLOCK_ACK);
-          uint8_t tid = 0;
           if (m_currentHdr.IsQosData ())
             {
-              tid = m_currentHdr.GetQosTid ();
               reqHdr.SetStartingSequence (m_currentHdr.GetSequenceNumber ());
             }
           else if (m_currentHdr.IsBlockAckReq ())
             {
               CtrlBAckRequestHeader baReqHdr;
               m_currentPacket->PeekHeader (baReqHdr);
-              tid = baReqHdr.GetTidInfo ();
               reqHdr.SetStartingSequence (baReqHdr.GetStartingSequence ());
             }
           else if (m_currentHdr.IsBlockAck ())
             {
               CtrlBAckResponseHeader baRespHdr;
               m_currentPacket->PeekHeader (baRespHdr);
-              tid = baRespHdr.GetTidInfo ();
               reqHdr.SetStartingSequence (m_currentHdr.GetSequenceNumber ());
             }
           reqHdr.SetTidInfo (tid);
@@ -957,7 +960,13 @@
 Ptr<MsduAggregator>
 EdcaTxopN::GetMsduAggregator (void) const
 {
-  return m_aggregator;
+  return m_msduAggregator;
+}
+
+Ptr<MpduAggregator>
+EdcaTxopN::GetMpduAggregator (void) const
+{
+  return m_mpduAggregator;
 }
 
 void
@@ -985,14 +994,6 @@
 }
 
 bool
-EdcaTxopN::NeedRts (void)
-{
-  NS_LOG_FUNCTION (this);
-  return m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), &m_currentHdr,
-                                    m_currentPacket);
-}
-
-bool
 EdcaTxopN::NeedRtsRetransmission (void)
 {
   NS_LOG_FUNCTION (this);
@@ -1189,7 +1190,14 @@
 EdcaTxopN::SetMsduAggregator (Ptr<MsduAggregator> aggr)
 {
   NS_LOG_FUNCTION (this << aggr);
-  m_aggregator = aggr;
+  m_msduAggregator = aggr;
+}
+
+void
+EdcaTxopN::SetMpduAggregator (Ptr<MpduAggregator> aggr)
+{
+  NS_LOG_FUNCTION (this << aggr);
+  m_mpduAggregator = aggr;
 }
 
 void
@@ -1197,9 +1205,7 @@
 {
   NS_LOG_FUNCTION (this << packet << &hdr);
   WifiMacTrailer fcs;
-  uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
-  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr,
-                                     packet, fullPacketSize);
+  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr, packet);
   m_queue->PushFront (packet, hdr);
   StartAccessIfNeeded ();
 }
@@ -1235,11 +1241,11 @@
 }
 
 void
-EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode)
+EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr)
 {
-  NS_LOG_FUNCTION (this << blockAck << recipient);
+  NS_LOG_FUNCTION (this << blockAck << recipient << rxSnr << txMode.GetUniqueName () << dataSnr);
   NS_LOG_DEBUG ("got block ack from=" << recipient);
-  m_baManager->NotifyGotBlockAck (blockAck, recipient, txMode);
+  m_baManager->NotifyGotBlockAck (blockAck, recipient, rxSnr, txMode, dataSnr);
   if (!m_txOkCallback.IsNull ())
     {
       m_txOkCallback (m_currentHdr);
@@ -1261,20 +1267,33 @@
     {
       m_baManager->SwitchToBlockAckIfNeeded (recipient, tid, sequence);
     }
-  if ((m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)) && (m_low->GetMpduAggregator () == 0))
+  if ((m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED)) && (GetMpduAggregator () == 0))
     {
       m_currentHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
     }
 }
 
-bool EdcaTxopN::GetAmpduExist (void)
+bool EdcaTxopN::GetAmpduExist (Mac48Address dest)
 {
-  return m_ampduExist;
+  NS_LOG_FUNCTION (this << dest);
+  if (m_aMpduEnabled.find (dest) != m_aMpduEnabled.end ())
+    {
+      return m_aMpduEnabled.find (dest)->second;
+    }
+  return false;
 }
 
-void EdcaTxopN::SetAmpduExist (bool ampdu)
+void EdcaTxopN::SetAmpduExist (Mac48Address dest, bool enableAmpdu)
 {
-  m_ampduExist = ampdu;
+  NS_LOG_FUNCTION (this << dest << enableAmpdu);
+  if (m_aMpduEnabled.find (dest) != m_aMpduEnabled.end () && m_aMpduEnabled.find (dest)->second != enableAmpdu)
+    {
+      m_aMpduEnabled.erase (m_aMpduEnabled.find (dest));
+    }
+  if (m_aMpduEnabled.find (dest) == m_aMpduEnabled.end ())
+    {
+      m_aMpduEnabled.insert (std::make_pair (dest, enableAmpdu));
+    }
 }
 
 void
@@ -1312,7 +1331,7 @@
 
   uint32_t packets = m_queue->GetNPacketsByTidAndAddress (tid, WifiMacHeader::ADDR1, recipient);
 
-  if (packets >= m_blockAckThreshold)
+  if ((m_blockAckThreshold > 0 && packets >= m_blockAckThreshold) || (packets > 1 && m_mpduAggregator != 0) || m_stationManager->HasVhtSupported ())
     {
       /* Block ack setup */
       uint16_t startingSequence = m_txMiddle->GetNextSeqNumberByTidAndAddress (tid, recipient);
@@ -1446,6 +1465,7 @@
 
   uint16_t sequence = m_txMiddle->GetNextSequenceNumberfor (&m_currentHdr);
   m_currentHdr.SetSequenceNumber (sequence);
+  m_stationManager->UpdateFragmentationThreshold ();
   m_currentHdr.SetFragmentNumber (0);
   m_currentHdr.SetNoMoreFragments ();
   m_currentHdr.SetNoRetry ();
diff -Naur ns-3.24.1/src/wifi/model/edca-txop-n.h ns-3.25/src/wifi/model/edca-txop-n.h
--- ns-3.24.1/src/wifi/model/edca-txop-n.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/edca-txop-n.h	2016-03-23 21:36:53.000000000 -0700
@@ -35,6 +35,8 @@
 #include <map>
 #include <list>
 
+class AmpduAggregationTest;
+
 namespace ns3 {
 
 class DcfState;
@@ -47,6 +49,7 @@
 class RandomStream;
 class QosBlockedDestinations;
 class MsduAggregator;
+class MpduAggregator;
 class MgtAddBaResponseHeader;
 class BlockAckManager;
 class MgtDelBaHeader;
@@ -82,6 +85,9 @@
 class EdcaTxopN : public Dcf
 {
 public:
+  // Allow test cases to access private members
+  friend class ::AmpduAggregationTest;
+
   /**
    * typedef for a callback to invoke when a
    * packet transmission was completed successfully.
@@ -92,6 +98,8 @@
    * packet transmission was failed.
    */
   typedef Callback <void, const WifiMacHeader&> TxFailed;
+  
+  std::map<Mac48Address, bool> m_aMpduEnabled;
 
   static TypeId GetTypeId (void);
   EdcaTxopN ();
@@ -161,6 +169,8 @@
   Ptr<MacLow> Low (void);
 
   Ptr<MsduAggregator> GetMsduAggregator (void) const;
+  Ptr<MpduAggregator> GetMpduAggregator (void) const;
+
   /**
    * \param recipient address of the peer station
    * \param tid traffic ID.
@@ -252,17 +262,19 @@
    *
    * \param blockAck
    * \param recipient
+   * \param rxSnr SNR of the block ack itself
    * \param txMode
+   * \param dataSnr reported data SNR from the peer
    */
-  void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, WifiMode txMode);
+  void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient, double rxSnr, WifiMode txMode, double dataSnr);
   /**
    * Event handler when a Block ACK timeout has occurred.
    */
-  void MissedBlockAck (void);
+  void MissedBlockAck (uint32_t nMpdus);
   void GotAddBaResponse (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient);
   void GotDelBaFrame (const MgtDelBaHeader *delBaHdr, Mac48Address recipient);
   /**
-   * Event handler when an ACK is received.
+   * Event handler when an ACK is missed.
    */
   void MissedAck (void);
   /**
@@ -288,13 +300,6 @@
    */
   void StartAccessIfNeeded (void);
   /**
-   * Check if the current packet should be sent with a RTS protection.
-   *
-   * \return true if RTS protection should be used,
-   *         false otherwise
-   */
-  bool NeedRts (void);
-  /**
    * Check if RTS should be re-transmitted if CTS was missed.
    *
    * \return true if RTS should be re-transmitted,
@@ -379,6 +384,7 @@
   void Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr);
 
   void SetMsduAggregator (Ptr<MsduAggregator> aggr);
+  void SetMpduAggregator (Ptr<MpduAggregator> aggr);
 
   /**
    * \param packet packet to send
@@ -411,8 +417,8 @@
   void SetBlockAckInactivityTimeout (uint16_t timeout);
   void SendDelbaFrame (Mac48Address addr, uint8_t tid, bool byOriginator);
   void CompleteMpduTx (Ptr<const Packet> packet, WifiMacHeader hdr, Time tstamp);
-  bool GetAmpduExist (void);
-  void SetAmpduExist (bool ampdu);
+  bool GetAmpduExist (Mac48Address dest);
+  void SetAmpduExist (Mac48Address dest, bool enableAmpdu);
 
   /**
    * Return the next sequence number for the given header.
@@ -543,7 +549,8 @@
   Ptr<const Packet> m_currentPacket;
 
   WifiMacHeader m_currentHdr;
-  Ptr<MsduAggregator> m_aggregator;
+  Ptr<MsduAggregator> m_msduAggregator;
+  Ptr<MpduAggregator> m_mpduAggregator;
   TypeOfStation m_typeOfStation;
   QosBlockedDestinations *m_qosBlockedDestinations;
   BlockAckManager *m_baManager;
@@ -555,7 +562,6 @@
   Time m_currentPacketTimestamp;
   uint16_t m_blockAckInactivityTimeout;
   struct Bar m_currentBar;
-  bool m_ampduExist;
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/erp-information.cc ns-3.25/src/wifi/model/erp-information.cc
--- ns-3.24.1/src/wifi/model/erp-information.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/erp-information.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,151 @@
+/* -*- 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 "erp-information.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("ErpInformation");
+
+ErpInformation::ErpInformation ()
+  : m_erpInformation (0),
+    m_erpSupported (0)
+{
+}
+
+WifiInformationElementId
+ErpInformation::ElementId () const
+{
+  return IE_ERP_INFORMATION;
+}
+
+void
+ErpInformation::SetErpSupported (uint8_t erpSupported)
+{
+  m_erpSupported = erpSupported;
+}
+
+void
+ErpInformation::SetBarkerPreambleMode (uint8_t barkerPreambleMode)
+{
+  m_erpInformation |= (barkerPreambleMode & 0x01) << 2;
+}
+
+void
+ErpInformation::SetUseProtection (uint8_t useProtection)
+{
+  m_erpInformation |= (useProtection & 0x01) << 1;
+}
+
+void
+ErpInformation::SetNonErpPresent (uint8_t nonErpPresent)
+{
+  m_erpInformation |= nonErpPresent & 0x01;
+}
+
+uint8_t
+ErpInformation::GetBarkerPreambleMode (void) const
+{
+  return ((m_erpInformation >> 2) & 0x01);
+}
+
+uint8_t
+ErpInformation::GetUseProtection (void) const
+{
+  return ((m_erpInformation >> 1) & 0x01);
+}
+
+uint8_t
+ErpInformation::GetNonErpPresent (void) const
+{
+  return (m_erpInformation & 0x01);
+}
+
+uint8_t
+ErpInformation::GetInformationFieldSize () const
+{
+  NS_ASSERT (m_erpSupported > 0);
+  return 1;
+}
+
+Buffer::Iterator
+ErpInformation::Serialize (Buffer::Iterator i) const
+{
+  if (m_erpSupported < 1)
+    {
+      return i;
+    }
+  return WifiInformationElement::Serialize (i);
+}
+
+uint16_t
+ErpInformation::GetSerializedSize () const
+{
+  if (m_erpSupported < 1)
+    {
+      return 0;
+    }
+  return WifiInformationElement::GetSerializedSize ();
+}
+
+void
+ErpInformation::SerializeInformationField (Buffer::Iterator start) const
+{
+  if (m_erpSupported == 1)
+    {
+      start.WriteU8 (m_erpInformation);
+    }
+}
+
+uint8_t
+ErpInformation::DeserializeInformationField (Buffer::Iterator start,
+                                             uint8_t length)
+{
+  Buffer::Iterator i = start;
+  m_erpInformation = i.ReadU8 ();
+  return length;
+}
+
+ATTRIBUTE_HELPER_CPP (ErpInformation);
+
+std::ostream &
+operator << (std::ostream &os, const ErpInformation &erpinformation)
+{
+  os <<  bool (erpinformation.GetBarkerPreambleMode ())
+     << "|" << bool (erpinformation.GetUseProtection ())
+     << "|" << bool (erpinformation.GetNonErpPresent ());
+
+  return os;
+}
+
+std::istream &operator >> (std::istream &is, ErpInformation &erpinformation)
+{
+  bool c1, c2, c3;
+  is >> c1 >> c2 >> c3;
+  erpinformation.SetBarkerPreambleMode (c1);
+  erpinformation.SetUseProtection (c2);
+  erpinformation.SetNonErpPresent (c3);
+
+  return is;
+}
+
+} //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/erp-information.h ns-3.25/src/wifi/model/erp-information.h
--- ns-3.24.1/src/wifi/model/erp-information.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/erp-information.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,119 @@
+/* -*- 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>
+ */
+
+#ifndef ERP_INFORMATION_H
+#define ERP_INFORMATION_H
+
+#include <stdint.h>
+#include <ostream>
+#include "ns3/buffer.h"
+#include "ns3/wifi-information-element.h"
+
+namespace ns3 {
+
+/**
+ * \brief The ErpInformation Information Element
+ * \ingroup wifi
+ *
+ * This class knows how to serialise and deserialise the ErpInformation Information Element.
+ */
+class ErpInformation : public WifiInformationElement
+{
+public:
+  ErpInformation ();
+  void SetErpSupported (uint8_t erpSupported);
+  
+  /**
+   * Set the Barker_Preamble_Mode field in the ErpInformation information element.
+   *
+   * \param barkerPreambleMode the Barker_Preamble_Mode field in the ErpInformation information element
+   */
+  void SetBarkerPreambleMode (uint8_t barkerPreambleMode);
+  /**
+   * Set the Use_Protection field in the ErpInformation information element.
+   *
+   * \param useProtection the Use_Protection field in the ErpInformation information element
+   */
+  void SetUseProtection (uint8_t useProtection);
+  /**
+   * Set the Non_Erp_Present field in the ErpInformation information element.
+   *
+   * \param nonErpPresent the Non_Erp_Present field in the ErpInformation information element
+   */
+  void SetNonErpPresent (uint8_t nonErpPresent);
+
+  /*
+   * Return the Barker_Preamble_Mode field in the ErpInformation information element.
+   *
+   * \return the Barker_Preamble_Mode field in the ErpInformation information element
+   */
+  uint8_t GetBarkerPreambleMode (void) const;
+  /*
+   * Return the Use_Protection field in the ErpInformation information element.
+   *
+   * \return the Use_Protection field in the ErpInformation information element
+   */
+  uint8_t GetUseProtection (void) const;
+  /*
+   * Return the Non_Erp_Present field in the ErpInformation information element.
+   *
+   * \return the Non_Erp_Present field in the ErpInformation information element
+   */
+  uint8_t GetNonErpPresent (void) const;
+
+  WifiInformationElementId ElementId () const;
+  uint8_t GetInformationFieldSize () const;
+  void SerializeInformationField (Buffer::Iterator start) const;
+  uint8_t DeserializeInformationField (Buffer::Iterator start,
+                                       uint8_t length);
+    
+  /**
+   * This information element is a bit special in that it is only
+   * included if the STA is an ERP STA. To support this we
+   * override the Serialize and GetSerializedSize methods of
+   * WifiInformationElement.
+   *
+   * \param start
+   *
+   * \return an iterator
+   */
+  Buffer::Iterator Serialize (Buffer::Iterator start) const;
+  /**
+   * Return the serialized size of this ErpInformation information element.
+   *
+   * \return the serialized size of this ErpInformation information element
+   */
+  uint16_t GetSerializedSize () const;
+
+private:
+  uint8_t m_erpInformation;
+
+  //This is used to decide whether this element should be added to the frame or not
+  bool m_erpSupported;
+};
+
+std::ostream &operator << (std::ostream &os, const ErpInformation &erpinformation);
+std::istream &operator >> (std::istream &is, ErpInformation &erpinformation);
+
+ATTRIBUTE_HELPER_HEADER (ErpInformation);
+
+} //namespace ns3
+
+#endif /* ERP_INFORMATION_H */
diff -Naur ns-3.24.1/src/wifi/model/error-rate-model.cc ns-3.25/src/wifi/model/error-rate-model.cc
--- ns-3.24.1/src/wifi/model/error-rate-model.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/error-rate-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -34,20 +34,18 @@
 }
 
 double
-ErrorRateModel::CalculateSnr (WifiMode txMode, double ber) const
+ErrorRateModel::CalculateSnr (WifiTxVector txVector, double ber) const
 {
   //This is a very simple binary search.
   double low, high, precision;
   low = 1e-25;
   high = 1e25;
   precision = 1e-12;
-  WifiTxVector txVector;
-  txVector.SetMode (txMode);
   while (high - low > precision)
     {
       NS_ASSERT (high >= low);
       double middle = low + (high - low) / 2;
-      if ((1 - GetChunkSuccessRate (txMode, txVector, middle, 1)) > ber)
+      if ((1 - GetChunkSuccessRate (txVector.GetMode (), txVector, middle, 1)) > ber)
         {
           low = middle;
         }
diff -Naur ns-3.24.1/src/wifi/model/error-rate-model.h ns-3.25/src/wifi/model/error-rate-model.h
--- ns-3.24.1/src/wifi/model/error-rate-model.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/error-rate-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -38,12 +38,12 @@
   static TypeId GetTypeId (void);
 
   /**
-   * \param txMode a specific transmission mode
+   * \param txVector a specific transmission vector including WifiMode
    * \param ber a target ber
    *
    * \return the snr which corresponds to the requested ber
    */
-  double CalculateSnr (WifiMode txMode, double ber) const;
+  double CalculateSnr (WifiTxVector txVector, double ber) const;
 
   /**
    * A pure virtual method that must be implemented in the subclass.
@@ -54,8 +54,15 @@
    * The probability of successfully receiving the chunk depends on
    * the mode, the SNR, and the size of the chunk.
    *
-   * \param mode the Wi-Fi mode the chunk is sent
-   * \param txvector TXVECTOR of the transmission
+   * Note that both a WifiMode and a WifiTxVector (which contains a WifiMode)
+   * are passed into this method.  The WifiTxVector may be from a signal that
+   * contains multiple modes (e.g. PLCP header sent differently from PLCP
+   * payload).  Consequently, the mode parameter is what the method uses
+   * to calculate the chunk error rate, and the txVector is used for 
+   * other information as needed.
+   *
+   * \param mode the Wi-Fi mode applicable to this chunk
+   * \param txvector TXVECTOR of the overall transmission
    * \param snr the SNR of the chunk
    * \param nbits the number of bits in this chunk
    *
diff -Naur ns-3.24.1/src/wifi/model/ht-capabilities.cc ns-3.25/src/wifi/model/ht-capabilities.cc
--- ns-3.24.1/src/wifi/model/ht-capabilities.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ht-capabilities.cc	2016-03-23 21:36:53.000000000 -0700
@@ -175,11 +175,23 @@
 }
 
 void
+HtCapabilities::SetTxRxMcsSetUnequal (uint8_t txrxmcssetunequal)
+{
+  m_txRxMcsSetUnequal = txrxmcssetunequal;
+}
+
+void
 HtCapabilities::SetTxMaxNSpatialStreams (uint8_t maxtxspatialstreams)
 {
   m_txMaxNSpatialStreams = maxtxspatialstreams;
 }
 
+void
+HtCapabilities::SetTxUnequalModulation (uint8_t txunequalmodulation)
+{
+  m_txUnequalModulation = txunequalmodulation;
+}
+
 uint8_t
 HtCapabilities::GetLdpc (void) const
 {
@@ -237,7 +249,7 @@
 }
 
 bool
-HtCapabilities::IsSupportedMcs (uint8_t mcs)
+HtCapabilities::IsSupportedMcs (uint8_t mcs) const
 {
   if (m_rxMcsBitmask[mcs] == 1)
     {
@@ -246,6 +258,22 @@
   return false;
 }
 
+uint8_t
+HtCapabilities::GetRxHighestSupportedAntennas (void) const
+{
+  for (uint8_t nRx = 2; nRx <= 4; nRx++)
+  {
+    for (uint8_t mcs = (nRx - 1) * 8; mcs <= ((7 * nRx) + (nRx - 1)); mcs++)
+    {
+      if (IsSupportedMcs (mcs) == false)
+        {
+          return (nRx - 1);
+        }
+    }
+  }
+  return 4;
+}
+
 uint16_t
 HtCapabilities::GetRxHighestSupportedDataRate (void) const
 {
@@ -259,12 +287,25 @@
 }
 
 uint8_t
+HtCapabilities::GetTxRxMcsSetUnequal (void) const
+{
+  return m_txRxMcsSetUnequal;
+}
+
+
+uint8_t
 HtCapabilities::GetTxMaxNSpatialStreams (void) const
 {
   return m_txMaxNSpatialStreams;
 }
 
 uint8_t
+HtCapabilities::GetTxUnequalModulation (void) const
+{
+  return m_txUnequalModulation;
+}
+
+uint8_t
 HtCapabilities::GetInformationFieldSize () const
 {
   //we should not be here if ht is not supported
diff -Naur ns-3.24.1/src/wifi/model/ht-capabilities.h ns-3.25/src/wifi/model/ht-capabilities.h
--- ns-3.24.1/src/wifi/model/ht-capabilities.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ht-capabilities.h	2016-03-23 21:36:53.000000000 -0700
@@ -100,7 +100,9 @@
   void SetRxMcsBitmask (uint8_t index);
   void SetRxHighestSupportedDataRate (uint16_t maxsupportedrate);
   void SetTxMcsSetDefined (uint8_t txmcssetdefined);
+  void SetTxRxMcsSetUnequal (uint8_t txrxmcssetunequal);
   void SetTxMaxNSpatialStreams (uint8_t maxtxspatialstreams);
+  void SetTxUnequalModulation (uint8_t txunequalmodulation);
 
   /*
    * Return the HT Capabilties Info field in the HT Capabilities information element.
@@ -156,10 +158,13 @@
   uint8_t GetMaxAmpduLength (void) const;
 
   uint8_t* GetRxMcsBitmask ();
-  bool IsSupportedMcs (uint8_t mcs);
+  bool IsSupportedMcs (uint8_t mcs) const;
+  uint8_t GetRxHighestSupportedAntennas (void) const;
   uint16_t GetRxHighestSupportedDataRate (void) const;
   uint8_t GetTxMcsSetDefined (void) const;
+  uint8_t GetTxRxMcsSetUnequal (void) const;
   uint8_t GetTxMaxNSpatialStreams (void) const;
+  uint8_t GetTxUnequalModulation (void) const;
 
   WifiInformationElementId ElementId () const;
   uint8_t GetInformationFieldSize () const;
diff -Naur ns-3.24.1/src/wifi/model/ht-operations.cc ns-3.25/src/wifi/model/ht-operations.cc
--- ns-3.24.1/src/wifi/model/ht-operations.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/ht-operations.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,519 @@
+/* -*-  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 "ht-operations.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+
+namespace ns3 {
+
+NS_LOG_COMPONENT_DEFINE ("HtOperations");
+
+HtOperations::HtOperations ()
+  : m_primaryChannel (0),
+    m_secondaryChannelOffset (0),
+    m_staChannelWidth (0),
+    m_rifsMode (0),
+    m_reservedInformationSubset1 (0),
+    m_htProtection (0),
+    m_nonGfHtStasPresent (0),
+    m_reservedInformationSubset2_1 (0),
+    m_obssNonHtStasPresent (0),
+    m_reservedInformationSubset2_2 (0),
+    m_reservedInformationSubset3_1 (0),
+    m_dualBeacon (0),
+    m_dualCtsProtection (0),
+    m_stbcBeacon (0),
+    m_lSigTxopProtectionFullSupport (0),
+    m_pcoActive (0),
+    m_pcoPhase (0),
+    m_reservedInformationSubset3_2 (0),
+    m_reservedMcsSet1 (0),
+    m_rxHighestSupportedDataRate (0),
+    m_reservedMcsSet2 (0),
+    m_txMcsSetDefined (0),
+    m_txRxMcsSetUnequal (0),
+    m_txMaxNSpatialStreams (0),
+    m_txUnequalModulation (0),
+    m_reservedMcsSet3 (0),
+    m_htSupported (0)
+{
+  for (uint32_t k = 0; k < MAX_SUPPORTED_MCS; k++)
+    {
+      m_rxMcsBitmask[k] = 0;
+    }
+}
+
+WifiInformationElementId
+HtOperations::ElementId () const
+{
+  return IE_HT_OPERATIONS;
+}
+
+void
+HtOperations::SetHtSupported (uint8_t htsupported)
+{
+  m_htSupported = htsupported;
+}
+
+uint8_t
+HtOperations::GetInformationFieldSize () const
+{
+  //we should not be here if ht is not supported
+  NS_ASSERT (m_htSupported > 0);
+  return 22;
+}
+
+void
+HtOperations::SetPrimaryChannel (uint8_t ctrl)
+{
+  m_primaryChannel = ctrl;
+}
+
+void
+HtOperations::SetSecondaryChannelOffset (uint8_t secondarychanneloffset)
+{
+  m_secondaryChannelOffset = secondarychanneloffset;
+}
+
+void
+HtOperations::SetStaChannelWidth (uint8_t stachannelwidth)
+{
+  m_staChannelWidth = stachannelwidth;
+}
+
+void
+HtOperations::SetRifsMode (uint8_t rifsmode)
+{
+  m_rifsMode = rifsmode;
+}
+
+void
+HtOperations::SetHtProtection (uint8_t htprotection)
+{
+  m_htProtection = htprotection;
+}
+
+void
+HtOperations::SetNonGfHtStasPresent (uint8_t nongfhtstaspresent)
+{
+  m_nonGfHtStasPresent = nongfhtstaspresent;
+}
+
+void
+HtOperations::SetObssNonHtStasPresent (uint8_t obssnonhtstaspresent)
+{
+  m_obssNonHtStasPresent = obssnonhtstaspresent;
+}
+
+void
+HtOperations::SetDualBeacon (uint8_t dualbeacon)
+{
+  m_dualBeacon = dualbeacon;
+}
+
+void
+HtOperations::SetDualCtsProtection (uint8_t dualctsprotection)
+{
+  m_dualCtsProtection = dualctsprotection;
+}
+
+void
+HtOperations::SetStbcBeacon (uint8_t stbcbeacon)
+{
+  m_stbcBeacon = stbcbeacon;
+}
+
+void
+HtOperations::SetLSigTxopProtectionFullSupport (uint8_t lsigtxopprotectionfullsupport)
+{
+  m_lSigTxopProtectionFullSupport = lsigtxopprotectionfullsupport;
+}
+
+void
+HtOperations::SetPcoActive (uint8_t pcoactive)
+{
+  m_pcoActive = pcoactive;
+}
+
+void
+HtOperations::SetPhase (uint8_t pcophase)
+{
+  m_pcoPhase = pcophase;
+}
+
+void
+HtOperations::SetRxMcsBitmask (uint8_t index)
+{
+  m_rxMcsBitmask[index] = 1;
+}
+
+void
+HtOperations::SetRxHighestSupportedDataRate (uint16_t maxsupportedrate)
+{
+  m_rxHighestSupportedDataRate = maxsupportedrate;
+}
+
+void
+HtOperations::SetTxMcsSetDefined (uint8_t txmcssetdefined)
+{
+  m_txMcsSetDefined = txmcssetdefined;
+}
+
+void
+HtOperations::SetTxRxMcsSetUnequal (uint8_t txrxmcssetunequal)
+{
+  m_txRxMcsSetUnequal = txrxmcssetunequal;
+}
+
+void
+HtOperations::SetTxMaxNSpatialStreams (uint8_t maxtxspatialstreams)
+{
+  m_txMaxNSpatialStreams = maxtxspatialstreams;
+}
+
+void
+HtOperations::SetTxUnequalModulation (uint8_t txunequalmodulation)
+{
+  m_txUnequalModulation = txunequalmodulation;
+}
+
+uint8_t
+HtOperations::GetPrimaryChannel (void) const
+{
+  return m_primaryChannel;
+}
+
+uint8_t
+HtOperations::GetSecondaryChannelOffset (void) const
+{
+  return m_secondaryChannelOffset;
+}
+
+uint8_t
+HtOperations::GetStaChannelWidth (void) const
+{
+  return m_staChannelWidth;
+}
+
+uint8_t
+HtOperations::GetRifsMode (void) const
+{
+  return m_rifsMode;
+}
+
+uint8_t
+HtOperations::GetHtProtection (void) const
+{
+  return m_htProtection;
+}
+
+uint8_t
+HtOperations::GetNonGfHtStasPresent (void) const
+{
+  return m_nonGfHtStasPresent;
+}
+
+uint8_t
+HtOperations::GetObssNonHtStasPresent (void) const
+{
+  return m_obssNonHtStasPresent;
+}
+
+uint8_t
+HtOperations::GetDualBeacon (void) const
+{
+  return m_dualBeacon;
+}
+
+uint8_t
+HtOperations::GetDualCtsProtection (void) const
+{
+  return m_dualCtsProtection;
+}
+
+uint8_t
+HtOperations::GetStbcBeacon (void) const
+{
+  return m_stbcBeacon;
+}
+
+uint8_t
+HtOperations::GetLSigTxopProtectionFullSupport (void) const
+{
+  return m_lSigTxopProtectionFullSupport;
+}
+
+uint8_t
+HtOperations::GetPcoActive (void) const
+{
+  return m_pcoActive;
+}
+
+uint8_t
+HtOperations::GetPhase (void) const
+{
+  return m_pcoPhase;
+}
+
+bool
+HtOperations::IsSupportedMcs (uint8_t mcs)
+{
+  if (m_rxMcsBitmask[mcs] == 1)
+    {
+      return true;
+    }
+  return false;
+}
+
+uint16_t
+HtOperations::GetRxHighestSupportedDataRate (void) const
+{
+  return m_rxHighestSupportedDataRate;
+}
+
+uint8_t
+HtOperations::GetTxMcsSetDefined (void) const
+{
+  return m_txMcsSetDefined;
+}
+
+uint8_t
+HtOperations::GetTxRxMcsSetUnequal (void) const
+{
+  return m_txRxMcsSetUnequal;
+}
+
+uint8_t
+HtOperations::GetTxMaxNSpatialStreams (void) const
+{
+  return m_txMaxNSpatialStreams;
+}
+
+uint8_t
+HtOperations::GetTxUnequalModulation (void) const
+{
+  return m_txUnequalModulation;
+}
+
+Buffer::Iterator
+HtOperations::Serialize (Buffer::Iterator i) const
+{
+  if (m_htSupported < 1)
+    {
+      return i;
+    }
+  return WifiInformationElement::Serialize (i);
+}
+
+uint16_t
+HtOperations::GetSerializedSize () const
+{
+  if (m_htSupported < 1)
+    {
+      return 0;
+    }
+  return WifiInformationElement::GetSerializedSize ();
+}
+
+uint8_t
+HtOperations::GetInformationSubset1 (void) const
+{
+  uint16_t val = 0;
+  val |= m_secondaryChannelOffset & 0x03;
+  val |= (m_staChannelWidth & 0x01) << 2;
+  val |= (m_rifsMode & 0x01) << 3;
+  val |= (m_reservedInformationSubset1 & 0x0f) << 4;
+  return val;
+}
+
+void
+HtOperations::SetInformationSubset1 (uint8_t ctrl)
+{
+  m_secondaryChannelOffset = ctrl & 0x03;
+  m_staChannelWidth = (ctrl >> 2) & 0x01;
+  m_rifsMode = (ctrl >> 3) & 0x01;
+  m_reservedInformationSubset1 = (ctrl >> 4) & 0x0f;
+}
+
+uint16_t
+HtOperations::GetInformationSubset2 (void) const
+{
+  uint16_t val = 0;
+  val |= m_htProtection & 0x03;
+  val |= (m_nonGfHtStasPresent & 0x01) << 2;
+  val |= (m_reservedInformationSubset2_1 & 0x01) << 3;
+  val |= (m_obssNonHtStasPresent & 0x01) << 4;
+  val |= (m_reservedInformationSubset2_1 & 0x07ff) << 5;
+  return val;
+}
+
+void
+HtOperations::SetInformationSubset2 (uint16_t ctrl)
+{
+  m_htProtection = ctrl & 0x03;
+  m_nonGfHtStasPresent = (ctrl >> 2) & 0x01;
+  m_reservedInformationSubset2_1 = (ctrl >> 3) & 0x01;
+  m_obssNonHtStasPresent = (ctrl >> 4) & 0x01;
+  m_reservedInformationSubset2_1 = (ctrl >> 5) & 0x07ff;
+}
+
+uint16_t
+HtOperations::GetInformationSubset3 (void) const
+{
+  uint16_t val = 0;
+  val |= m_reservedInformationSubset3_1 & 0x3f;
+  val |= (m_dualBeacon & 0x01) << 6;
+  val |= (m_dualCtsProtection & 0x01) << 7;
+  val |= (m_stbcBeacon & 0x01) << 8;
+  val |= (m_lSigTxopProtectionFullSupport & 0x01) << 9;
+  val |= (m_pcoActive & 0x01) << 10;
+  val |= (m_pcoPhase & 0x01) << 11;
+  val |= (m_reservedInformationSubset3_2 & 0x0f) << 12;
+  return val;
+}
+
+void
+HtOperations::SetInformationSubset3 (uint16_t ctrl)
+{
+  m_reservedInformationSubset3_1 = ctrl & 0x3f;
+  m_dualBeacon = (ctrl >> 6) & 0x01;
+  m_dualCtsProtection = (ctrl >> 7) & 0x01;
+  m_stbcBeacon = (ctrl >> 8) & 0x01;
+  m_lSigTxopProtectionFullSupport = (ctrl >> 9) & 0x01;
+  m_pcoActive = (ctrl >> 10) & 0x01;
+  m_pcoPhase = (ctrl >> 11) & 0x01;
+  m_reservedInformationSubset3_2 = (ctrl >> 12) & 0x0f;
+}
+
+void
+HtOperations::SetBasicMcsSet (uint64_t ctrl1, uint64_t ctrl2)
+{
+  for (uint64_t i = 0; i < 77; i++)
+    {
+      if (i < 64)
+        {
+          m_rxMcsBitmask[i] = (ctrl1 >> i) & 0x01;
+        }
+      else
+        {
+          m_rxMcsBitmask[i] = (ctrl2 >> (i - 64)) & 0x01;
+        }
+    }
+  m_reservedMcsSet1 = (ctrl2 >> 13) & 0x07;
+  m_rxHighestSupportedDataRate = (ctrl2 >> 16) & 0x03ff;
+  m_reservedMcsSet2 = (ctrl2 >> 26) & 0x3f;
+  m_txMcsSetDefined = (ctrl2 >> 32) & 0x01;
+  m_txRxMcsSetUnequal = (ctrl2 >> 33) & 0x01;
+  m_txMaxNSpatialStreams = (ctrl2 >> 34) & 0x03;
+  m_txUnequalModulation = (ctrl2 >> 36) & 0x01;
+  m_reservedMcsSet3 = (ctrl2 >> 37) & 0x07ffffff;
+}
+
+uint64_t
+HtOperations::GetBasicMcsSet1 (void) const
+{
+  uint64_t val = 0;
+  for (uint64_t i = 63; i > 0; i--)
+    {
+      val = (val << 1) | (m_rxMcsBitmask[i] & 0x01);
+    }
+  val = (val << 1) | (m_rxMcsBitmask[0] & 0x01);
+  return val;
+}
+
+uint64_t
+HtOperations::GetBasicMcsSet2 (void) const
+{
+  uint64_t val = 0;
+  val = val | (m_reservedMcsSet3 & 0x07ffffff);
+  val = (val << 1) | (m_txUnequalModulation & 0x01);
+  val = (val << 2) | (m_txMaxNSpatialStreams & 0x03);
+  val = (val << 1) | (m_txRxMcsSetUnequal & 0x01);
+  val = (val << 1) | (m_txMcsSetDefined & 0x01);
+  val = (val << 6) | (m_reservedMcsSet2 & 0x3f);
+  val = (val << 10) | (m_rxHighestSupportedDataRate & 0x3ff);
+  val = (val << 3) | (m_reservedMcsSet1 & 0x07);
+
+  for (uint64_t i = 13; i > 0; i--)
+    {
+      val = (val << 1) | ( m_rxMcsBitmask[i + 63] & 0x01);
+    }
+  return val;
+}
+
+void
+HtOperations::SerializeInformationField (Buffer::Iterator start) const
+{
+  if (m_htSupported == 1)
+    {
+      //write the corresponding value for each bit
+      start.WriteU8 (GetPrimaryChannel ());
+      start.WriteU8 (GetInformationSubset1 ());
+      start.WriteU16 (GetInformationSubset2 ());
+      start.WriteU16 (GetInformationSubset3 ());
+      start.WriteHtolsbU64 (GetBasicMcsSet1 ());
+      start.WriteHtolsbU64 (GetBasicMcsSet2 ());
+    }
+}
+
+uint8_t
+HtOperations::DeserializeInformationField (Buffer::Iterator start,
+                                             uint8_t length)
+{
+  Buffer::Iterator i = start;
+  uint8_t primarychannel = i.ReadU8 ();
+  uint8_t informationsubset1 = i.ReadU8 ();
+  uint8_t informationsubset2 = i.ReadU16 ();
+  uint8_t informationsubset3 = i.ReadU16 ();
+  uint64_t mcsset1 = i.ReadLsbtohU64 ();
+  uint64_t mcsset2 = i.ReadLsbtohU64 ();
+  SetPrimaryChannel (primarychannel);
+  SetInformationSubset1 (informationsubset1);
+  SetInformationSubset2 (informationsubset2);
+  SetInformationSubset3 (informationsubset3);
+  SetBasicMcsSet (mcsset1, mcsset2);
+  return length;
+}
+
+ATTRIBUTE_HELPER_CPP (HtOperations);
+
+std::ostream &
+operator << (std::ostream &os, const HtOperations &htoperations)
+{
+  os <<  bool (htoperations.GetStaChannelWidth ())
+     << "|" << bool (htoperations.GetRifsMode ())
+     << "|" << bool (htoperations.GetDualCtsProtection());
+    
+  return os;
+}
+
+std::istream &operator >> (std::istream &is, HtOperations &htoperations)
+{
+  bool c1, c2, c3;
+  is >> c1 >> c2 >> c3;
+  htoperations.SetStaChannelWidth (c1);
+  htoperations.SetRifsMode (c2);
+  htoperations.SetDualCtsProtection (c3);
+  
+  return is;
+}
+
+} //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/ht-operations.h ns-3.25/src/wifi/model/ht-operations.h
--- ns-3.24.1/src/wifi/model/ht-operations.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/ht-operations.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,245 @@
+/* -*-  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>
+ */
+
+#ifndef HT_OPERATIONS_H
+#define HT_OPERATIONS_H
+
+#include <stdint.h>
+#include "ns3/buffer.h"
+#include "ns3/attribute-helper.h"
+#include "ns3/wifi-information-element.h"
+
+/**
+ * This defines the maximum number of supported MCSs that a STA is
+ * allowed to have. Currently this number is set for IEEE 802.11n
+ */
+#define MAX_SUPPORTED_MCS  (77)
+
+namespace ns3 {
+
+enum HtProtectionType
+{
+  NO_PROTECTION,
+  NON_MEMBER_PROTECTION,
+  TWENTY_MHZ_PROTECTION,
+  MIXED_MODE_PROTECTION
+};
+
+/**
+ * \brief The HT Operations Information Element
+ * \ingroup wifi
+ *
+ * This class knows how to serialise and deserialise 
+ * the HT Operations Information Element
+ *
+ * \see attribute_HtOperations
+ */
+class HtOperations: public WifiInformationElement
+{
+public:
+  HtOperations ();
+  void SetHtSupported (uint8_t htsupported);
+  
+  /**
+   * Set the Primary Channel field in the HT Operations information element.
+   *
+   * \param ctrl the Primary Channel field in the HT Operations information element
+   */
+  void SetPrimaryChannel (uint8_t ctrl);
+  /**
+   * Set the Information Subset 1 field in the HT Operations information element.
+   *
+   * \param ctrl the Information Subset 1 field in the HT Operations information element
+   */
+  void SetInformationSubset1 (uint8_t ctrl);
+  /**
+   * Set the Information Subset 2 field in the HT Operations information element.
+   *
+   * \param ctrl the Information Subset 2 field in the HT Operations information element
+   */
+  void SetInformationSubset2 (uint16_t ctrl);
+  /**
+   * Set the Information Subset 3 field in the HT Operations information element.
+   *
+   * \param ctrl the Information Subset 3 field in the HT Operations information element
+   */
+  void SetInformationSubset3 (uint16_t ctrl);
+  /**
+   * Set the Basic MCS Set field in the HT Operations information element.
+   *
+   * \param ctrl1 the first 64 bytes of the Basic MCS Set field in the HT Operations information element
+   * \param ctrl2 the last 64 bytes of the Basic MCS Set field in the HT Operations information element
+   */
+  void SetBasicMcsSet (uint64_t ctrl1, uint64_t ctrl2);
+
+  void SetSecondaryChannelOffset (uint8_t secondarychanneloffset);
+  void SetStaChannelWidth (uint8_t stachannelwidth);
+  void SetRifsMode (uint8_t rifsmode);
+
+  void SetHtProtection (uint8_t htprotection);
+  void SetNonGfHtStasPresent (uint8_t nongfhtstaspresent);
+  void SetObssNonHtStasPresent (uint8_t obssnonhtstaspresent);
+
+  void SetDualBeacon (uint8_t dualbeacon);
+  void SetDualCtsProtection (uint8_t dualctsprotection);
+  void SetStbcBeacon (uint8_t stbcbeacon);
+  void SetLSigTxopProtectionFullSupport (uint8_t lsigtxopprotectionfullsupport);
+  void SetPcoActive (uint8_t pcoactive);
+  void SetPhase (uint8_t pcophase);
+
+  void SetRxMcsBitmask (uint8_t index);
+  void SetRxHighestSupportedDataRate (uint16_t maxsupportedrate);
+  void SetTxMcsSetDefined (uint8_t txmcssetdefined);
+  void SetTxRxMcsSetUnequal (uint8_t txrxmcssetunequal);
+  void SetTxMaxNSpatialStreams (uint8_t maxtxspatialstreams);
+  void SetTxUnequalModulation (uint8_t txunequalmodulation);
+  
+  /*
+   * Return the Primary Channel field in the HT Operations information element.
+   *
+   * \return the Primary Channel field in the HT Operations information element
+   */
+  uint8_t GetPrimaryChannel (void) const;
+  /*
+   * Return the Information Subset 1 field in the HT Operations information element.
+   *
+   * \return the Information Subset 1 field in the HT Operations information element
+   */
+  uint8_t GetInformationSubset1 (void) const;
+  /*
+   * Return the Information Subset 2 field in the HT Operations information element.
+   *
+   * \return the Information Subset 2 field in the HT Operations information element
+   */
+  uint16_t GetInformationSubset2 (void) const;
+  /*
+   * Return the Information Subset 3 field in the HT Operations information element.
+   *
+   * \return the Information Subset 3 field in the HT Operations information element
+   */
+  uint16_t GetInformationSubset3 (void) const;
+  /*
+   * Return the first 64 bytes of the Basic MCS Set field in the HT Operations information element.
+   *
+   * \return the first 64 bytes of the Basic MCS Set field in the HT Operations information element
+   */
+  uint64_t GetBasicMcsSet1 (void) const;
+  /*
+   * Return the last 64 bytes of the Basic MCS Set field in the HT Operations information element.
+   *
+   * \return the last 64 bytes of the Basic MCS Set field in the HT Operations information element
+   */
+  uint64_t GetBasicMcsSet2 (void) const;
+  
+  uint8_t GetSecondaryChannelOffset (void) const;
+  uint8_t GetStaChannelWidth (void) const;
+  uint8_t GetRifsMode (void) const;
+  
+  uint8_t GetHtProtection (void) const;
+  uint8_t GetNonGfHtStasPresent (void) const;
+  uint8_t GetObssNonHtStasPresent (void) const;
+  
+  uint8_t GetDualBeacon (void) const;
+  uint8_t GetDualCtsProtection (void) const;
+  uint8_t GetStbcBeacon (void) const;
+  uint8_t GetLSigTxopProtectionFullSupport (void) const;
+  uint8_t GetPcoActive (void) const;
+  uint8_t GetPhase (void) const;
+  
+  bool IsSupportedMcs (uint8_t mcs);
+  uint16_t GetRxHighestSupportedDataRate (void) const;
+  uint8_t GetTxMcsSetDefined (void) const;
+  uint8_t GetTxRxMcsSetUnequal (void) const;
+  uint8_t GetTxMaxNSpatialStreams (void) const;
+  uint8_t GetTxUnequalModulation (void) const;
+
+  WifiInformationElementId ElementId () const;
+  uint8_t GetInformationFieldSize () const;
+  void SerializeInformationField (Buffer::Iterator start) const;
+  uint8_t DeserializeInformationField (Buffer::Iterator start,
+                                       uint8_t length);
+  /**
+   * This information element is a bit special in that it is only
+   * included if the STA is an HT STA. To support this we
+   * override the Serialize and GetSerializedSize methods of
+   * WifiInformationElement.
+   *
+   * \param start
+   *
+   * \return an iterator
+   */
+  Buffer::Iterator Serialize (Buffer::Iterator start) const;
+  /**
+   * Return the serialized size of this HT Operations IE.
+   *
+   * \return the serialized size of this HT Operations IE
+   */
+  uint16_t GetSerializedSize () const;
+
+
+private:
+  uint8_t m_primaryChannel;
+
+  //HT Information Subset 1
+  uint8_t m_secondaryChannelOffset;
+  uint8_t m_staChannelWidth;
+  uint8_t m_rifsMode;
+  uint8_t m_reservedInformationSubset1;
+
+  //HT Information Subset 2
+  uint8_t m_htProtection;
+  uint8_t m_nonGfHtStasPresent;
+  uint8_t m_reservedInformationSubset2_1;
+  uint8_t m_obssNonHtStasPresent;
+  uint8_t m_reservedInformationSubset2_2;
+
+  //HT Information Subset 3
+  uint8_t m_reservedInformationSubset3_1;
+  uint8_t m_dualBeacon;
+  uint8_t m_dualCtsProtection;
+  uint8_t m_stbcBeacon;
+  uint8_t m_lSigTxopProtectionFullSupport;
+  uint8_t m_pcoActive;
+  uint8_t m_pcoPhase;
+  uint8_t m_reservedInformationSubset3_2;
+
+  //Basic MCS Set field
+  uint8_t m_reservedMcsSet1;
+  uint16_t m_rxHighestSupportedDataRate;
+  uint8_t m_reservedMcsSet2;
+  uint8_t m_txMcsSetDefined;
+  uint8_t m_txRxMcsSetUnequal;
+  uint8_t m_txMaxNSpatialStreams;
+  uint8_t m_txUnequalModulation;
+  uint32_t m_reservedMcsSet3;
+  uint8_t m_rxMcsBitmask[MAX_SUPPORTED_MCS];
+
+  //This is used to decide whether this element should be added to the frame or not
+  uint8_t m_htSupported;
+};
+
+std::ostream &operator << (std::ostream &os, const HtOperations &htoperations);
+std::istream &operator >> (std::istream &is, HtOperations &htoperations);
+
+ATTRIBUTE_HELPER_HEADER (HtOperations);
+
+} //namespace ns3
+
+#endif /* HT_OPERATIONS_H */
diff -Naur ns-3.24.1/src/wifi/model/ideal-wifi-manager.cc ns-3.25/src/wifi/model/ideal-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/ideal-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ideal-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -22,10 +22,9 @@
 #include "wifi-phy.h"
 #include "ns3/assert.h"
 #include "ns3/double.h"
+#include "ns3/log.h"
 #include <cmath>
 
-#define Min(a,b) ((a < b) ? a : b)
-
 namespace ns3 {
 
 /**
@@ -36,11 +35,16 @@
  */
 struct IdealWifiRemoteStation : public WifiRemoteStation
 {
-  double m_lastSnr;  //!< SNR of last packet sent to the remote station
+  double m_lastSnrObserved;  //!< SNR of most recently reported packet sent to the remote station
+  double m_lastSnrCached;    //!< SNR most recently used to select a rate
+  double m_nss;          //!< SNR most recently used to select a rate
+  WifiMode m_lastMode;       //!< Mode most recently used to the remote station
 };
 
 NS_OBJECT_ENSURE_REGISTERED (IdealWifiManager);
 
+NS_LOG_COMPONENT_DEFINE ("IdealWifiManager");
+
 TypeId
 IdealWifiManager::GetTypeId (void)
 {
@@ -50,14 +54,19 @@
     .AddConstructor<IdealWifiManager> ()
     .AddAttribute ("BerThreshold",
                    "The maximum Bit Error Rate acceptable at any transmission mode",
-                   DoubleValue (10e-6),
+                   DoubleValue (1e-5),
                    MakeDoubleAccessor (&IdealWifiManager::m_ber),
                    MakeDoubleChecker<double> ())
+    .AddTraceSource ("Rate",
+                     "Traced value for rate changes (b/s)",
+                     MakeTraceSourceAccessor (&IdealWifiManager::m_currentRate),
+                     "ns3::TracedValueCallback::Uint64")
   ;
   return tid;
 }
 
 IdealWifiManager::IdealWifiManager ()
+ : m_currentRate (0)
 {
 }
 
@@ -68,22 +77,92 @@
 void
 IdealWifiManager::SetupPhy (Ptr<WifiPhy> phy)
 {
-  uint32_t nModes = phy->GetNModes ();
-  for (uint32_t i = 0; i < nModes; i++)
+  NS_LOG_FUNCTION (this << phy);
+  WifiRemoteStationManager::SetupPhy (phy);
+}
+
+uint32_t
+IdealWifiManager::GetChannelWidthForMode (WifiMode mode) const
+{
+  NS_ASSERT (mode.GetModulationClass () != WIFI_MOD_CLASS_HT);
+  NS_ASSERT (mode.GetModulationClass () != WIFI_MOD_CLASS_VHT);
+  if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS || 
+      mode.GetModulationClass () == WIFI_MOD_CLASS_HR_DSSS)
     {
-      WifiMode mode = phy->GetMode (i);
-      AddModeSnrThreshold (mode, phy->CalculateSnr (mode, m_ber));
+      return 22;
     }
+  else 
+    {
+      return 20;
+    }
+}
 
-  WifiRemoteStationManager::SetupPhy (phy);
+void
+IdealWifiManager::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+  WifiMode mode;
+  WifiTxVector txVector;
+  uint8_t nss = 1;
+  uint32_t nModes = GetPhy ()->GetNModes ();
+  txVector.SetShortGuardInterval (GetPhy ()->GetGuardInterval ());
+  for (uint32_t i = 0; i < nModes; i++)
+    {
+      mode = GetPhy ()->GetMode (i);
+      txVector.SetChannelWidth (GetChannelWidthForMode (mode)); 
+      txVector.SetNss (nss);
+      txVector.SetMode (mode);
+      NS_LOG_DEBUG ("Initialize, adding mode = " << mode.GetUniqueName () <<
+                    " channel width " << txVector.GetChannelWidth () << 
+                    " nss " << (uint16_t) nss << 
+                    " short GI " << GetPhy ()->GetGuardInterval ());
+      AddSnrThreshold (txVector, GetPhy ()->CalculateSnr (txVector, m_ber));
+    }
+  // Add all Ht and Vht MCSes 
+  txVector.SetChannelWidth (GetPhy ()->GetChannelWidth ());
+  if (HasVhtSupported () == true || HasHtSupported () == true )
+    {
+      nModes = GetPhy ()->GetNMcs ();
+      for (uint32_t i = 0; i < nModes; i++)
+        {
+          mode = GetPhy ()->GetMcs (i);
+          if (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+            {
+              //derive NSS from the Mcs index
+              nss = (mode.GetMcsValue () / 8) + 1;
+            }
+          else
+            {
+              nss = GetPhy ()->GetSupportedTxSpatialStreams ();
+            }
+          NS_LOG_DEBUG ("Initialize, adding mode = " << mode.GetUniqueName () <<
+                        " channel width " << GetPhy ()->GetChannelWidth () <<
+                        " nss " << (uint16_t) nss << 
+                        " short GI " << GetPhy ()->GetGuardInterval ());
+          NS_LOG_DEBUG ("In SetupPhy, adding mode = " << mode.GetUniqueName ());
+          txVector.SetNss (nss);
+          txVector.SetMode (mode);
+          AddSnrThreshold (txVector, GetPhy ()->CalculateSnr (txVector, m_ber));
+        }
+    }
 }
 
 double
-IdealWifiManager::GetSnrThreshold (WifiMode mode) const
+IdealWifiManager::GetSnrThreshold (WifiTxVector txVector) const
 {
+  NS_LOG_FUNCTION (this << txVector.GetMode().GetUniqueName ());
   for (Thresholds::const_iterator i = m_thresholds.begin (); i != m_thresholds.end (); i++)
     {
-      if (mode == i->second)
+      NS_LOG_DEBUG ("Checking " << i->second.GetMode ().GetUniqueName () <<
+                    " nss " << (uint16_t) i->second.GetNss () <<
+                    " width " << i->second.GetChannelWidth ());
+      NS_LOG_DEBUG ("against TxVector " << txVector.GetMode ().GetUniqueName () <<
+                    " nss " << (uint16_t) txVector.GetNss () <<
+                    " width " << txVector.GetChannelWidth ());
+      if (txVector.GetMode () == i->second.GetMode () &&
+          txVector.GetNss () == i->second.GetNss () &&
+          txVector.IsShortGuardInterval () == i->second.IsShortGuardInterval () &&
+          txVector.GetChannelWidth () == i->second.GetChannelWidth ())
         {
           return i->first;
         }
@@ -93,16 +172,21 @@
 }
 
 void
-IdealWifiManager::AddModeSnrThreshold (WifiMode mode, double snr)
+IdealWifiManager::AddSnrThreshold (WifiTxVector txVector, double snr)
 {
-  m_thresholds.push_back (std::make_pair (snr,mode));
+  NS_LOG_FUNCTION (this << txVector.GetMode ().GetUniqueName () << snr);
+  m_thresholds.push_back (std::make_pair (snr, txVector));
 }
 
 WifiRemoteStation *
 IdealWifiManager::DoCreateStation (void) const
 {
+  NS_LOG_FUNCTION (this);
   IdealWifiRemoteStation *station = new IdealWifiRemoteStation ();
-  station->m_lastSnr = 0.0;
+  station->m_lastSnrObserved = 0.0;
+  station->m_lastSnrCached = 0.0;
+  station->m_lastMode = GetDefaultMode ();
+  station->m_nss = 1;
   return station;
 }
 
@@ -127,18 +211,39 @@
 IdealWifiManager::DoReportRtsOk (WifiRemoteStation *st,
                                  double ctsSnr, WifiMode ctsMode, double rtsSnr)
 {
+  NS_LOG_FUNCTION (this << st << ctsSnr << ctsMode.GetUniqueName () << rtsSnr);
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
-  station->m_lastSnr = rtsSnr;
+  station->m_lastSnrObserved = rtsSnr;
 }
 
 void
 IdealWifiManager::DoReportDataOk (WifiRemoteStation *st,
                                   double ackSnr, WifiMode ackMode, double dataSnr)
 {
+  NS_LOG_FUNCTION (this << st << ackSnr << ackMode.GetUniqueName () << dataSnr);
+  IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
+  if (dataSnr == 0)
+    {
+      NS_LOG_WARN ("DataSnr reported to be zero; not saving this report.");
+      return;
+    }
+  station->m_lastSnrObserved = dataSnr;
+}
+
+void 
+IdealWifiManager::DoReportAmpduTxStatus (WifiRemoteStation *st, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << st << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr);
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
-  station->m_lastSnr = dataSnr;
+  if (dataSnr == 0)
+    {
+      NS_LOG_WARN ("DataSnr reported to be zero; not saving this report.");
+      return;
+    }
+  station->m_lastSnrObserved = dataSnr;
 }
 
+
 void
 IdealWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *station)
 {
@@ -150,61 +255,154 @@
 }
 
 WifiTxVector
-IdealWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+IdealWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
+  NS_LOG_FUNCTION (this << st);
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
   //We search within the Supported rate set the mode with the
   //highest snr threshold possible which is smaller than m_lastSnr
   //to ensure correct packet delivery.
   double maxThreshold = 0.0;
   WifiMode maxMode = GetDefaultMode ();
-  for (uint32_t i = 0; i < GetNSupported (station); i++)
+  std::vector<WifiTxVector> candidateTxVectors;
+  WifiTxVector txVector;
+  WifiMode mode;
+  uint8_t nss = 1;
+  txVector.SetChannelWidth (GetPhy ()->GetChannelWidth ());
+  txVector.SetShortGuardInterval (GetPhy ()->GetGuardInterval ());
+  if (station->m_lastSnrObserved == station->m_lastSnrCached)
     {
-      WifiMode mode = GetSupported (station, i);
-      double threshold = GetSnrThreshold (mode);
-      if (threshold > maxThreshold
-          && threshold < station->m_lastSnr)
+      // SNR has not changed, so skip the search and use the last
+      // mode selected
+      maxMode = station->m_lastMode;      
+      nss = station->m_nss;
+      NS_LOG_DEBUG ("Using cached mode = " << maxMode.GetUniqueName () <<
+                    " last snr observed " << station->m_lastSnrObserved <<
+                    " cached " << station->m_lastSnrCached);
+    }
+  else
+    {
+      if (HasVhtSupported () == true || HasHtSupported () == true)
         {
-          maxThreshold = threshold;
-          maxMode = mode;
+          for (uint32_t i = 0; i < GetNMcsSupported (station); i++)
+            {
+              mode = GetMcsSupported (station, i);
+              txVector.SetMode (mode);
+              if (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+                {
+                  //derive NSS from the Mcs index
+                  nss = (mode.GetMcsValue () / 8) + 1;
+                }
+              else
+                {
+                  nss = GetPhy ()->GetSupportedTxSpatialStreams ();
+                }
+              txVector.SetNss (nss);
+              if (WifiPhy::IsValidTxVector (txVector) == false)
+                 {
+                   NS_LOG_DEBUG ("Skipping mode " << mode.GetUniqueName () <<
+                                 " nss " << nss << " width " << 
+                                 txVector.GetChannelWidth());
+                   continue;       
+                 }
+              double threshold = GetSnrThreshold (txVector);
+              // If the node and peer are both VHT capable, only search VHT modes 
+              if (mode.GetModulationClass () == WIFI_MOD_CLASS_HT && HasVhtSupported () && GetVhtSupported (st))
+                { 
+                  continue;
+                }
+              // If the node and peer are not both VHT capable, only search HT modes 
+              if (mode.GetModulationClass () == WIFI_MOD_CLASS_VHT && (!HasVhtSupported () || !GetVhtSupported (st)))
+                { 
+                  continue;
+                }
+              NS_LOG_DEBUG ("Testing mode = " << mode.GetUniqueName () <<
+                            " threshold " << threshold  << " maxThreshold " <<
+                            maxThreshold << " last snr observed " <<
+                            station->m_lastSnrObserved << " cached " <<
+                            station->m_lastSnrCached);
+              if (threshold > maxThreshold && threshold < station->m_lastSnrObserved)
+                {
+                  NS_LOG_DEBUG ("Candidate mode = " << mode.GetUniqueName () <<
+                                " threshold " << threshold  <<
+                                " last snr observed " <<
+                                station->m_lastSnrObserved);
+                  maxThreshold = threshold;
+                  maxMode = mode;
+                }
+            }
         }
+      else 
+        {
+          // Non-HT selection
+          nss = 1;
+          for (uint32_t i = 0; i < GetNSupported (station); i++)
+            {
+              mode = GetSupported (station, i);
+              txVector.SetMode (mode);
+              txVector.SetNss (nss);
+              txVector.SetChannelWidth (GetChannelWidthForMode (mode));
+              double threshold = GetSnrThreshold (txVector);
+              NS_LOG_DEBUG ("mode = " << mode.GetUniqueName () <<
+                            " threshold " << threshold  <<
+                            " last snr observed " <<
+                            station->m_lastSnrObserved);
+              if (threshold > maxThreshold && threshold < station->m_lastSnrObserved)
+                {
+                  NS_LOG_DEBUG ("Candidate mode = " << mode.GetUniqueName () <<
+                                " threshold " << threshold  <<
+                                " last snr observed " <<
+                                station->m_lastSnrObserved);
+                  maxThreshold = threshold;
+                  maxMode = mode;
+                }
+            }
+        }
+      NS_LOG_DEBUG ("Updating cached values for station to " <<  maxMode.GetUniqueName () << " snr " << station->m_lastSnrObserved);
+      station->m_lastSnrCached = station->m_lastSnrObserved;
+      station->m_lastMode = maxMode;
+      station->m_nss = nss;
     }
   uint32_t channelWidth = GetChannelWidth (station);
-  if (channelWidth > 20 && channelWidth != 22)
+  NS_LOG_DEBUG ("Found maxMode: " << maxMode << " channelWidth: " << channelWidth);
+  if (m_currentRate != maxMode.GetDataRate (channelWidth, GetPhy ()->GetGuardInterval (), nss))
     {
-      //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
-      channelWidth = 20;
+      NS_LOG_DEBUG ("New datarate: " << maxMode.GetDataRate (channelWidth, GetPhy ()->GetGuardInterval (), nss));
+      m_currentRate = maxMode.GetDataRate (channelWidth, GetPhy ()->GetGuardInterval (), nss);
     }
-  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, nss, 0, channelWidth, GetAggregation (station), false);
 }
 
 WifiTxVector
 IdealWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
 {
+  NS_LOG_FUNCTION (this << st);
   IdealWifiRemoteStation *station = (IdealWifiRemoteStation *)st;
   //We search within the Basic rate set the mode with the highest
   //snr threshold possible which is smaller than m_lastSnr to
   //ensure correct packet delivery.
   double maxThreshold = 0.0;
+  WifiTxVector txVector;
+  WifiMode mode;
+  uint8_t nss = 1;
   WifiMode maxMode = GetDefaultMode ();
+  //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
+  // RTS is sent in a non-HT frame; RTS with (V)HT is not yet supported
+  txVector.SetShortGuardInterval (GetPhy ()->GetGuardInterval ());
   for (uint32_t i = 0; i < GetNBasicModes (); i++)
     {
-      WifiMode mode = GetBasicMode (i);
-      double threshold = GetSnrThreshold (mode);
-      if (threshold > maxThreshold
-          && threshold < station->m_lastSnr)
+      mode = GetBasicMode (i);
+      txVector.SetMode (mode);
+      txVector.SetNss (nss);
+      txVector.SetChannelWidth (GetChannelWidthForMode (mode));
+      double threshold = GetSnrThreshold (txVector);
+      if (threshold > maxThreshold && threshold < station->m_lastSnrObserved)
         {
           maxThreshold = threshold;
           maxMode = mode;
         }
     }
-  uint32_t channelWidth = GetChannelWidth (station);
-  if (channelWidth > 20 && channelWidth != 22)
-    {
-      //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
-      channelWidth = 20;
-    }
-  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  return WifiTxVector (maxMode, GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, nss, 0, GetChannelWidthForMode (maxMode), GetAggregation (station), false);
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/ideal-wifi-manager.h ns-3.25/src/wifi/model/ideal-wifi-manager.h
--- ns-3.24.1/src/wifi/model/ideal-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/ideal-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -23,6 +23,7 @@
 
 #include <stdint.h>
 #include <vector>
+#include "ns3/traced-value.h"
 #include "wifi-mode.h"
 #include "wifi-remote-station-manager.h"
 
@@ -55,6 +56,7 @@
 
 private:
   //overriden from base class
+  virtual void DoInitialize (void);
   virtual WifiRemoteStation* DoCreateStation (void) const;
   virtual void DoReportRxOk (WifiRemoteStation *station,
                              double rxSnr, WifiMode txMode);
@@ -64,37 +66,48 @@
                               double ctsSnr, WifiMode ctsMode, double rtsSnr);
   virtual void DoReportDataOk (WifiRemoteStation *station,
                                double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportAmpduTxStatus (WifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
   /**
    * Return the minimum SNR needed to successfully transmit
-   * data with this mode at the specified BER.
+   * data with this WifiTxVector at the specified BER.
    *
-   * \param mode WifiMode
+   * \param txVector WifiTxVector (containing valid mode, width, and nss)
    *
-   * \return the minimum SNR for the given mode
+   * \return the minimum SNR for the given WifiTxVector
    */
-  double GetSnrThreshold (WifiMode mode) const;
+  double GetSnrThreshold (WifiTxVector txVector) const;
   /**
-   * Adds a pair of WifiMode and the minimum SNR for that given mode
+   * Adds a pair of WifiTxVector and the minimum SNR for that given vector
    * to the list.
    *
-   * \param mode WifiMode
-   * \param snr the minimum SNR for the given mode
+   * \param txVector the WifiTxVector storing mode, channel width, and nss
+   * \param snr the minimum SNR for the given txVector
    */
-  void AddModeSnrThreshold (WifiMode mode, double snr);
+  void AddSnrThreshold (WifiTxVector txVector, double snr);
 
   /**
-   * A vector of <snr, mode> pair that holds the minimum SNR for different mode
+   * Convenience function for selecting a channel width for legacy mode
+   * \param non-(V)HT WifiMode
+   * \return the channel width (MHz) for the selected mode
    */
-  typedef std::vector<std::pair<double,WifiMode> > Thresholds;
+  uint32_t GetChannelWidthForMode (WifiMode mode) const;
+
+  /**
+   * A vector of <snr, WifiTxVector> pair holding the minimum SNR for the 
+   * WifiTxVector
+   */
+  typedef std::vector<std::pair<double, WifiTxVector> > Thresholds;
 
   double m_ber;             //!< The maximum Bit Error Rate acceptable at any transmission mode
-  Thresholds m_thresholds;  //!< List of WifiMode and the minimum SNR pair
+  Thresholds m_thresholds;  //!< List of WifiTxVector and the minimum SNR pair
+
+  TracedValue<uint64_t> m_currentRate; //!< Trace rate changes
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/interference-helper.cc ns-3.25/src/wifi/model/interference-helper.cc
--- ns-3.24.1/src/wifi/model/interference-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/interference-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -273,7 +273,7 @@
     {
       return 1.0;
     }
-  uint32_t rate = mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1);
+  uint32_t rate = mode.GetPhyRate (txVector);
   uint64_t nbits = (uint64_t)(rate * duration.GetSeconds ());
   double csr = m_errorRateModel->GetChunkSuccessRate (mode, txVector, snir, (uint32_t)nbits);
   return csr;
diff -Naur ns-3.24.1/src/wifi/model/mac-low.cc ns-3.25/src/wifi/model/mac-low.cc
--- ns-3.24.1/src/wifi/model/mac-low.cc	2015-09-28 20:26:16.000000000 -0700
+++ ns-3.25/src/wifi/model/mac-low.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,6 @@
 #include "yans-wifi-phy.h"
 #include "ampdu-tag.h"
 #include "wifi-mac-queue.h"
-#include "mpdu-standard-aggregator.h"
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT std::clog << "[mac=" << m_self << "] "
@@ -52,11 +51,11 @@
 {
 }
 void
-MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode mode)
+MacLowTransmissionListener::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, double rxSnr, WifiMode mode, double dataSnr)
 {
 }
 void
-MacLowTransmissionListener::MissedBlockAck (void)
+MacLowTransmissionListener::MissedBlockAck (uint32_t nMpdus)
 {
 }
 
@@ -73,7 +72,7 @@
 MacLowAggregationCapableTransmissionListener::~MacLowAggregationCapableTransmissionListener ()
 {
 }
-void MacLowAggregationCapableTransmissionListener::SetAmpdu (bool ampdu)
+void MacLowAggregationCapableTransmissionListener::SetAmpdu (Mac48Address dest, bool enableAmpdu)
 {
 }
 void MacLowAggregationCapableTransmissionListener::CompleteTransfer (Mac48Address address, uint8_t tid)
@@ -117,6 +116,11 @@
 {
   return 0;
 }
+Ptr<MpduAggregator>
+MacLowAggregationCapableTransmissionListener::GetMpduAggregator (void) const
+{
+  return 0;
+}
 Mac48Address
 MacLowAggregationCapableTransmissionListener::GetSrcAddressForAggregation (const WifiMacHeader &hdr)
 {
@@ -360,13 +364,12 @@
     m_sendDataEvent (),
     m_waitSifsEvent (),
     m_endTxNoAckEvent (),
-    m_mpduAggregator (0),
     m_currentPacket (0),
     m_listener (0),
     m_phyMacLowListener (0),
     m_ctsToSelfSupported (false),
     m_receivedAtLeastOneMpdu (false),
-    m_mpduReferenceNumber (0)
+    m_nTxMpdus (0)
 {
   NS_LOG_FUNCTION (this);
   m_lastNavDuration = Seconds (0);
@@ -435,7 +438,6 @@
       delete m_phyMacLowListener;
       m_phyMacLowListener = 0;
     }
-  m_mpduAggregator = 0;
   m_sentMpdus = 0;
   m_aggregateQueue = 0;
   m_ampdu = false;
@@ -532,7 +534,7 @@
 MacLow::ResetPhy (void)
 {
   m_phy->SetReceiveOkCallback (MakeNullCallback<void, Ptr<Packet>, double, WifiTxVector, enum WifiPreamble> ());
-  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<const Packet>, double> ());
+  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<Packet>, double, bool> ());
   RemovePhyMacLowListener (m_phy);
   m_phy = 0;
 }
@@ -744,6 +746,7 @@
   CancelAllEvents ();
   m_listener = listener;
   m_txParams = params;
+  m_currentTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
 
   if (!m_currentHdr.IsQosData () && !m_currentHdr.IsBlockAck () && !m_currentHdr.IsBlockAckReq ())
     {
@@ -762,7 +765,7 @@
         {
           m_txParams.EnableCompressedBlockAck ();
         }
-      else
+      else if (m_currentHdr.IsQosData ())
         {
           //VHT single MPDUs are followed by normal ACKs
           m_txParams.EnableAck ();
@@ -780,13 +783,22 @@
             {
               m_txParams.EnableCompressedBlockAck ();
             }
-          else
+          else if (m_currentHdr.IsQosData ())
             {
               //VHT single MPDUs are followed by normal ACKs
               m_txParams.EnableAck ();
             }
         }
     }
+    
+  if (NeedRts ())
+    {
+      m_txParams.EnableRts ();
+    }
+  else
+    {
+      m_txParams.DisableRts ();
+    }
 
   NS_LOG_DEBUG ("startTx size=" << GetSize (m_currentPacket, &m_currentHdr) <<
                 ", to=" << m_currentHdr.GetAddr1 () << ", listener=" << m_listener);
@@ -797,7 +809,7 @@
     }
   else
     {
-      if (NeedCtsToSelf () && m_ctsToSelfSupported)
+      if ((m_ctsToSelfSupported || m_stationManager->GetUseNonErpProtection ()) && NeedCtsToSelf ())
         {
           SendCtsToSelf ();
         }
@@ -812,6 +824,14 @@
 }
 
 bool
+MacLow::NeedRts (void)
+{
+  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
+  return m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), &m_currentHdr,
+                                    m_currentPacket, dataTxVector);
+}
+
+bool
 MacLow::NeedCtsToSelf (void)
 {
   WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
@@ -819,43 +839,40 @@
 }
 
 void
-MacLow::ReceiveError (Ptr<const Packet> packet, double rxSnr)
+MacLow::ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame)
 {
-  NS_LOG_FUNCTION (this << packet << rxSnr);
+  NS_LOG_FUNCTION (this << packet << rxSnr << isEndOfFrame);
   NS_LOG_DEBUG ("rx failed ");
-  AmpduTag ampdu;
-  Ptr<Packet> pkt = packet->Copy ();
-  bool isInAmpdu = pkt->RemovePacketTag (ampdu);
-
-  if (isInAmpdu && m_receivedAtLeastOneMpdu && (ampdu.GetNoOfMpdus () == 1))
+  if (isEndOfFrame == true && m_receivedAtLeastOneMpdu == true)
     {
-      MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (pkt);
-      MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
       WifiMacHeader hdr;
-      (*n).first->PeekHeader (hdr);
-      if (hdr.IsQosData ())
+      AmpduTag ampdu;
+      if (packet->RemovePacketTag (ampdu))
         {
-          uint8_t tid = hdr.GetQosTid ();
-          AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), tid));
-          if (it != m_bAckAgreements.end ())
-            {
-              NS_LOG_DEBUG ("last a-mpdu subframe detected/sendImmediateBlockAck from=" << hdr.GetAddr2 ());
-              m_sendAckEvent = Simulator::Schedule (GetSifs (),
-                                                    &MacLow::SendBlockAckAfterAmpdu, this,
-                                                    hdr.GetQosTid (),
-                                                    hdr.GetAddr2 (),
-                                                    hdr.GetDuration (),
-                                                    m_currentTxVector);
-              m_receivedAtLeastOneMpdu = false;
-            }
+          MpduAggregator::DeaggregatedMpdus mpdu = MpduAggregator::Deaggregate (packet);
+          mpdu.begin ()->first->PeekHeader (hdr);
         }
-      else if (hdr.IsBlockAckReq ())
+      else
         {
-          NS_LOG_DEBUG ("last a-mpdu subframe is BAR");
-          m_receivedAtLeastOneMpdu = false;
+          packet->PeekHeader (hdr);
         }
+      if (hdr.GetAddr1 () != m_self)
+        {
+          NS_LOG_DEBUG ("hdr addr1 " << hdr.GetAddr1 () << "not for me (" << m_self << "); returning");
+          return;
+        }
+      NS_ASSERT (m_lastReceivedHdr.IsQosData ());
+      NS_LOG_DEBUG ("last a-mpdu subframe detected/sendImmediateBlockAck from=" << m_lastReceivedHdr.GetAddr2 ());
+      m_sendAckEvent = Simulator::Schedule (GetSifs (),
+                                            &MacLow::SendBlockAckAfterAmpdu, this,
+                                            m_lastReceivedHdr.GetQosTid (),
+                                            m_lastReceivedHdr.GetAddr2 (),
+                                            m_lastReceivedHdr.GetDuration (),
+                                            m_currentTxVector,
+                                            rxSnr);
+      m_receivedAtLeastOneMpdu = false;
     }
-  else if (m_txParams.MustWaitFastAck ())
+  if (m_txParams.MustWaitFastAck ())
     {
       NS_ASSERT (m_fastAckFailedTimeoutEvent.IsExpired ());
       m_fastAckFailedTimeoutEvent = Simulator::Schedule (GetSifs (),
@@ -906,6 +923,7 @@
    */
   WifiMacHeader hdr;
   packet->RemoveHeader (hdr);
+  m_lastReceivedHdr = hdr;
 
   bool isPrevNavZero = IsNavZero ();
   NS_LOG_DEBUG ("duration/id=" << hdr.GetDuration ());
@@ -1020,11 +1038,13 @@
            && m_blockAckTimeoutEvent.IsRunning ())
     {
       NS_LOG_DEBUG ("got block ack from " << hdr.GetAddr2 ());
+      SnrTag tag;
+      packet->RemovePacketTag (tag);
       CtrlBAckResponseHeader blockAck;
       packet->RemoveHeader (blockAck);
       m_blockAckTimeoutEvent.Cancel ();
       NotifyAckTimeoutResetNow ();
-      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 (), txVector.GetMode ());
+      m_listener->GotBlockAck (&blockAck, hdr.GetAddr2 (), rxSnr, txVector.GetMode (), tag.Get ());
       m_sentMpdus = 0;
       m_ampdu = false;
       FlushAggregateQueue ();
@@ -1055,7 +1075,8 @@
                                                         blockAckReq,
                                                         hdr.GetAddr2 (),
                                                         hdr.GetDuration (),
-                                                        txVector.GetMode ());
+                                                        txVector.GetMode (),
+                                                        rxSnr);
                 }
               else
                 {
@@ -1272,7 +1293,16 @@
 MacLow::GetAckDuration (WifiTxVector ackTxVector) const
 {
   NS_ASSERT (ackTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); //ACK should always use non-HT PPDU (HT PPDU cases not supported yet)
-  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency (), 0, 0);
+  WifiPreamble preamble;
+  if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
+  else
+    {
+      preamble = WIFI_PREAMBLE_LONG;
+    }
+  return m_phy->CalculateTxDuration (GetAckSize (), ackTxVector, preamble, m_phy->GetFrequency ());
 }
 
 Time
@@ -1287,11 +1317,15 @@
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
-  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  return m_phy->CalculateTxDuration (GetBlockAckSize (type), blockAckReqTxVector, preamble, m_phy->GetFrequency ());
 }
 
 Time
@@ -1305,7 +1339,16 @@
 MacLow::GetCtsDuration (WifiTxVector ctsTxVector) const
 {
   NS_ASSERT (ctsTxVector.GetMode ().GetModulationClass () != WIFI_MOD_CLASS_HT); //CTS should always use non-HT PPDU (HT PPDU cases not supported yet)
-  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, WIFI_PREAMBLE_LONG, m_phy->GetFrequency (), 0, 0);
+  WifiPreamble preamble;
+  if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
+  else
+    {
+      preamble = WIFI_PREAMBLE_LONG;
+    }
+  return m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency ());
 }
 
 uint32_t
@@ -1350,9 +1393,7 @@
 {
   Mac48Address to = hdr->GetAddr1 ();
   WifiMacTrailer fcs;
-  uint32_t size =  packet->GetSize () + hdr->GetSize () + fcs.GetSerializedSize ();
-  //size is not used in anything!! will not worry about aggregation
-  return m_stationManager->GetDataTxVector (to, hdr, packet, size);
+  return m_stationManager->GetDataTxVector (to, hdr, packet);
 }
 
 WifiTxVector
@@ -1400,12 +1441,16 @@
         {
           preamble = WIFI_PREAMBLE_HT_GF;
         }
+      //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
+      else if (m_stationManager->GetShortPreambleEnabled ())
+        {
+          preamble = WIFI_PREAMBLE_SHORT;
+        }
       else
         {
-          //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
           preamble = WIFI_PREAMBLE_LONG;
         }
-      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+      txTime += m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency ());
       txTime += GetCtsDuration (hdr->GetAddr1 (), rtsTxVector);
       txTime += Time (GetSifs () * 2);
     }
@@ -1422,12 +1467,16 @@
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
   uint32_t dataSize = GetSize (packet, hdr);
-  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  txTime += m_phy->CalculateTxDuration (dataSize, dataTxVector, preamble, m_phy->GetFrequency ());
   if (params.MustWaitAck ())
     {
       txTime += GetSifs ();
@@ -1458,12 +1507,16 @@
         {
           preamble = WIFI_PREAMBLE_HT_MF;
         }
+      else if (m_stationManager->GetShortPreambleEnabled ())
+        {
+          preamble = WIFI_PREAMBLE_SHORT;
+        }
       else
         {
           preamble = WIFI_PREAMBLE_LONG;
         }
       txTime += GetSifs ();
-      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+      txTime += m_phy->CalculateTxDuration (params.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency ());
     }
   return txTime;
 }
@@ -1501,7 +1554,7 @@
           cts.SetType (WIFI_MAC_CTL_CTS);
           WifiTxVector txVector = GetRtsTxVector (packet, &hdr);
           Time navCounterResetCtsMissedDelay =
-            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency (), 0, 0) +
+            m_phy->CalculateTxDuration (cts.GetSerializedSize (), txVector, preamble, m_phy->GetFrequency ()) +
             Time (2 * GetSifs ()) + Time (2 * GetSlotTime ());
           m_navCounterResetCtsMissed = Simulator::Schedule (navCounterResetCtsMissedDelay,
                                                             &MacLow::NavCounterResetCtsMissed, this,
@@ -1595,9 +1648,9 @@
                 ", mode=" << txVector.GetMode  () <<
                 ", duration=" << hdr->GetDuration () <<
                 ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
-  if (!m_ampdu || hdr->IsRts ())
+  if (!m_ampdu || hdr->IsRts () || hdr->IsBlockAck ())
     {
-      m_phy->SendPacket (packet, txVector, preamble, 0, 0);
+      m_phy->SendPacket (packet, txVector, preamble);
     }
   else
     {
@@ -1605,10 +1658,15 @@
       Ptr <const Packet> dequeuedPacket;
       WifiMacHeader newHdr;
       WifiMacTrailer fcs;
+      m_nTxMpdus = m_aggregateQueue->GetSize ();
       uint32_t queueSize = m_aggregateQueue->GetSize ();
       bool vhtSingleMpdu = false;
       bool last = false;
-      uint8_t packetType = 0;
+      enum mpduType mpdutype = NORMAL_MPDU;
+      
+      uint8_t tid = GetTid (packet, *hdr);
+      AcIndex ac = QosUtilsMapTidToAc (tid);
+      std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
 
       if (queueSize == 1)
         {
@@ -1633,44 +1691,45 @@
           if (queueSize == 1)
             {
               last = true;
-              packetType = 2;
+              mpdutype = LAST_MPDU_IN_AGGREGATE;
             }
-          m_mpduAggregator->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
+
+          listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
 
           ampdutag.SetNoOfMpdus (queueSize);
           newPacket->AddPacketTag (ampdutag);
+
           if (delay == Seconds (0))
             {
               if (!vhtSingleMpdu)
                 {
                   NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
-                  packetType = 1;
+                  mpdutype = MPDU_IN_AGGREGATE;
                 }
               else
                 {
-                  packetType = 0;
+                  mpdutype = NORMAL_MPDU;
                 }
-              m_phy->SendPacket (newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
+              m_phy->SendPacket (newPacket, txVector, preamble, mpdutype);
             }
           else
             {
-              Simulator::Schedule (delay, &MacLow::SendPacket, this, newPacket, txVector, preamble, packetType, m_mpduReferenceNumber);
+              Simulator::Schedule (delay, &MacLow::SendMpdu, this, newPacket, txVector, preamble, mpdutype);
             }
           if (queueSize > 1)
             {
-              delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency (), packetType, 0);
+              delay = delay + m_phy->CalculateTxDuration (GetSize (newPacket, &newHdr), txVector, preamble, m_phy->GetFrequency (), mpdutype, 0);
             }
           preamble = WIFI_PREAMBLE_NONE;
         }
-      m_mpduReferenceNumber += 1;  // this variable is allowed to overflow
     }
 }
 
 void
-MacLow::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber)
+MacLow::SendMpdu (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype)
 {
   NS_LOG_DEBUG ("Sending MPDU as part of A-MPDU");
-  m_phy->SendPacket (packet, txVector, preamble, packetType, mpduReferenceNumber);
+  m_phy->SendPacket (packet, txVector, preamble, mpdutype);
 }
 
 void
@@ -1733,14 +1792,12 @@
 {
   NS_LOG_FUNCTION (this);
   NS_LOG_DEBUG ("block ack timeout");
-
-  m_stationManager->ReportDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
   MacLowTransmissionListener *listener = m_listener;
   m_listener = 0;
   m_sentMpdus = 0;
   m_ampdu = false;
   FlushAggregateQueue ();
-  listener->MissedBlockAck ();
+  listener->MissedBlockAck (m_nTxMpdus);
 }
 
 void
@@ -1784,7 +1841,12 @@
     {
       preamble = WIFI_PREAMBLE_HT_GF;
     }
-  else //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
+  //Otherwise, RTS should always use non-HT PPDU (HT PPDU cases not supported yet)
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
+  else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
@@ -1795,41 +1857,40 @@
     }
   else
     {
-      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
       duration += GetSifs ();
       duration += GetCtsDuration (m_currentHdr.GetAddr1 (), rtsTxVector);
       duration += GetSifs ();
       duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr),
-                                              dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+                                              m_currentTxVector, preamble, m_phy->GetFrequency ());
       duration += GetSifs ();
       if (m_txParams.MustWaitBasicBlockAck ())
         {
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
-          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
         }
       if (m_txParams.HasNextPacket ())
         {
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+                                                  m_currentTxVector, preamble, m_phy->GetFrequency ());
           if (m_txParams.MustWaitAck ())
             {
               duration += GetSifs ();
-              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
             }
         }
     }
   rts.SetDuration (duration);
 
-  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  Time txDuration = m_phy->CalculateTxDuration (GetRtsSize (), rtsTxVector, preamble, m_phy->GetFrequency ());
   Time timerDelay = txDuration + GetCtsTimeout ();
 
   NS_ASSERT (m_ctsTimeoutEvent.IsExpired ());
@@ -1841,7 +1902,7 @@
   WifiMacTrailer fcs;
   packet->AddTrailer (fcs);
 
-  ForwardDown (packet, &rts, rtsTxVector,preamble);
+  ForwardDown (packet, &rts, rtsTxVector, preamble);
 }
 
 void
@@ -1862,12 +1923,16 @@
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
 
-  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency ());
   if (m_txParams.MustWaitNormalAck ())
     {
       Time timerDelay = txDuration + GetAckTimeout ();
@@ -1931,9 +1996,8 @@
 {
   NS_LOG_FUNCTION (this);
   /* send this packet directly. No RTS is needed. */
-  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
   WifiPreamble preamble;
-  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
+  if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
       preamble = WIFI_PREAMBLE_VHT;
     }
@@ -1942,16 +2006,20 @@
       //In the future has to make sure that receiver has greenfield enabled
       preamble = WIFI_PREAMBLE_HT_GF;
     }
-  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
+  else if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
 
-  StartDataTxTimers (dataTxVector);
+  StartDataTxTimers (m_currentTxVector);
 
   Time duration = Seconds (0.0);
   if (m_txParams.HasDurationId ())
@@ -1963,29 +2031,29 @@
       if (m_txParams.MustWaitBasicBlockAck ())
         {
           duration += GetSifs ();
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
           duration += GetSifs ();
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
           duration += GetSifs ();
-          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
         }
       if (m_txParams.HasNextPacket ())
         {
           duration += GetSifs ();
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+                                                  m_currentTxVector, preamble, m_phy->GetFrequency ());
           if (m_txParams.MustWaitAck ())
             {
               duration += GetSifs ();
-              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
             }
         }
     }
@@ -1998,7 +2066,7 @@
       m_currentPacket->AddTrailer (fcs);
     }
 
-  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector, preamble);
+  ForwardDown (m_currentPacket, &m_currentHdr, m_currentTxVector, preamble);
   m_currentPacket = 0;
 }
 
@@ -2026,13 +2094,17 @@
   cts.SetNoRetry ();
   cts.SetAddr1 (m_self);
 
-  WifiTxVector ctsTxVector = GetCtsToSelfTxVector (m_currentPacket, &m_currentHdr);
+  WifiTxVector ctsTxVector = GetRtsTxVector (m_currentPacket, &m_currentHdr);
 
   WifiPreamble preamble;
   if (ctsTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
@@ -2046,43 +2118,42 @@
     }
   else
     {
-      WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
       duration += GetSifs ();
       duration += m_phy->CalculateTxDuration (GetSize (m_currentPacket,&m_currentHdr),
-                                              dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+                                              m_currentTxVector, preamble, m_phy->GetFrequency ());
       if (m_txParams.MustWaitBasicBlockAck ())
         {
 
           duration += GetSifs ();
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitCompressedBlockAck ())
         {
           duration += GetSifs ();
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
           duration += GetSifs ();
-          duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+          duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
         }
       if (m_txParams.HasNextPacket ())
         {
           duration += GetSifs ();
           duration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (),
-                                                  dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+                                                  m_currentTxVector, preamble, m_phy->GetFrequency ());
           if (m_txParams.MustWaitCompressedBlockAck ())
             {
               duration += GetSifs ();
-              WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+              WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
               duration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
             }
           else if (m_txParams.MustWaitAck ())
             {
               duration += GetSifs ();
-              duration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+              duration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
             }
         }
     }
@@ -2096,7 +2167,7 @@
 
   ForwardDown (packet, &cts, ctsTxVector,preamble);
 
-  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  Time txDuration = m_phy->CalculateTxDuration (GetCtsSize (), ctsTxVector, preamble, m_phy->GetFrequency ());
   txDuration += GetSifs ();
   NS_ASSERT (m_sendDataEvent.IsExpired ());
 
@@ -2135,8 +2206,19 @@
   SnrTag tag;
   tag.Set (rtsSnr);
   packet->AddPacketTag (tag);
+  
+  WifiPreamble preamble;
+  if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
+  else
+    {
+      preamble = WIFI_PREAMBLE_LONG;
+    }
 
-  ForwardDown (packet, &cts, ctsTxVector, WIFI_PREAMBLE_LONG);
+  //CTS should always use non-HT PPDU (HT PPDU cases not supported yet)
+  ForwardDown (packet, &cts, ctsTxVector, preamble);
 }
 
 void
@@ -2147,7 +2229,6 @@
    * RTS/CTS/DATA/ACK hanshake
    */
   NS_ASSERT (m_currentPacket != 0);
-  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
 
   if (m_aggregateQueue->GetSize () != 0)
     {
@@ -2163,7 +2244,7 @@
     }
 
   WifiPreamble preamble;
-  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
+  if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
       preamble = WIFI_PREAMBLE_VHT;
     }
@@ -2172,52 +2253,56 @@
       //In the future has to make sure that receiver has greenfield enabled
       preamble = WIFI_PREAMBLE_HT_GF;
     }
-  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
+  else if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
 
-  StartDataTxTimers (dataTxVector);
+  StartDataTxTimers (m_currentTxVector);
   Time newDuration = Seconds (0);
   if (m_txParams.MustWaitBasicBlockAck ())
     {
       newDuration += GetSifs ();
-      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
       newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, BASIC_BLOCK_ACK);
     }
   else if (m_txParams.MustWaitCompressedBlockAck ())
     {
       newDuration += GetSifs ();
-      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+      WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
       newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
     }
   else if (m_txParams.MustWaitAck ())
     {
       newDuration += GetSifs ();
-      newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+      newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
     }
   if (m_txParams.HasNextPacket ())
     {
       newDuration += GetSifs ();
-      newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+      newDuration += m_phy->CalculateTxDuration (m_txParams.GetNextPacketSize (), m_currentTxVector, preamble, m_phy->GetFrequency ());
       if (m_txParams.MustWaitCompressedBlockAck ())
         {
           newDuration += GetSifs ();
-          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), dataTxVector.GetMode ());
+          WifiTxVector blockAckReqTxVector = GetBlockAckTxVector (m_currentHdr.GetAddr2 (), m_currentTxVector.GetMode ());
           newDuration += GetBlockAckDuration (m_currentHdr.GetAddr1 (), blockAckReqTxVector, COMPRESSED_BLOCK_ACK);
         }
       else if (m_txParams.MustWaitAck ())
         {
           newDuration += GetSifs ();
-          newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), dataTxVector);
+          newDuration += GetAckDuration (m_currentHdr.GetAddr1 (), m_currentTxVector);
         }
     }
 
-  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), dataTxVector, preamble, m_phy->GetFrequency (), 0, 0);
+  Time txDuration = m_phy->CalculateTxDuration (GetSize (m_currentPacket, &m_currentHdr), m_currentTxVector, preamble, m_phy->GetFrequency ());
   duration -= txDuration;
   duration -= GetSifs ();
 
@@ -2232,7 +2317,7 @@
       m_currentPacket->AddTrailer (fcs);
     }
 
-  ForwardDown (m_currentPacket, &m_currentHdr, dataTxVector, preamble);
+  ForwardDown (m_currentPacket, &m_currentHdr, m_currentTxVector, preamble);
   m_currentPacket = 0;
 }
 
@@ -2264,9 +2349,7 @@
 MacLow::SendAckAfterData (Mac48Address source, Time duration, WifiMode dataTxMode, double dataSnr)
 {
   NS_LOG_FUNCTION (this);
-  /* send an ACK when you receive
-   * a packet after SIFS.
-   */
+  // send an ACK, after SIFS, when you receive a packet 
   WifiTxVector ackTxVector = GetAckTxVector (source, dataTxMode);
   WifiMacHeader ack;
   ack.SetType (WIFI_MAC_CTL_ACK);
@@ -2275,9 +2358,11 @@
   ack.SetNoRetry ();
   ack.SetNoMoreFragments ();
   ack.SetAddr1 (source);
+  // 802.11-2012, Section 8.3.1.4:  Duration/ID is received duration value
+  // minus the time to transmit the ACK frame and its SIFS interval
   duration -= GetAckDuration (ackTxVector);
   duration -= GetSifs ();
-  NS_ASSERT (duration >= MicroSeconds (0));
+  NS_ASSERT_MSG (duration >= MicroSeconds (0), "Please provide test case to maintainers if this assert is hit.");
   ack.SetDuration (duration);
 
   Ptr<Packet> packet = Create<Packet> ();
@@ -2288,9 +2373,19 @@
   SnrTag tag;
   tag.Set (dataSnr);
   packet->AddPacketTag (tag);
+  
+  WifiPreamble preamble;
+  if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
+  else
+    {
+      preamble = WIFI_PREAMBLE_LONG;
+    }
 
   //ACK should always use non-HT PPDU (HT PPDU cases not supported yet)
-  ForwardDown (packet, &ack, ackTxVector, WIFI_PREAMBLE_LONG);
+  ForwardDown (packet, &ack, ackTxVector, preamble);
 }
 
 bool
@@ -2525,7 +2620,7 @@
 }
 void
 MacLow::SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
-                              Time duration, WifiMode blockAckReqTxMode)
+                              Time duration, WifiMode blockAckReqTxMode, double rxSnr)
 {
   Ptr<Packet> packet = Create<Packet> ();
   packet->AddHeader (*blockAck);
@@ -2585,18 +2680,25 @@
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
+  else if (m_stationManager->GetShortPreambleEnabled ())
+    {
+      preamble = WIFI_PREAMBLE_SHORT;
+    }
   else
     {
       preamble = WIFI_PREAMBLE_LONG;
     }
+  SnrTag tag;
+  tag.Set (rxSnr);
+  packet->AddPacketTag (tag);
   ForwardDown (packet, &hdr, blockAckReqTxVector, preamble);
   m_currentPacket = 0;
 }
 
 void
-MacLow::SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator, Time duration, WifiTxVector blockAckReqTxVector)
+MacLow::SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator, Time duration, WifiTxVector blockAckReqTxVector, double rxSnr)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << (uint16_t) tid << originator << duration.As (Time::S) << blockAckReqTxVector << rxSnr);
   CtrlBAckResponseHeader blockAck;
   uint16_t seqNumber = 0;
   BlockAckCachesI i = m_bAckCaches.find (std::make_pair (originator, tid));
@@ -2612,12 +2714,12 @@
   NS_LOG_DEBUG ("Got Implicit block Ack Req with seq " << seqNumber);
   (*i).second.FillBlockAckBitmap (&blockAck);
 
-  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxVector.GetMode  ());
+  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxVector.GetMode (), rxSnr);
 }
 
 void
 MacLow::SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
-                                          Time duration, WifiMode blockAckReqTxMode)
+                                          Time duration, WifiMode blockAckReqTxMode, double rxSnr)
 {
   NS_LOG_FUNCTION (this);
   CtrlBAckResponseHeader blockAck;
@@ -2675,7 +2777,7 @@
       NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
     }
 
-  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxMode);
+  SendBlockAckResponse (&blockAck, originator, immediate, duration, blockAckReqTxMode, rxSnr);
 }
 
 void
@@ -2702,27 +2804,16 @@
 }
 
 void
-MacLow::SetMpduAggregator (Ptr<MpduAggregator> aggregator)
-{
-  m_mpduAggregator = aggregator;
-}
-
-Ptr<MpduAggregator>
-MacLow::GetMpduAggregator (void)
-{
-  return m_mpduAggregator;
-}
-
-void
 MacLow::DeaggregateAmpduAndReceive (Ptr<Packet> aggregatedPacket, double rxSnr, WifiTxVector txVector, WifiPreamble preamble)
 {
-  m_currentTxVector = txVector;
+  NS_LOG_FUNCTION (this);
   AmpduTag ampdu;
   bool normalAck = false;
   bool ampduSubframe = false; //flag indicating the packet belongs to an A-MPDU and is not a VHT single MPDU
   if (aggregatedPacket->RemovePacketTag (ampdu))
     {
       ampduSubframe = true;
+      m_currentTxVector = txVector;
       MpduAggregator::DeaggregatedMpdus packets = MpduAggregator::Deaggregate (aggregatedPacket);
       MpduAggregator::DeaggregatedMpdusCI n = packets.begin ();
 
@@ -2732,7 +2823,7 @@
       NotifyNav ((*n).first, firsthdr, preamble);
 
       bool vhtSingleMpdu = (*n).second.GetEof ();
-      if (vhtSingleMpdu == true)
+      if (vhtSingleMpdu)
         {
           //If the MPDU is sent as a VHT single MPDU (EOF=1 in A-MPDU subframe header), then the responder sends an ACK.
           NS_LOG_DEBUG ("Receive VHT single MPDU");
@@ -2741,7 +2832,10 @@
 
       if (firsthdr.GetAddr1 () == m_self)
         {
-          m_receivedAtLeastOneMpdu = true;
+          if (!vhtSingleMpdu)
+            {
+              m_receivedAtLeastOneMpdu = true;
+            }
           if (firsthdr.IsAck () || firsthdr.IsBlockAck () || firsthdr.IsBlockAckReq ())
             {
               ReceiveOk ((*n).first, rxSnr, txVector, preamble, ampduSubframe);
@@ -2762,31 +2856,35 @@
             }
         }
 
-      if (normalAck && (ampdu.GetNoOfMpdus () == 1) && !vhtSingleMpdu)
+      if (ampdu.GetNoOfMpdus () == 1 && !vhtSingleMpdu)
         {
-          //send block Ack
-          if (firsthdr.IsBlockAckReq ())
+          if (normalAck)
             {
-              NS_FATAL_ERROR ("Sending a BlockAckReq with QosPolicy equal to Normal Ack");
-            }
-          uint8_t tid = firsthdr.GetQosTid ();
-          AgreementsI it = m_bAckAgreements.find (std::make_pair (firsthdr.GetAddr2 (), tid));
-          if (it != m_bAckAgreements.end ())
-            {
-              NS_ASSERT (m_sendAckEvent.IsExpired ());
-              /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
-              ResetBlockAckInactivityTimerIfNeeded (it->second.first);
-              NS_LOG_DEBUG ("rx A-MPDU/sendImmediateBlockAck from=" << firsthdr.GetAddr2 ());
-              m_sendAckEvent = Simulator::Schedule (GetSifs (),
-                                                    &MacLow::SendBlockAckAfterAmpdu, this,
-                                                    firsthdr.GetQosTid (),
-                                                    firsthdr.GetAddr2 (),
-                                                    firsthdr.GetDuration (),
-                                                    txVector);
-            }
-          else
-            {
-              NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
+              //send block Ack
+              if (firsthdr.IsBlockAckReq ())
+                {
+                  NS_FATAL_ERROR ("Sending a BlockAckReq with QosPolicy equal to Normal Ack");
+                }
+              uint8_t tid = firsthdr.GetQosTid ();
+              AgreementsI it = m_bAckAgreements.find (std::make_pair (firsthdr.GetAddr2 (), tid));
+              if (it != m_bAckAgreements.end ())
+                {
+                  NS_ASSERT (m_sendAckEvent.IsExpired ());
+                  /* See section 11.5.3 in IEEE 802.11 for mean of this timer */
+                  ResetBlockAckInactivityTimerIfNeeded (it->second.first);
+                  NS_LOG_DEBUG ("rx A-MPDU/sendImmediateBlockAck from=" << firsthdr.GetAddr2 ());
+                  m_sendAckEvent = Simulator::Schedule (GetSifs (),
+                                                        &MacLow::SendBlockAckAfterAmpdu, this,
+                                                        firsthdr.GetQosTid (),
+                                                        firsthdr.GetAddr2 (),
+                                                        firsthdr.GetDuration (),
+                                                        txVector,
+                                                        rxSnr);
+                }
+              else
+                {
+                  NS_LOG_DEBUG ("There's not a valid agreement for this block ack request.");
+                }
             }
           m_receivedAtLeastOneMpdu = false;
         }
@@ -2800,9 +2898,19 @@
 bool
 MacLow::StopMpduAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const
 {
+  if (peekedPacket == 0)
+    {
+      NS_LOG_DEBUG ("no more packets in queue");
+      return true;
+    }
+
   WifiPreamble preamble;
-  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
-  if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
+
+  uint8_t tid = GetTid (peekedPacket, peekedHdr);
+  AcIndex ac = QosUtilsMapTidToAc (tid);
+  std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
+
+  if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
       preamble = WIFI_PREAMBLE_VHT;
     }
@@ -2810,29 +2918,27 @@
     {
       preamble = WIFI_PREAMBLE_HT_GF;
     }
-  else if (dataTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
+  else if (m_currentTxVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT)
     {
       preamble = WIFI_PREAMBLE_HT_MF;
     }
-  else
+  else if (m_stationManager->GetShortPreambleEnabled ())
     {
-      preamble = WIFI_PREAMBLE_LONG;
+      preamble = WIFI_PREAMBLE_SHORT;
     }
-
-  if (peekedPacket == 0)
+  else
     {
-      NS_LOG_DEBUG ("no more packets in queue");
-      return true;
+      preamble = WIFI_PREAMBLE_LONG;
     }
 
   //An HT STA shall not transmit a PPDU that has a duration that is greater than aPPDUMaxTime (10 milliseconds)
-  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, dataTxVector, preamble, m_phy->GetFrequency (), 0, 0) > MilliSeconds (10))
+  if (m_phy->CalculateTxDuration (aggregatedPacket->GetSize () + peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, m_currentTxVector, preamble, m_phy->GetFrequency ()) > MilliSeconds (10))
     {
       NS_LOG_DEBUG ("no more packets can be aggregated to satisfy PPDU <= aPPDUMaxTime");
       return true;
     }
 
-  if (!m_mpduAggregator->CanBeAggregated (peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, aggregatedPacket, size))
+  if (!listenerIt->second->GetMpduAggregator ()->CanBeAggregated (peekedPacket->GetSize () + peekedHdr.GetSize () + WIFI_MAC_FCS_LENGTH, aggregatedPacket, size))
     {
       NS_LOG_DEBUG ("no more packets can be aggregated because the maximum A-MPDU size has been reached");
       return true;
@@ -2850,6 +2956,7 @@
   WifiMacHeader peekedHdr;
   newPacket = packet->Copy ();
   Ptr<Packet> currentAggregatedPacket;
+  CtrlBAckRequestHeader blockAckReq;
   //missing hdr.IsAck() since we have no means of knowing the Tid of the Ack yet
   if (hdr.IsQosData () || hdr.IsBlockAck ()|| hdr.IsBlockAckReq ())
     {
@@ -2862,7 +2969,7 @@
       NS_ASSERT (listenerIt != m_edcaListeners.end ());
       queue = listenerIt->second->GetQueue ();
 
-      if (!hdr.GetAddr1 ().IsBroadcast () && m_mpduAggregator != 0)
+      if (!hdr.GetAddr1 ().IsBroadcast () && listenerIt->second->GetMpduAggregator () != 0)
         {
           //Have to make sure that their exist a block Ack agreement before sending an AMPDU (BlockAck Manager)
           if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1 (), tid))
@@ -2891,7 +2998,7 @@
                   WifiMacTrailer fcs;
                   newPacket->AddTrailer (fcs);
 
-                  aggregated = m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+                  aggregated = listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket);
 
                   if (aggregated)
                     {
@@ -2905,7 +3012,6 @@
                 {
                   blockAckSize = packet->GetSize () + hdr.GetSize () + WIFI_MAC_FCS_LENGTH;
                   qosPolicy = 3; //if the last subrame is block ack req then set ack policy of all frames to blockack
-                  CtrlBAckRequestHeader blockAckReq;
                   packet->PeekHeader (blockAckReq);
                   startingSequenceNumber = blockAckReq.GetStartingSequence ();
                 }
@@ -2962,7 +3068,7 @@
                   newPacket->AddHeader (peekedHdr);
                   WifiMacTrailer fcs;
                   newPacket->AddTrailer (fcs);
-                  aggregated = m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+                  aggregated = listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket);
                   if (aggregated)
                     {
                       m_aggregateQueue->Enqueue (aggPacket, peekedHdr);
@@ -3064,7 +3170,8 @@
                       newPacket->AddHeader (peekedHdr);
                       WifiMacTrailer fcs;
                       newPacket->AddTrailer (fcs);
-                      m_mpduAggregator->Aggregate (newPacket, currentAggregatedPacket);
+                      listenerIt->second->GetMpduAggregator ()->Aggregate (newPacket, currentAggregatedPacket);
+                      currentAggregatedPacket->AddHeader (blockAckReq);
                     }
                   if (qosPolicy == 0)
                     {
@@ -3077,7 +3184,7 @@
                   newPacket = currentAggregatedPacket;
                   newPacket->AddPacketTag (ampdutag);
                   NS_LOG_DEBUG ("tx unicast A-MPDU");
-                  listenerIt->second->SetAmpdu (true);
+                  listenerIt->second->SetAmpdu (hdr.GetAddr1 (), true);
                 }
               else
                 {
@@ -3098,7 +3205,7 @@
               peekedHdr.SetQosAckPolicy (WifiMacHeader::NORMAL_ACK);
 
               currentAggregatedPacket = Create<Packet> ();
-              m_mpduAggregator->AggregateVhtSingleMpdu (packet, currentAggregatedPacket);
+              listenerIt->second->GetMpduAggregator ()->AggregateVhtSingleMpdu (packet, currentAggregatedPacket);
               m_aggregateQueue->Enqueue (packet, peekedHdr);
               m_sentMpdus = 1;
 
@@ -3119,7 +3226,7 @@
               newPacket->AddPacketTag (ampdutag);
 
               NS_LOG_DEBUG ("tx unicast VHT single MPDU with sequence number " << hdr.GetSequenceNumber ());
-              listenerIt->second->SetAmpdu (true);
+              listenerIt->second->SetAmpdu (hdr.GetAddr1 (), true);
             }
         }
     }
diff -Naur ns-3.24.1/src/wifi/model/mac-low.h ns-3.25/src/wifi/model/mac-low.h
--- ns-3.24.1/src/wifi/model/mac-low.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mac-low.h	2016-03-23 21:36:53.000000000 -0700
@@ -29,6 +29,7 @@
 
 #include "wifi-mac-header.h"
 #include "wifi-mode.h"
+#include "wifi-phy.h"
 #include "wifi-preamble.h"
 #include "wifi-remote-station-manager.h"
 #include "ctrl-headers.h"
@@ -46,6 +47,7 @@
 #include "msdu-aggregator.h"
 
 class TwoLevelAggregationTest;
+class AmpduAggregationTest;
 
 namespace ns3 {
 
@@ -95,7 +97,9 @@
   /**
    * \param blockAck Block ack response header
    * \param source Address of block ack sender
+   * \param rxSnr received SNR of block ack response
    * \param txMode mode of block ack response
+   * \param dataSnr SNR conveyed from remote station (received data SNR)
    *
    * Invoked when ns3::MacLow receives a block ack frame.
    * Block ack frame is received after a block ack request
@@ -105,8 +109,10 @@
    * queue that intends to be notified by MacLow of reception
    * of a block ack must redefine this function.
    */
-  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, WifiMode txMode);
+  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source, double rxSnr, WifiMode txMode, double dataSnr);
   /**
+   * \param nMpdus number of MPDUs that were transmitted in the unsuccesful A-MPDU transmission
+   *
    * ns3::MacLow did not receive an expected BLOCK_ACK within
    * BlockAckTimeout. This method is used only for immediate
    * block ack variant. With delayed block ack, the MissedAck method will be
@@ -115,7 +121,7 @@
    * will send the block ack back to the tx station which will reply with a
    * normal ack to the rx station.
    */
-  virtual void MissedBlockAck (void);
+  virtual void MissedBlockAck (uint32_t nMpdus);
   /**
    * Invoked when ns3::MacLow wants to start a new transmission
    * as configured by MacLowTransmissionParameters::EnableNextData.
@@ -220,7 +226,7 @@
    * of an A-MPDU with ImmediateBlockAck policy (i.e. no BAR is scheduled)
    */
   virtual void CompleteTransfer (Mac48Address address, uint8_t tid);
-  virtual void SetAmpdu (bool ampdu);
+  virtual void SetAmpdu (Mac48Address dest, bool enableAmpdu);
   /**
    * This function stores an MPDU (part of an A-MPDU) in blockackagreement (i.e. the sender is waiting
    * for a blockack containing the sequence number of this MPDU).
@@ -279,6 +285,9 @@
   virtual Ptr<MsduAggregator> GetMsduAggregator (void) const;
   /**
    */
+  virtual Ptr<MpduAggregator> GetMpduAggregator (void) const;
+  /**
+   */
   virtual Mac48Address GetSrcAddressForAggregation (const WifiMacHeader &hdr);
   /**
    */
@@ -487,6 +496,7 @@
 public:
   // Allow test cases to access private members
   friend class ::TwoLevelAggregationTest;
+  friend class ::AmpduAggregationTest;
   /**
    * typedef for a callback for MacLowRx
    */
@@ -524,17 +534,6 @@
    */
   void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> manager);
   /**
-   * Set up MpduAggregator associated with this MacLow.
-   *
-   * \param aggregator MpduAggregator associated with this MacLow
-   */
-  void SetMpduAggregator (Ptr<MpduAggregator> aggregator);
-  /**
-   *
-   * \return the attached MpduAggregator
-   */
-  Ptr<MpduAggregator> GetMpduAggregator (void);
-  /**
    * Set MAC address of this MacLow.
    *
    * \param ad Mac48Address of this MacLow
@@ -732,11 +731,12 @@
   /**
    * \param packet packet received.
    * \param rxSnr snr of packet received.
+   * \param isEndOfFrame PHY-RXEND indication.
    *
    * This method is typically invoked by the lower PHY layer to notify
    * the MAC layer that a packet was unsuccessfully received.
    */
-  void ReceiveError (Ptr<const Packet> packet, double rxSnr);
+  void ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame);
   /**
    * \param duration switching delay duration.
    *
@@ -885,16 +885,15 @@
   void ForwardDown (Ptr<const Packet> packet, const WifiMacHeader *hdr,
                     WifiTxVector txVector, WifiPreamble preamble);
   /**
-   * Forward the packet down to WifiPhy for transmission. This is called for each MPDU when MPDU aggregation is used.
+   * Forward the MPDU down to WifiPhy for transmission. This is called for each MPDU when MPDU aggregation is used.
    *
    * \param packet
    * \param hdr
    * \param txVector
    * \param preamble
-   * \param packetType
-   * \param mpduReferenceNumber
+   * \param mpdutype
    */
-  void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber);
+  void SendMpdu (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype);
   /**
    * Return a TXVECTOR for the RTS frame given the destination.
    * The function consults WifiRemoteStationManager, which controls the rate
@@ -1013,6 +1012,13 @@
    */
   Time GetBlockAckDuration (Mac48Address to, WifiTxVector blockAckReqTxVector, enum BlockAckType type) const;
   /**
+   * Check if the current packet should be sent with a RTS protection.
+   *
+   * \return true if RTS protection should be used,
+   *         false otherwise
+   */
+  bool NeedRts (void);
+  /**
    * Check if CTS-to-self mechanism should be used for the current packet.
    *
    * \return true if CTS-to-self mechanism should be used for the current packet,
@@ -1216,15 +1222,16 @@
    * \param originator
    * \param duration
    * \param blockAckReqTxMode
+   * \param rxSnr
    */
   void SendBlockAckAfterBlockAckRequest (const CtrlBAckRequestHeader reqHdr, Mac48Address originator,
-                                         Time duration, WifiMode blockAckReqTxMode);
+                                         Time duration, WifiMode blockAckReqTxMode, double rxSnr);
   /**
    * Invoked after an A-MPDU has been received. Looks for corresponding
    * block ack agreement and creates block ack bitmap on a received packets basis.
    */
   void SendBlockAckAfterAmpdu (uint8_t tid, Mac48Address originator,
-                               Time duration, WifiTxVector blockAckReqTxVector);
+                               Time duration, WifiTxVector blockAckReqTxVector, double rxSnr);
   /**
    * This method creates block ack frame with header equals to <i>blockAck</i> and start its transmission.
    *
@@ -1233,9 +1240,10 @@
    * \param immediate
    * \param duration
    * \param blockAckReqTxMode
+   * \param rxSnr
    */
   void SendBlockAckResponse (const CtrlBAckResponseHeader* blockAck, Mac48Address originator, bool immediate,
-                             Time duration, WifiMode blockAckReqTxMode);
+                             Time duration, WifiMode blockAckReqTxMode, double rxSnr);
   /**
    * Every time that a block ack request or a packet with ack policy equals to <i>block ack</i>
    * are received, if a relative block ack agreement exists and the value of inactivity timeout
@@ -1322,10 +1330,9 @@
   EventId m_navCounterResetCtsMissed;   //!< Event to reset NAV when CTS is not received
   EventId m_waitRifsEvent;              //!< Wait for RIFS event
 
-  Ptr<MpduAggregator> m_mpduAggregator; //!<
-
   Ptr<Packet> m_currentPacket;              //!< Current packet transmitted/to be transmitted
-  WifiMacHeader m_currentHdr;               //!< Header of the current packet
+  WifiMacHeader m_currentHdr;               //!< Header of the current transmitted packet
+  WifiMacHeader m_lastReceivedHdr;          //!< Header of the last received packet
   MacLowTransmissionParameters m_txParams;  //!< Transmission parameters of the current packet
   MacLowTransmissionListener *m_listener;   //!< Transmission listener for the current packet
   Mac48Address m_self;                      //!< Address of this MacLow (Mac48Address)
@@ -1373,7 +1380,7 @@
   WifiTxVector m_currentTxVector;     //!< TXVECTOR used for the current packet transmission
   bool m_receivedAtLeastOneMpdu;      //!< Flag whether an MPDU has already been successfully received while receiving an A-MPDU
   std::vector<Item> m_txPackets;      //!< Contain temporary items to be sent with the next A-MPDU transmission, once RTS/CTS exchange has succeeded. It is not used in other cases.
-  uint32_t m_mpduReferenceNumber;       //!< A-MPDU reference number to identify all subframes belonging to the same A-MPDU
+  uint32_t m_nTxMpdus;                //!<Holds the number of transmitted MPDUs in the last A-MPDU transmission
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/mgt-headers.cc ns-3.25/src/wifi/model/mgt-headers.cc
--- ns-3.24.1/src/wifi/model/mgt-headers.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mgt-headers.cc	2016-03-23 21:36:53.000000000 -0700
@@ -186,6 +186,18 @@
 }
 
 void
+MgtProbeResponseHeader::SetCapabilities (CapabilityInformation capabilities)
+{
+  m_capability = capabilities;
+}
+
+CapabilityInformation
+MgtProbeResponseHeader::GetCapabilities (void) const
+{
+  return m_capability;
+}
+
+void
 MgtProbeResponseHeader::SetHtCapabilities (HtCapabilities htcapabilities)
 {
   m_htCapability = htcapabilities;
@@ -198,6 +210,18 @@
 }
 
 void
+MgtProbeResponseHeader::SetHtOperations (HtOperations htoperations)
+{
+  m_htOperations = htoperations;
+}
+
+HtOperations
+MgtProbeResponseHeader::GetHtOperations (void) const
+{
+  return m_htOperations;
+}
+
+void
 MgtProbeResponseHeader::SetVhtCapabilities (VhtCapabilities vhtcapabilities)
 {
   m_vhtCapability = vhtcapabilities;
@@ -227,6 +251,18 @@
   m_rates = rates;
 }
 
+void
+MgtProbeResponseHeader::SetErpInformation (ErpInformation erpInformation)
+{
+  m_erpInformation = erpInformation;
+}
+
+ErpInformation
+MgtProbeResponseHeader::GetErpInformation (void) const
+{
+  return m_erpInformation;
+}
+
 TypeId
 MgtProbeResponseHeader::GetTypeId (void)
 {
@@ -254,8 +290,10 @@
   size += m_ssid.GetSerializedSize ();
   size += m_rates.GetSerializedSize ();
   //size += 3; //ds parameter set
+  size += m_erpInformation.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
   size += m_htCapability.GetSerializedSize ();
+  size += m_htOperations.GetSerializedSize ();
   size += m_vhtCapability.GetSerializedSize ();
   return size;
 }
@@ -265,7 +303,9 @@
 {
   os << "ssid=" << m_ssid << ", "
      << "rates=" << m_rates << ", "
+     << "ERP information=" << m_erpInformation << ", "
      << "HT Capabilities=" << m_htCapability << " , "
+     << "HT Operations=" << m_htOperations << " , "
      << "VHT Capabilities= " << m_vhtCapability;
 }
 
@@ -288,8 +328,10 @@
   i = m_ssid.Serialize (i);
   i = m_rates.Serialize (i);
   //i.WriteU8 (0, 3); //ds parameter set.
+  i = m_erpInformation.Serialize (i);
   i = m_rates.extended.Serialize (i);
   i = m_htCapability.Serialize (i);
+  i = m_htOperations.Serialize (i);
   i = m_vhtCapability.Serialize (i);
 }
 
@@ -304,8 +346,10 @@
   i = m_ssid.Deserialize (i);
   i = m_rates.Deserialize (i);
   //i.Next (3); //ds parameter set
+  i = m_erpInformation.DeserializeIfPresent (i);
   i = m_rates.extended.DeserializeIfPresent (i);
   i = m_htCapability.DeserializeIfPresent (i);
+  i = m_htOperations.DeserializeIfPresent (i);
   i = m_vhtCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
@@ -358,15 +402,33 @@
 }
 
 void
+MgtAssocRequestHeader::SetListenInterval (uint16_t interval)
+{
+  m_listenInterval = interval;
+}
+
+void
+MgtAssocRequestHeader::SetCapabilities (CapabilityInformation capabilities)
+{
+  m_capability = capabilities;
+}
+
+CapabilityInformation
+MgtAssocRequestHeader::GetCapabilities (void) const
+{
+  return m_capability;
+}
+
+void
 MgtAssocRequestHeader::SetHtCapabilities (HtCapabilities htcapabilities)
 {
   m_htCapability = htcapabilities;
 }
 
-void
-MgtAssocRequestHeader::SetListenInterval (uint16_t interval)
+HtCapabilities
+MgtAssocRequestHeader::GetHtCapabilities (void) const
 {
-  m_listenInterval = interval;
+  return m_htCapability;
 }
 
 void
@@ -381,12 +443,6 @@
   return m_vhtCapability;
 }
 
-HtCapabilities
-MgtAssocRequestHeader::GetHtCapabilities (void) const
-{
-  return m_htCapability;
-}
-
 Ssid
 MgtAssocRequestHeader::GetSsid (void) const
 {
@@ -430,9 +486,9 @@
   size += 2;
   size += m_ssid.GetSerializedSize ();
   size += m_rates.GetSerializedSize ();
+  size += m_rates.extended.GetSerializedSize ();
   size += m_htCapability.GetSerializedSize ();
   size += m_vhtCapability.GetSerializedSize ();
-  size += m_rates.extended.GetSerializedSize ();
   return size;
 }
 
@@ -513,11 +569,41 @@
 }
 
 void
+MgtAssocResponseHeader::SetCapabilities (CapabilityInformation capabilities)
+{
+  m_capability = capabilities;
+}
+
+CapabilityInformation
+MgtAssocResponseHeader::GetCapabilities (void) const
+{
+  return m_capability;
+}
+
+void
 MgtAssocResponseHeader::SetHtCapabilities (HtCapabilities htcapabilities)
 {
   m_htCapability = htcapabilities;
 }
 
+HtCapabilities
+MgtAssocResponseHeader::GetHtCapabilities (void) const
+{
+  return m_htCapability;
+}
+
+void
+MgtAssocResponseHeader::SetHtOperations (HtOperations htoperations)
+{
+  m_htOperations = htoperations;
+}
+
+HtOperations
+MgtAssocResponseHeader::GetHtOperations (void) const
+{
+  return m_htOperations;
+}
+
 void
 MgtAssocResponseHeader::SetVhtCapabilities (VhtCapabilities vhtcapabilities)
 {
@@ -530,12 +616,19 @@
   return m_vhtCapability;
 }
 
-HtCapabilities
-MgtAssocResponseHeader::GetHtCapabilities (void) const
+void
+MgtAssocResponseHeader::SetErpInformation (ErpInformation erpInformation)
 {
-  return m_htCapability;
+  m_erpInformation = erpInformation;
 }
 
+ErpInformation
+MgtAssocResponseHeader::GetErpInformation (void) const
+{
+  return m_erpInformation;
+}
+
+
 TypeId
 MgtAssocResponseHeader::GetTypeId (void)
 {
@@ -561,8 +654,10 @@
   size += m_code.GetSerializedSize ();
   size += 2; //aid
   size += m_rates.GetSerializedSize ();
+  size += m_erpInformation.GetSerializedSize ();
   size += m_rates.extended.GetSerializedSize ();
   size += m_htCapability.GetSerializedSize ();
+  size += m_htOperations.GetSerializedSize ();
   size += m_vhtCapability.GetSerializedSize ();
   return size;
 }
@@ -572,7 +667,9 @@
 {
   os << "status code=" << m_code << ", "
      << "rates=" << m_rates << ", "
+     << "ERP information=" << m_erpInformation << ", "
      << "HT Capabilities=" << m_htCapability << " , "
+     << "HT Operations=" << m_htOperations << " , "
      << "VHT Capabilities= " << m_vhtCapability;
 }
 
@@ -584,8 +681,10 @@
   i = m_code.Serialize (i);
   i.WriteHtolsbU16 (m_aid);
   i = m_rates.Serialize (i);
+  i = m_erpInformation.Serialize (i);
   i = m_rates.extended.Serialize (i);
   i = m_htCapability.Serialize (i);
+  i = m_htOperations.Serialize (i);
   i = m_vhtCapability.Serialize (i);
 }
 
@@ -597,8 +696,10 @@
   i = m_code.Deserialize (i);
   m_aid = i.ReadLsbtohU16 ();
   i = m_rates.Deserialize (i);
+  i = m_erpInformation.DeserializeIfPresent (i);
   i = m_rates.extended.DeserializeIfPresent (i);
   i = m_htCapability.DeserializeIfPresent (i);
+  i = m_htOperations.DeserializeIfPresent (i);
   i = m_vhtCapability.DeserializeIfPresent (i);
   return i.GetDistanceFrom (start);
 }
diff -Naur ns-3.24.1/src/wifi/model/mgt-headers.h ns-3.25/src/wifi/model/mgt-headers.h
--- ns-3.24.1/src/wifi/model/mgt-headers.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mgt-headers.h	2016-03-23 21:36:53.000000000 -0700
@@ -31,8 +31,9 @@
 #include "supported-rates.h"
 #include "ssid.h"
 #include "ht-capabilities.h"
-#include "ht-capabilities.h"
+#include "ht-operations.h"
 #include "vht-capabilities.h"
+#include "erp-information.h"
 
 namespace ns3 {
 
@@ -65,31 +66,41 @@
    */
   void SetListenInterval (uint16_t interval);
   /**
+   * Set the Capability information.
+   *
+   * \param capabilities Capability information
+   */
+  void SetCapabilities (CapabilityInformation capabilities);
+  /**
    * Set the HT capabilities.
    *
    * \param htcapabilities HT capabilities
    */
   void SetHtCapabilities (HtCapabilities htcapabilities);
   /**
-    * Set the VHT capabilities.
-    *
-    * \param vhtcapabilities VHT capabilities
-    */
+   * Set the VHT capabilities.
+   *
+   * \param vhtcapabilities VHT capabilities
+   */
   void SetVhtCapabilities (VhtCapabilities vhtcapabilities);
   /**
-  * Return the VHT capabilities.
-  *
-  * \return VHT capabilities
-  */
-  VhtCapabilities GetVhtCapabilities (void) const;
-
+   * Return the Capability information.
+   *
+   * \return Capability information
+   */
+  CapabilityInformation GetCapabilities (void) const;
   /**
    * Return the HT capabilities.
    *
    * \return HT capabilities
    */
   HtCapabilities GetHtCapabilities (void) const;
-
+  /**
+   * Return the VHT capabilities.
+   *
+   * \return VHT capabilities
+   */
+  VhtCapabilities GetVhtCapabilities (void) const;
   /**
    * Return the Service Set Identifier (SSID).
    *
@@ -126,8 +137,8 @@
   SupportedRates m_rates;             //!< List of supported rates
   CapabilityInformation m_capability; //!< Capability information
   HtCapabilities m_htCapability;      //!< HT capabilities
-  uint16_t m_listenInterval;
   VhtCapabilities m_vhtCapability;    //!< VHT capabilities
+  uint16_t m_listenInterval;
 };
 
 
@@ -154,22 +165,46 @@
    */
   SupportedRates GetSupportedRates (void);
   /**
+   * Return the Capability information.
+   *
+   * \return Capability information
+   */
+  CapabilityInformation GetCapabilities (void) const;
+  /**
+   * Set the Capability information.
+   *
+   * \param capabilities Capability information
+   */
+  void SetCapabilities (CapabilityInformation capabilities);
+  /**
    * Return the HT capabilities.
    *
    * \return HT capabilities
    */
   HtCapabilities GetHtCapabilities (void) const;
   /**
-    * Set the VHT capabilities.
-    *
-    * \param vhtcapabilities VHT capabilities
-    */
+   * Return the HT operations.
+   *
+   * \return HT operations
+   */
+  HtOperations GetHtOperations (void) const;
+  /**
+   * Return the ERP information.
+   *
+   * \return the ERP information
+   */
+  ErpInformation GetErpInformation (void) const;
+  /**
+   * Set the VHT capabilities.
+   *
+   * \param vhtcapabilities VHT capabilities
+   */
   void SetVhtCapabilities (VhtCapabilities vhtcapabilities);
   /**
-  * Return the VHT capabilities.
-  *
-  * \return VHT capabilities
-  */
+   * Return the VHT capabilities.
+   *
+   * \return VHT capabilities
+   */
   VhtCapabilities GetVhtCapabilities (void) const;
   /**
    * Set the HT capabilities.
@@ -178,6 +213,12 @@
    */
   void SetHtCapabilities (HtCapabilities htcapabilities);
   /**
+   * Set the HT operations.
+   *
+   * \param htoperations HT operations
+   */
+  void SetHtOperations (HtOperations htoperations);
+  /**
    * Set the supported rates.
    *
    * \param rates the supported rates
@@ -189,6 +230,12 @@
    * \param code the status code
    */
   void SetStatusCode (StatusCode code);
+  /**
+   * Set the ERP information.
+   *
+   * \param erpInformation the ERP information
+   */
+  void SetErpInformation (ErpInformation erpInformation);
 
   /**
    * Register this type.
@@ -201,13 +248,16 @@
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
+
 private:
   SupportedRates m_rates; //!< List of supported rates
   CapabilityInformation m_capability; //!< Capability information
   StatusCode m_code; //!< Status code
   uint16_t m_aid;
   HtCapabilities m_htCapability; //!< HT capabilities
+  HtOperations m_htOperations; //!< HT operations
   VhtCapabilities m_vhtCapability; //!< VHT capabilities
+  ErpInformation m_erpInformation;    //!< ERP information
 };
 
 
@@ -245,6 +295,12 @@
    */
   SupportedRates GetSupportedRates (void) const;
   /**
+   * Set the HT capabilities.
+   *
+   * \param htcapabilities HT capabilities
+   */
+  void SetHtCapabilities (HtCapabilities htcapabilities);
+  /**
    * Return the HT capabilities.
    *
    * \return HT capabilities
@@ -264,13 +320,6 @@
   VhtCapabilities GetVhtCapabilities (void) const;
 
   /**
-   * Set the HT capabilities.
-   *
-   * \param htcapabilities HT capabilities
-   */
-  void SetHtCapabilities (HtCapabilities htcapabilities);
-
-  /**
    * Register this type.
    * \return The TypeId.
    */
@@ -283,9 +332,9 @@
 
 
 private:
-  Ssid m_ssid;                   //!< Service Set ID (SSID)
-  SupportedRates m_rates;        //!< List of supported rates
-  HtCapabilities m_htCapability; //!< HT capabilities
+  Ssid m_ssid;                     //!< Service Set ID (SSID)
+  SupportedRates m_rates;          //!< List of supported rates
+  HtCapabilities m_htCapability;   //!< HT capabilities
   VhtCapabilities m_vhtCapability; //!< VHT capabilities
 };
 
@@ -319,30 +368,60 @@
    */
   SupportedRates GetSupportedRates (void) const;
   /**
+   * Return the Capability information.
+   *
+   * \return Capability information
+   */
+  CapabilityInformation GetCapabilities (void) const;
+  /**
    * Return the HT capabilities.
    *
    * \return HT capabilities
    */
   HtCapabilities GetHtCapabilities (void) const;
   /**
-   * Set the VHT capabilities.
+   * Return the HT operations.
    *
-   * \param vhtcapabilities VHT capabilities
+   * \return HT operations
    */
-  void SetVhtCapabilities (VhtCapabilities vhtcapabilities);
+  HtOperations GetHtOperations (void) const;
   /**
-  * Return the VHT capabilities.
-  *
-  * \return VHT capabilities
-  */
+   * Return the VHT capabilities.
+   *
+   * \return VHT capabilities
+   */
   VhtCapabilities GetVhtCapabilities (void) const;
   /**
+   * Return the ERP information.
+   *
+   * \return the ERP information
+   */
+  ErpInformation GetErpInformation (void) const;
+  /**
+   * Set the Capability information.
+   *
+   * \param capabilities Capability information
+   */
+  void SetCapabilities (CapabilityInformation capabilities);
+  /**
    * Set the HT capabilities.
    *
    * \param htcapabilities HT capabilities
    */
   void SetHtCapabilities (HtCapabilities htcapabilities);
   /**
+   * Set the HT operations.
+   *
+   * \param htoperations HT operations
+   */
+  void SetHtOperations (HtOperations htoperations);
+  /**
+   * Set the VHT capabilities.
+   *
+   * \param vhtcapabilities VHT capabilities
+   */
+  void SetVhtCapabilities (VhtCapabilities vhtcapabilities);
+  /**
    * Set the Service Set Identifier (SSID).
    *
    * \param ssid SSID
@@ -361,6 +440,12 @@
    */
   void SetSupportedRates (SupportedRates rates);
   /**
+   * Set the ERP information.
+   *
+   * \param erpInformation the ERP information
+   */
+  void SetErpInformation (ErpInformation erpInformation);
+  /**
    * Return the time stamp.
    *
    * \return time stamp
@@ -378,6 +463,7 @@
   virtual void Serialize (Buffer::Iterator start) const;
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
+
 private:
   uint64_t m_timestamp;               //!< Timestamp
   Ssid m_ssid;                        //!< Service set ID (SSID)
@@ -385,7 +471,9 @@
   SupportedRates m_rates;             //!< List of supported rates
   CapabilityInformation m_capability; //!< Capability information
   HtCapabilities m_htCapability;      //!< HT capabilities
+  HtOperations m_htOperations;        //!< HT operations
   VhtCapabilities m_vhtCapability;    //!< VHT capabilities
+  ErpInformation m_erpInformation;    //!< ERP information
 };
 
 
diff -Naur ns-3.24.1/src/wifi/model/minstrel-ht-wifi-manager.cc ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/minstrel-ht-wifi-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,1916 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Duy Nguyen
+ * Copyright (c) 2015 Ghada Badawy
+ *
+ * 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: Duy Nguyen <duy@soe.ucsc.edu>
+ *         Ghada Badawy <gbadawy@gmail.com>
+ *         Matias Richart <mrichart@fing.edu.uy>
+ *
+ * Some Comments:
+ *
+ * 1) By default, Minstrel applies the multi-rate retry (the core of Minstrel
+ *    algorithm). Otherwise, please use ConstantRateWifiManager instead.
+ *
+ * 2) Sampling is done differently from legacy Minstrel. Minstrel-HT tries
+ * to sample all rates in all groups at least once and to avoid many
+ * consecutive samplings.
+ *
+ * 3) Sample rate is tried only once, at first place of the MRR chain.
+ *
+ * reference: http://lwn.net/Articles/376765/
+ */
+
+#include "minstrel-ht-wifi-manager.h"
+#include "wifi-phy.h"
+#include "ns3/random-variable-stream.h"
+#include "ns3/simulator.h"
+#include "ns3/log.h"
+#include "ns3/uinteger.h"
+#include "ns3/double.h"
+#include "ns3/wifi-mac.h"
+#include "ns3/assert.h"
+#include "ns3/boolean.h"
+#include "ns3/string.h"
+#include <vector>
+#include <iomanip>
+#include <fstream>
+
+#define Min(a,b) ((a < b) ? a : b)
+#define Max(a,b) ((a > b) ? a : b)
+
+NS_LOG_COMPONENT_DEFINE ("MinstrelHtWifiManager");
+
+namespace ns3 {
+
+struct MinstrelHtWifiRemoteStation : MinstrelWifiRemoteStation
+{
+  void DisposeStation ();
+
+  uint32_t m_sampleGroup;     //!< The group that the sample rate belongs to.
+
+  uint32_t m_sampleWait;      //!< How many transmission attempts to wait until a new sample.
+  uint32_t m_sampleTries;     //!< Number of sample tries after waiting sampleWait.
+  uint32_t m_sampleCount;     //!< Max number of samples per update interval.
+  uint32_t m_numSamplesSlow;  //!< Number of times a slow rate was sampled.
+
+  double m_avgAmpduLen;       //!< Average number of MPDUs in an A-MPDU.
+  double m_ampduLen;          //!< Number of MPDUs in an A-MPDU.
+  uint32_t m_ampduPacketCount; //!< Number of A-MPDUs transmitted.
+
+  McsGroupData m_groupsTable;  //!< Table of groups with stats.
+  bool m_isHt;                 //!< If the station is HT capable.
+
+  std::ofstream m_statsFile;   //!< File where statistics table is written.
+};
+
+void
+MinstrelHtWifiRemoteStation::DisposeStation ()
+{
+  if (m_isHt)
+    {
+      std::vector<std::vector<uint32_t> > ().swap (m_sampleTable);
+      for (uint8_t j = 0; j < m_groupsTable.size (); j++)
+        {
+          std::vector<struct HtRateInfo> ().swap (m_groupsTable[j].m_ratesTable);
+        }
+      std::vector<struct GroupInfo> ().swap (m_groupsTable);
+      m_statsFile.close ();
+    }
+}
+
+NS_OBJECT_ENSURE_REGISTERED (MinstrelHtWifiManager);
+
+TypeId
+MinstrelHtWifiManager::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::MinstrelHtWifiManager")
+    .SetParent<WifiRemoteStationManager> ()
+    .AddConstructor<MinstrelHtWifiManager> ()
+    .SetGroupName ("Wifi")
+    .AddAttribute ("UpdateStatistics",
+                   "The interval between updating statistics table ",
+                   TimeValue (MilliSeconds (100)),
+                   MakeTimeAccessor (&MinstrelHtWifiManager::m_updateStats),
+                   MakeTimeChecker ())
+    .AddAttribute ("LookAroundRate",
+                   "The percentage to try other rates (for legacy Minstrel)",
+                   DoubleValue (10),
+                   MakeDoubleAccessor (&MinstrelHtWifiManager::m_lookAroundRate),
+                   MakeDoubleChecker<double> (0, 100))
+    .AddAttribute ("EWMA",
+                   "EWMA level",
+                   DoubleValue (75),
+                   MakeDoubleAccessor (&MinstrelHtWifiManager::m_ewmaLevel),
+                   MakeDoubleChecker<double> (0, 100))
+    .AddAttribute ("SampleColumn",
+                   "The number of columns used for sampling",
+                   UintegerValue (10),
+                   MakeUintegerAccessor (&MinstrelHtWifiManager::m_nSampleCol),
+                   MakeUintegerChecker <uint32_t> ())
+    .AddAttribute ("PacketLength",
+                   "The packet length used for calculating mode TxTime",
+                   UintegerValue (1200),
+                   MakeUintegerAccessor (&MinstrelHtWifiManager::m_frameLength),
+                   MakeUintegerChecker <uint32_t> ())
+    .AddAttribute ("UseVhtOnly",
+                   "Use only VHT MCSs (and not HT) when VHT is available",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&MinstrelHtWifiManager::m_useVhtOnly),
+                   MakeBooleanChecker ())
+    .AddAttribute ("PrintStats",
+                   "Control the printing of the statistics table",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&MinstrelHtWifiManager::m_printStats),
+                   MakeBooleanChecker ())
+    .AddTraceSource ("RateChange",
+                     "The transmission rate has changed",
+                     MakeTraceSourceAccessor (&MinstrelHtWifiManager::m_rateChange),
+                     "ns3::MinstrelHtWifiManager::RateChangeTracedCallback")
+  ;
+  return tid;
+}
+
+MinstrelHtWifiManager::MinstrelHtWifiManager ()
+  : m_numGroups (0),
+    m_numRates (0)
+{
+  NS_LOG_FUNCTION (this);
+  m_uniformRandomVariable = CreateObject<UniformRandomVariable> ();
+  /**
+   *  Create the legacy Minstrel manager in case HT is not supported by the device
+   *  or non-HT stations want to associate.
+   */
+  m_legacyManager = CreateObject<MinstrelWifiManager> ();
+}
+
+MinstrelHtWifiManager::~MinstrelHtWifiManager ()
+{
+  NS_LOG_FUNCTION (this);
+  if (HasHtSupported ())
+    {
+      for (uint32_t i = 0; i < m_numGroups; i++)
+        {
+          m_minstrelGroups[i].ratesFirstMpduTxTimeTable.clear ();
+          m_minstrelGroups[i].ratesTxTimeTable.clear ();
+        }
+    }
+}
+
+int64_t
+MinstrelHtWifiManager::AssignStreams (int64_t stream)
+{
+  NS_LOG_FUNCTION (this << stream);
+  int64_t numStreamsAssigned = 0;
+  m_uniformRandomVariable->SetStream (stream);
+  numStreamsAssigned++;
+  numStreamsAssigned += m_legacyManager->AssignStreams (stream);
+  return numStreamsAssigned;
+}
+
+void
+MinstrelHtWifiManager::SetupPhy (Ptr<WifiPhy> phy)
+{
+  NS_LOG_FUNCTION (this << phy);
+  // Setup phy for legacy manager.
+  m_legacyManager->SetupPhy (phy);
+  WifiRemoteStationManager::SetupPhy (phy);
+}
+
+void
+MinstrelHtWifiManager::DoInitialize ()
+{
+  NS_LOG_FUNCTION (this);
+
+  /**
+   * Here we initialize m_minstrelGroups with all the possible groups.
+   * If a group is not supported by the device, then it is marked as not supported.
+   * Then, after all initializations are finished, we check actual support for each receiving station.
+   */
+
+  // Check if the device supports HT or VHT
+  if (HasHtSupported () || HasVhtSupported ())
+    {
+      m_numGroups = MAX_SUPPORTED_STREAMS * MAX_HT_STREAM_GROUPS;
+      m_numRates = MAX_HT_GROUP_RATES;
+
+      if (HasVhtSupported ())
+        {
+          m_numGroups += MAX_SUPPORTED_STREAMS * MAX_VHT_STREAM_GROUPS;
+          m_numRates = MAX_VHT_GROUP_RATES;
+        }
+
+      /**
+       *  Initialize the groups array.
+       *  The HT groups come first, then the VHT ones.
+       *  Minstrel maintains different types of indexes:
+       *  - A global continuous index, which identifies all rates within all groups, in [0, m_numGroups * m_numRates]
+       *  - A groupId, which indexes a group in the array, in [0, m_numGroups]
+       *  - A rateId, which identifies a rate within a group, in [0, m_numRates]
+       *  - A deviceIndex, which indexes a MCS in the phy MCS array.
+       *  - A mcsIndex, which indexes a MCS in the wifi-remote-station-manager supported MCSs array.
+       */
+      NS_LOG_DEBUG ("Initialize MCS Groups:");
+      m_minstrelGroups = MinstrelMcsGroups (m_numGroups);
+
+      // Initialize all HT groups
+      for (uint32_t chWidth = 20; chWidth <= MAX_HT_WIDTH; chWidth *= 2)
+        {
+          for (uint8_t sgi = 0; sgi <= 1; sgi++)
+            {
+              for (uint8_t streams = 1; streams <= MAX_SUPPORTED_STREAMS; streams++)
+                {
+                  uint32_t groupId = GetHtGroupId (streams, sgi, chWidth);
+
+                  m_minstrelGroups[groupId].streams = streams;
+                  m_minstrelGroups[groupId].sgi = sgi;
+                  m_minstrelGroups[groupId].chWidth = chWidth;
+                  m_minstrelGroups[groupId].isVht = false;
+                  m_minstrelGroups[groupId].isSupported = false;
+
+                  // Check capabilities of the device
+                  if (!(!GetPhy ()->GetGuardInterval () && m_minstrelGroups[groupId].sgi)                   ///Is SGI supported by the transmitter?
+                      && (GetPhy ()->GetChannelWidth () >= m_minstrelGroups[groupId].chWidth)               ///Is channel width supported by the transmitter?
+                      && (GetPhy ()->GetNumberOfTransmitAntennas () >= m_minstrelGroups[groupId].streams))  ///Are streams supported by the transmitter?
+                    {
+                      m_minstrelGroups[groupId].isSupported = true;
+
+                      // Calculate tx time for all rates of the group
+                      WifiModeList htMcsList = GetHtDeviceMcsList ();
+                      for (uint8_t i = 0; i < MAX_HT_GROUP_RATES; i++)
+                        {
+                          uint32_t deviceIndex = i + (m_minstrelGroups[groupId].streams - 1) * 8;
+                          WifiMode mode =  htMcsList[deviceIndex];
+                          AddFirstMpduTxTime (groupId, mode, CalculateFirstMpduTxDuration (GetPhy (), streams, sgi, chWidth, mode));
+                          AddMpduTxTime (groupId, mode, CalculateMpduTxDuration (GetPhy (), streams, sgi, chWidth, mode));
+                        }
+                      NS_LOG_DEBUG ("Initialized group " << groupId << ": (" << (uint32_t)streams << "," << (uint32_t)sgi << "," << chWidth << ")");
+                    }
+                }
+            }
+        }
+
+      if (HasVhtSupported ())
+        {
+          // Initialize all VHT groups
+          for (uint32_t chWidth = 20; chWidth <= MAX_VHT_WIDTH; chWidth *= 2)
+            {
+              for (uint8_t sgi = 0; sgi <= 1; sgi++)
+                {
+                  for (uint8_t streams = 1; streams <= MAX_SUPPORTED_STREAMS; streams++)
+                    {
+                      uint32_t groupId = GetVhtGroupId (streams, sgi, chWidth);
+
+                      m_minstrelGroups[groupId].streams = streams;
+                      m_minstrelGroups[groupId].sgi = sgi;
+                      m_minstrelGroups[groupId].chWidth = chWidth;
+                      m_minstrelGroups[groupId].isVht = true;
+                      m_minstrelGroups[groupId].isSupported = false;
+
+                      // Check capabilities of the device
+                      if (!(!GetPhy ()->GetGuardInterval () && m_minstrelGroups[groupId].sgi)                   ///Is SGI supported by the transmitter?
+                          && (GetPhy ()->GetChannelWidth () >= m_minstrelGroups[groupId].chWidth)               ///Is channel width supported by the transmitter?
+                          && (GetPhy ()->GetNumberOfTransmitAntennas () >= m_minstrelGroups[groupId].streams))  ///Are streams supported by the transmitter?
+                        {
+                          m_minstrelGroups[groupId].isSupported = true;
+
+                          // Calculate tx time for all rates of the group
+                          WifiModeList vhtMcsList = GetVhtDeviceMcsList ();
+                          for (uint8_t i = 0; i < MAX_VHT_GROUP_RATES; i++)
+                            {
+                              WifiMode mode = vhtMcsList[i];
+                              // Check for invalid VHT MCSs and do not add time to array.
+                              if (IsValidMcs (GetPhy (), streams, chWidth, mode))
+                                {
+                                  AddFirstMpduTxTime (groupId, mode, CalculateFirstMpduTxDuration (GetPhy (), streams, sgi, chWidth, mode));
+                                  AddMpduTxTime (groupId, mode, CalculateMpduTxDuration (GetPhy (), streams, sgi, chWidth, mode));
+                                }
+                            }
+                          NS_LOG_DEBUG ("Initialized group " << groupId << ": (" << (uint32_t)streams << "," << (uint32_t)sgi << "," << chWidth << ")");
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+void
+MinstrelHtWifiManager::SetupMac (Ptr<WifiMac> mac)
+{
+  NS_LOG_FUNCTION (this << mac);
+  m_legacyManager->SetupMac (mac);
+  WifiRemoteStationManager::SetupMac (mac);
+}
+
+bool
+MinstrelHtWifiManager::IsValidMcs (Ptr<WifiPhy> phy, uint8_t streams, uint32_t chWidth, WifiMode mode)
+{
+  NS_LOG_FUNCTION (this << phy << (int)streams << chWidth << mode);
+
+  WifiTxVector txvector;
+  txvector.SetNss (streams);
+  txvector.SetChannelWidth (chWidth);
+  txvector.SetMode (mode);
+  return phy->IsValidTxVector (txvector);
+}
+
+Time
+MinstrelHtWifiManager::CalculateFirstMpduTxDuration (Ptr<WifiPhy> phy, uint8_t streams, uint8_t sgi, uint32_t chWidth, WifiMode mode)
+{
+  NS_LOG_FUNCTION (this << phy << (int)streams << (int)sgi << chWidth << mode);
+
+  WifiTxVector txvector;
+  txvector.SetNss (streams);
+  txvector.SetShortGuardInterval (sgi);
+  txvector.SetChannelWidth (chWidth);
+  txvector.SetNess (0);
+  txvector.SetStbc (phy->GetStbc ());
+  txvector.SetMode (mode);
+  return phy->CalculateTxDuration (m_frameLength, txvector, WIFI_PREAMBLE_HT_MF, phy->GetFrequency (), MPDU_IN_AGGREGATE, 0);
+}
+
+Time
+MinstrelHtWifiManager::CalculateMpduTxDuration (Ptr<WifiPhy> phy, uint8_t streams, uint8_t sgi, uint32_t chWidth, WifiMode mode)
+{
+  NS_LOG_FUNCTION (this << phy << (int)streams << (int)sgi << chWidth << mode);
+
+  WifiTxVector txvector;
+  txvector.SetNss (streams);
+  txvector.SetShortGuardInterval (sgi);
+  txvector.SetChannelWidth (chWidth);
+  txvector.SetNess (0);
+  txvector.SetStbc (phy->GetStbc ());
+  txvector.SetMode (mode);
+  return phy->CalculateTxDuration (m_frameLength, txvector, WIFI_PREAMBLE_NONE, phy->GetFrequency (), MPDU_IN_AGGREGATE, 0);
+}
+
+Time
+MinstrelHtWifiManager::GetFirstMpduTxTime (uint32_t groupId, WifiMode mode) const
+{
+  NS_LOG_FUNCTION (this << groupId << mode);
+
+  for (TxTime::const_iterator i = m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.begin (); i != m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.end (); i++)
+    {
+      if (mode == i->second)
+        {
+          return i->first;
+        }
+    }
+  NS_ASSERT (false);
+  return Seconds (0);
+}
+
+void
+MinstrelHtWifiManager::AddFirstMpduTxTime (uint32_t groupId, WifiMode mode, Time t)
+{
+  NS_LOG_FUNCTION (this << groupId << mode << t);
+
+  m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.push_back (std::make_pair (t, mode));
+}
+
+Time
+MinstrelHtWifiManager::GetMpduTxTime (uint32_t groupId, WifiMode mode) const
+{
+  NS_LOG_FUNCTION (this << groupId << mode);
+
+  for (TxTime::const_iterator i = m_minstrelGroups[groupId].ratesTxTimeTable.begin (); i != m_minstrelGroups[groupId].ratesTxTimeTable.end (); i++)
+    {
+      if (mode == i->second)
+        {
+          return i->first;
+        }
+    }
+  NS_ASSERT (false);
+  return Seconds (0);
+}
+
+void
+MinstrelHtWifiManager::AddMpduTxTime (uint32_t groupId, WifiMode mode, Time t)
+{
+  NS_LOG_FUNCTION (this << groupId << mode << t);
+
+  m_minstrelGroups[groupId].ratesTxTimeTable.push_back (std::make_pair (t, mode));
+}
+
+WifiRemoteStation *
+MinstrelHtWifiManager::DoCreateStation (void) const
+{
+  NS_LOG_FUNCTION (this);
+
+  MinstrelHtWifiRemoteStation *station = new MinstrelHtWifiRemoteStation ();
+
+  // Initialize variables common to both stations.
+  station->m_nextStatsUpdate = Simulator::Now () + m_updateStats;
+  station->m_col = 0;
+  station->m_index = 0;
+  station->m_maxTpRate = 0;
+  station->m_maxTpRate2 = 0;
+  station->m_maxProbRate = 0;
+  station->m_nModes = 0;
+  station->m_totalPacketsCount = 0;
+  station->m_samplePacketsCount = 0;
+  station->m_isSampling = false;
+  station->m_sampleRate = 0;
+  station->m_sampleDeferred = false;
+  station->m_shortRetry = 0;
+  station->m_longRetry = 0;
+  station->m_txrate = 0;
+  station->m_initialized = false;
+
+  // Variables specific to HT station
+  station->m_sampleGroup = 0;
+  station->m_numSamplesSlow = 0;
+  station->m_sampleCount = 16;
+  station->m_sampleWait = 0;
+  station->m_sampleTries = 4;
+
+  station->m_avgAmpduLen = 1;
+  station->m_ampduLen = 0;
+  station->m_ampduPacketCount = 0;
+
+  // If the device supports HT
+  if (HasHtSupported () || HasVhtSupported ())
+    {
+      /**
+       * Assume the station is HT.
+       * When correct information available it will be checked.
+       */
+      station->m_isHt = true;
+    }
+  // Use the variable in the station to indicate that the device do not support HT
+  else
+    {
+      station->m_isHt = false;
+    }
+
+  return station;
+}
+
+void
+MinstrelHtWifiManager::CheckInit (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  // Note: we appear to be doing late initialization of the table
+  // to make sure that the set of supported rates has been initialized
+  // before we perform our own initialization.
+  if (!station->m_initialized)
+    {
+      /**
+       *  Check if the station supports HT.
+       *  Assume that if the device do not supports HT then
+       *  the station will not support HT either.
+       *  We save from using another check and variable.
+       */
+      if (!GetHtSupported (station) && !GetVhtSupported (station))
+        {
+          NS_LOG_DEBUG ("Non-HT station " << station);
+          station->m_isHt = false;
+          // We will use non-HT minstrel for this station. Initialize the manager.
+          m_legacyManager->SetAttribute ("UpdateStatistics", TimeValue (m_updateStats));
+          m_legacyManager->SetAttribute ("LookAroundRate", DoubleValue (m_lookAroundRate));
+          m_legacyManager->SetAttribute ("EWMA", DoubleValue (m_ewmaLevel));
+          m_legacyManager->SetAttribute ("SampleColumn", UintegerValue (m_nSampleCol));
+          m_legacyManager->SetAttribute ("PacketLength", UintegerValue (m_frameLength));
+          m_legacyManager->SetAttribute ("PrintStats", BooleanValue (m_printStats));
+          m_legacyManager->CheckInit (station);
+        }
+      else
+        {
+          NS_LOG_DEBUG ("HT station " << station);
+          station->m_isHt = true;
+          station->m_nModes = GetNMcsSupported (station);
+          station->m_sampleTable = SampleRate (m_numRates, std::vector<uint32_t> (m_nSampleCol));
+          InitSampleTable (station);
+          RateInit (station);
+          std::ostringstream tmp;
+          tmp << "minstrel-ht-stats-" << station->m_state->m_address << ".txt";
+          station->m_statsFile.open (tmp.str ().c_str (), std::ios::out);
+          station->m_initialized = true;
+        }
+    }
+}
+
+void
+MinstrelHtWifiManager::DoReportRxOk (WifiRemoteStation *st,
+                                     double rxSnr, WifiMode txMode)
+{
+  NS_LOG_FUNCTION (this << st);
+
+  NS_LOG_DEBUG ("DoReportRxOk m_txrate=" << ((MinstrelHtWifiRemoteStation *)st)->m_txrate);
+}
+
+void
+MinstrelHtWifiManager::DoReportRtsFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *)st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("DoReportRtsFailed m_txrate=" << station->m_txrate);
+  station->m_shortRetry++;
+}
+
+void
+MinstrelHtWifiManager::DoReportRtsOk (WifiRemoteStation *st, double ctsSnr, WifiMode ctsMode, double rtsSnr)
+{
+  NS_LOG_FUNCTION (this << st);
+
+  NS_LOG_DEBUG ("self=" << st << " rts ok");
+}
+
+void
+MinstrelHtWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *)st;
+  NS_LOG_DEBUG ("Final RTS failed");
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  UpdateRetry (station);
+}
+
+void
+MinstrelHtWifiManager::DoReportDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *)st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  if (!station->m_isHt)
+    {
+      m_legacyManager->UpdateRate (station);
+    }
+  else
+    {
+      NS_LOG_DEBUG ("DoReportDataFailed " << station << "\t rate " << station->m_txrate << "\tlongRetry \t" << station->m_longRetry);
+
+      uint32_t rateId = GetRateId (station->m_txrate);
+      uint32_t groupId = GetGroupId (station->m_txrate);
+      station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt++; // Increment the attempts counter for the rate used.
+
+      UpdateRate (station);
+    }
+}
+
+void
+MinstrelHtWifiManager::DoReportDataOk (WifiRemoteStation *st,
+                                       double ackSnr, WifiMode ackMode, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << st << ackSnr << ackMode << dataSnr);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("Data OK - Txrate = " << station->m_txrate  );
+
+  if (!station->m_isHt)
+    {
+      station->m_minstrelTable[station->m_txrate].numRateSuccess++;
+      station->m_minstrelTable[station->m_txrate].numRateAttempt++;
+
+      m_legacyManager->UpdatePacketCounters (station);
+
+      UpdateRetry (station);
+      m_legacyManager->UpdateStats (station);
+
+      if (station->m_nModes >= 1)
+        {
+          station->m_txrate = m_legacyManager->FindRate (station);
+        }
+    }
+  else
+    {
+      uint32_t rateId = GetRateId (station->m_txrate);
+      uint32_t groupId = GetGroupId (station->m_txrate);
+      station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess++;
+      station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt++;
+
+      UpdatePacketCounters (station, 1, 0);
+
+      station->m_isSampling = false;
+      station->m_sampleDeferred = false;
+
+      UpdateRetry (station);
+      if (Simulator::Now () >=  station->m_nextStatsUpdate)
+        {
+          UpdateStats (station);
+        }
+
+      if (station->m_nModes >= 1)
+        {
+          station->m_txrate = FindRate (station);
+        }
+    }
+
+  NS_LOG_DEBUG ("Next rate to use TxRate = " << station->m_txrate  );
+}
+
+void
+MinstrelHtWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("DoReportFinalDataFailed - TxRate=" << station->m_txrate);
+
+  if (!station->m_isHt)
+    {
+      m_legacyManager->UpdatePacketCounters (station);
+
+      UpdateRetry (station);
+
+      m_legacyManager->UpdateStats (station);
+      if (station->m_nModes >= 1)
+        {
+          station->m_txrate = m_legacyManager->FindRate (station);
+        }
+    }
+  else
+    {
+      UpdatePacketCounters (station, 0, 1);
+
+      station->m_isSampling = false;
+      station->m_sampleDeferred = false;
+
+      UpdateRetry (station);
+      if (Simulator::Now () >=  station->m_nextStatsUpdate)
+        {
+          UpdateStats (station);
+        }
+
+      if (station->m_nModes >= 1)
+        {
+          station->m_txrate = FindRate (station);
+        }
+    }
+  NS_LOG_DEBUG ("Next rate to use TxRate = " << station->m_txrate  );
+}
+
+void
+MinstrelHtWifiManager::DoReportAmpduTxStatus (WifiRemoteStation *st, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << st << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  if (!station->m_isHt)
+    {
+      NS_ASSERT_MSG (false,"A-MPDU Tx Status called but no HT or VHT supported.");
+    }
+
+  NS_LOG_DEBUG ("DoReportAmpduTxStatus. TxRate=" << station->m_txrate << " SuccMpdus= " <<
+                nSuccessfulMpdus << " FailedMpdus= " << nFailedMpdus);
+
+  station->m_ampduPacketCount++;
+  station->m_ampduLen += nSuccessfulMpdus + nFailedMpdus;
+
+  UpdatePacketCounters (station, nSuccessfulMpdus, nFailedMpdus);
+
+  uint32_t rateId = GetRateId (station->m_txrate);
+  uint32_t groupId = GetGroupId (station->m_txrate);
+  station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess += nSuccessfulMpdus;
+  station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt += nSuccessfulMpdus + nFailedMpdus;
+
+  if (nSuccessfulMpdus == 0 && station->m_longRetry < CountRetries (station))
+    {
+      // We do not receive a BlockAck. The entire AMPDU fail.
+      UpdateRate (station);
+    }
+  else
+    {
+      station->m_isSampling = false;
+      station->m_sampleDeferred = false;
+
+      UpdateRetry (station);
+      if (Simulator::Now () >=  station->m_nextStatsUpdate)
+        {
+          UpdateStats (station);
+        }
+
+      if (station->m_nModes >= 1)
+        {
+          station->m_txrate = FindRate (station);
+        }
+      NS_LOG_DEBUG ("Next rate to use TxRate = " << station->m_txrate  );
+    }
+}
+
+void
+MinstrelHtWifiManager::UpdateRate (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  /**
+   * Retry Chain table is implemented here.
+   *
+   * FIXME
+   * Currently, NS3 does not retransmit an entire A-MPDU when BACK is missing
+   * but retransmits each MPDU until MPDUs lifetime expires (or a BACK is received).
+   * Then, there is no way to control A-MPDU retries (no call to NeedDataRetransmission).
+   * So, it is possible that the A-MPDU keeps retrying after longRetry reaches its limit.
+   *
+   *
+   * Try |     LOOKAROUND RATE     | NORMAL RATE
+   * -------------------------------------------------------
+   *  1  |  Random rate            | Best throughput
+   *  2  |  Next best throughput   | Next best throughput
+   *  3  |  Best probability       | Best probability
+   *
+   * Note: For clarity, multiple blocks of if's and else's are used
+   * Following implementation in Linux, in MinstrelHT Lowest baserate is not used.
+   * Explanation can be found here: http://marc.info/?l=linux-wireless&m=144602778611966&w=2
+   */
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+  station->m_longRetry++;
+
+  /**
+   * Get the ids for all rates.
+   */
+  uint32_t maxTpRateId = GetRateId (station->m_maxTpRate);
+  uint32_t maxTpGroupId = GetGroupId (station->m_maxTpRate);
+  uint32_t maxTp2RateId = GetRateId (station->m_maxTpRate2);
+  uint32_t maxTp2GroupId = GetGroupId (station->m_maxTpRate2);
+  uint32_t maxProbRateId = GetRateId (station->m_maxProbRate);
+  uint32_t maxProbGroupId = GetGroupId (station->m_maxProbRate);
+
+  /// For normal rate, we're not currently sampling random rates.
+  if (!station->m_isSampling)
+    {
+      /// Use best throughput rate.
+      if (station->m_longRetry <  station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].retryCount)
+        {
+          NS_LOG_DEBUG ("Not Sampling; use the same rate again");
+          station->m_txrate = station->m_maxTpRate;  //!<  There are still a few retries.
+        }
+
+      /// Use second best throughput rate.
+      else if (station->m_longRetry < ( station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].retryCount +
+                                        station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].retryCount))
+        {
+          NS_LOG_DEBUG ("Not Sampling; use the Max TP2");
+          station->m_txrate = station->m_maxTpRate2;
+        }
+
+      /// Use best probability rate.
+      else if (station->m_longRetry <= ( station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].retryCount +
+                                         station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].retryCount +
+                                         station->m_groupsTable[maxProbGroupId].m_ratesTable[maxProbRateId].retryCount))
+        {
+          NS_LOG_DEBUG ("Not Sampling; use Max Prob");
+          station->m_txrate = station->m_maxProbRate;
+        }
+      else
+        {
+          NS_ASSERT_MSG (false,"Max retries reached and m_longRetry not cleared properly. longRetry= " << station->m_longRetry);
+        }
+    }
+
+  /// We're currently sampling random rates.
+  else
+    {
+      /// Sample rate is used only once
+      /// Use the best rate.
+      if (station->m_longRetry < 1 + station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTp2RateId].retryCount)
+        {
+          NS_LOG_DEBUG ("Sampling use the MaxTP rate");
+          station->m_txrate = station->m_maxTpRate2;
+        }
+
+      /// Use the best probability rate.
+      else if (station->m_longRetry <= 1 + station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTp2RateId].retryCount +
+               station->m_groupsTable[maxProbGroupId].m_ratesTable[maxProbRateId].retryCount)
+        {
+          NS_LOG_DEBUG ("Sampling use the MaxProb rate");
+          station->m_txrate = station->m_maxProbRate;
+        }
+      else
+        {
+          NS_ASSERT_MSG (false,"Max retries reached and m_longRetry not cleared properly. longRetry= " << station->m_longRetry);
+        }
+    }
+  NS_LOG_DEBUG ("Next rate to use TxRate = " << station->m_txrate);
+}
+
+void
+MinstrelHtWifiManager::UpdateRetry (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  station->m_shortRetry = 0;
+  station->m_longRetry = 0;
+
+}
+
+void
+MinstrelHtWifiManager::UpdatePacketCounters (MinstrelHtWifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus)
+{
+  NS_LOG_FUNCTION (this << station << nSuccessfulMpdus << nFailedMpdus);
+
+  station->m_totalPacketsCount += nSuccessfulMpdus + nFailedMpdus;
+  if (station->m_isSampling)
+    {
+      station->m_samplePacketsCount += nSuccessfulMpdus + nFailedMpdus;
+    }
+  if (station->m_totalPacketsCount == ~0)
+    {
+      station->m_samplePacketsCount = 0;
+      station->m_totalPacketsCount = 0;
+    }
+
+  if (!station->m_sampleWait && !station->m_sampleTries && station->m_sampleCount > 0)
+    {
+      station->m_sampleWait = 16 + 2 * station->m_avgAmpduLen;
+      station->m_sampleTries = 1;
+      station->m_sampleCount--;
+    }
+
+}
+void
+MinstrelHtWifiManager::DoDisposeStation (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+  station->DisposeStation ();
+}
+
+WifiTxVector
+MinstrelHtWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+
+  if (!station->m_initialized)
+    {
+      CheckInit (station);
+    }
+
+  if (!station->m_isHt)
+    {
+      WifiTxVector vector = m_legacyManager->GetDataTxVector (station);
+
+      uint64_t dataRate = vector.GetMode ().GetDataRate (vector.GetChannelWidth (), vector.IsShortGuardInterval (), vector.GetNss ());
+      if (!station->m_isSampling)
+        {
+          m_rateChange (dataRate, station->m_state->m_address);
+        }
+
+      return vector;
+    }
+  else
+    {
+      NS_LOG_DEBUG ("DoGetDataMode m_txrate= " << station->m_txrate);
+
+      uint32_t rateId = GetRateId (station->m_txrate);
+      uint32_t groupId = GetGroupId (station->m_txrate);
+      uint32_t mcsIndex = station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex;
+
+      NS_LOG_DEBUG ("DoGetDataMode rateId= " << rateId << " groupId= " << groupId << " mode= " << GetMcsSupported (station, mcsIndex));
+
+      McsGroup group = m_minstrelGroups[groupId];
+
+      // Check consistency of rate selected.
+      if ((group.sgi && !GetShortGuardInterval (station)) || group.chWidth > GetChannelWidth (station)  ||  (uint32_t) group.streams > GetNumberOfSupportedRxAntennas (station))
+        {
+          NS_ASSERT_MSG (false,"Inconsistent group selected. Group: (" << (uint32_t)group.streams << "," << (uint32_t)group.sgi << "," << group.chWidth << ")" <<
+                         " Station capabilities: (" << GetNumberOfSupportedRxAntennas (station) << "," << GetShortGuardInterval (station) << "," << GetChannelWidth (station) << ")");
+        }
+
+      uint64_t dataRate = GetMcsSupported (station, mcsIndex).GetDataRate (group.chWidth, group.sgi, group.streams);
+      if (!station->m_isSampling)
+        {
+          m_rateChange (dataRate, station->m_state->m_address);
+        }
+
+      return WifiTxVector (GetMcsSupported (station, mcsIndex), GetDefaultTxPowerLevel (), GetLongRetryCount (station),
+                           group.sgi, group.streams, GetNess (station), group.chWidth, !station->m_isSampling, GetStbc (station));
+    }
+}
+
+WifiTxVector
+MinstrelHtWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *) st;
+
+  if (!station->m_initialized)
+    {
+      CheckInit (station);
+    }
+
+  if (!station->m_isHt)
+    {
+      return m_legacyManager->GetRtsTxVector (station);
+    }
+  else
+    {
+      NS_LOG_DEBUG ("DoGetRtsMode m_txrate=" << station->m_txrate);
+
+      /* RTS is sent in a non-HT frame. RTS with HT is not supported yet in NS3.
+       * When supported, decision of using HT has to follow rules in Section 9.7.6 from 802.11-2012.
+       * From Sec. 9.7.6.5: "A frame other than a BlockAckReq or BlockAck that is carried in a
+       * non-HT PPDU shall be transmitted by the STA using a rate no higher than the highest
+       * rate in  the BSSBasicRateSet parameter that is less than or equal to the rate or
+       * non-HT reference rate (see 9.7.9) of the previously transmitted frame that was
+       * directed to the same receiving STA. If no rate in the BSSBasicRateSet parameter meets
+       * these conditions, the control frame shall be transmitted at a rate no higher than the
+       * highest mandatory rate of the attached PHY that is less than or equal to the rate
+       * or non-HT reference rate (see 9.7.9) of the previously transmitted frame that was
+       * directed to the same receiving STA."
+       */
+
+      // As we are in Minstrel HT, assume the last rate was an HT rate.
+      uint32_t rateId = GetRateId (station->m_txrate);
+      uint32_t groupId = GetGroupId (station->m_txrate);
+      uint32_t mcsIndex = station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex;
+
+      WifiMode lastRate = GetMcsSupported (station, mcsIndex);
+      uint64_t lastDataRate = lastRate.GetNonHtReferenceRate ();
+      uint32_t nBasicRates = GetNBasicModes ();
+
+      WifiMode rtsRate;
+      bool rateFound = false;
+
+      for (uint32_t i = 0; i < nBasicRates; i++)
+        {
+          uint64_t rate = GetBasicMode (i).GetDataRate (20,false,1);
+          if (rate <= lastDataRate)
+            {
+              rtsRate = GetBasicMode (i);
+              rateFound = true;
+            }
+        }
+
+      if (!rateFound)
+        {
+          Ptr<WifiPhy> phy = GetPhy ();
+          uint32_t nSupportRates = phy->GetNModes ();
+          for (uint32_t i = 0; i < nSupportRates; i++)
+            {
+              uint64_t rate = phy->GetMode (i).GetDataRate (20,false,1);
+              if (rate <= lastDataRate)
+                {
+                  rtsRate = phy->GetMode (i);
+                  rateFound = true;
+                }
+            }
+        }
+
+      NS_ASSERT (rateFound);
+
+      return WifiTxVector (rtsRate, GetDefaultTxPowerLevel (), GetShortRetryCount (station),
+                           false, 1, 0, GetChannelWidth (station), GetAggregation (station), false);
+    }
+}
+
+bool
+MinstrelHtWifiManager::DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally)
+{
+  NS_LOG_FUNCTION (this << st << packet << normally);
+
+  MinstrelHtWifiRemoteStation *station = (MinstrelHtWifiRemoteStation *)st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return normally;
+    }
+
+  uint32_t maxRetries;
+
+  if (!station->m_isHt)
+    {
+      maxRetries = m_legacyManager->CountRetries (station);
+    }
+  else
+    {
+      maxRetries = CountRetries (station);
+    }
+
+  if (station->m_longRetry >= maxRetries)
+    {
+      NS_LOG_DEBUG ("No re-transmission allowed. Retries: " <<  station->m_longRetry << " Max retries: " << maxRetries);
+      return false;
+    }
+  else
+    {
+      NS_LOG_DEBUG ("Re-transmit. Retries: " <<  station->m_longRetry << " Max retries: " << maxRetries);
+      return true;
+    }
+}
+
+uint32_t
+MinstrelHtWifiManager::CountRetries (MinstrelHtWifiRemoteStation *station)
+{
+  uint32_t maxProbRateId = GetRateId (station->m_maxProbRate);
+  uint32_t maxProbGroupId = GetGroupId (station->m_maxProbRate);
+  uint32_t maxTpRateId = GetRateId (station->m_maxTpRate);
+  uint32_t maxTpGroupId = GetGroupId (station->m_maxTpRate);
+  uint32_t maxTp2RateId = GetRateId (station->m_maxTpRate2);
+  uint32_t maxTp2GroupId = GetGroupId (station->m_maxTpRate2);
+
+  if (!station->m_isSampling)
+    {
+      return station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].retryCount +
+             station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].retryCount +
+             station->m_groupsTable[maxProbGroupId].m_ratesTable[maxProbRateId].retryCount;
+    }
+  else
+    {
+      return 1 + station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTp2RateId].retryCount +
+             station->m_groupsTable[maxProbGroupId].m_ratesTable[maxProbRateId].retryCount;
+    }
+}
+
+bool
+MinstrelHtWifiManager::IsLowLatency (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetNextSample (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  uint32_t sampleGroup = station->m_sampleGroup;
+
+  uint32_t index = station->m_groupsTable[sampleGroup].m_index;
+  uint32_t col = station->m_groupsTable[sampleGroup].m_col;
+
+  uint32_t sampleIndex = station->m_sampleTable[index][col];
+
+  uint32_t rateIndex = GetIndex (sampleGroup, sampleIndex);
+  NS_LOG_DEBUG ("Next Sample is " << rateIndex );
+
+  SetNextSample (station); //Calculate the next sample rate.
+
+  return rateIndex;
+}
+
+void
+MinstrelHtWifiManager::SetNextSample (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  do
+    {
+      station->m_sampleGroup++;
+      station->m_sampleGroup %= m_numGroups;
+    }
+  while (!station->m_groupsTable[station->m_sampleGroup].m_supported);
+
+  station->m_groupsTable[station->m_sampleGroup].m_index++;
+
+  uint32_t sampleGroup = station->m_sampleGroup;
+  uint8_t index = station->m_groupsTable[station->m_sampleGroup].m_index;
+  uint8_t col = station->m_groupsTable[sampleGroup].m_col;
+
+  if (index >= m_numRates)
+    {
+      station->m_groupsTable[station->m_sampleGroup].m_index = 0;
+      station->m_groupsTable[station->m_sampleGroup].m_col++;
+      if (station->m_groupsTable[station->m_sampleGroup].m_col >= m_nSampleCol)
+        {
+          station->m_groupsTable[station->m_sampleGroup].m_col = 0;
+        }
+      index = station->m_groupsTable[station->m_sampleGroup].m_index;
+      col = station->m_groupsTable[sampleGroup].m_col;
+    }
+  NS_LOG_DEBUG ("New sample set: group= " << sampleGroup << " index= " << station->m_sampleTable[index][col]);
+}
+
+uint32_t
+MinstrelHtWifiManager::FindRate (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  NS_LOG_DEBUG ("FindRate " << "packet=" << station->m_totalPacketsCount );
+
+  if ((station->m_samplePacketsCount + station->m_totalPacketsCount) == 0)
+    {
+      return station->m_maxTpRate;
+    }
+
+  // If we have waited enough, then sample.
+  if (station->m_sampleWait == 0 && station->m_sampleTries != 0)
+    {
+      //SAMPLING
+      NS_LOG_DEBUG ("Obtaining a sampling rate");
+      /// Now go through the table and find an index rate.
+      uint32_t sampleIdx = GetNextSample (station);
+      NS_LOG_DEBUG ("Sampling rate = " << sampleIdx);
+
+      //Evaluate if the sampling rate selected should be used.
+      uint32_t sampleGroupId = GetGroupId (sampleIdx);
+      uint32_t sampleRateId = GetRateId (sampleIdx);
+
+      // If the rate selected is not supported, then don't sample.
+      if (station->m_groupsTable[sampleGroupId].m_supported && station->m_groupsTable[sampleGroupId].m_ratesTable[sampleRateId].supported)
+        {
+          /**
+           * Sampling might add some overhead to the frame.
+           * Hence, don't use sampling for the currently used rates.
+           *
+           * Also do not sample if the probability is already higher than 95%
+           * to avoid wasting airtime.
+           */
+          HtRateInfo sampleRateInfo = station->m_groupsTable[sampleGroupId].m_ratesTable[sampleRateId];
+
+          NS_LOG_DEBUG ("Use sample rate? MaxTpRate= " << station->m_maxTpRate << " CurrentRate= " << station->m_txrate <<
+                        " SampleRate= " << sampleIdx << " SampleProb= " << sampleRateInfo.ewmaProb);
+
+          if (sampleIdx != station->m_maxTpRate && sampleIdx != station->m_maxTpRate2
+              && sampleIdx != station->m_maxProbRate && sampleRateInfo.ewmaProb <= 95)
+            {
+
+              /**
+               * Make sure that lower rates get sampled only occasionally,
+               * if the link is working perfectly.
+               */
+
+              uint32_t maxTpGroupId = GetGroupId (station->m_maxTpRate);
+              uint32_t maxTp2GroupId = GetGroupId (station->m_maxTpRate2);
+              uint32_t maxTp2RateId = GetRateId (station->m_maxTpRate2);
+              uint32_t maxProbGroupId = GetGroupId (station->m_maxProbRate);
+              uint32_t maxProbRateId = GetRateId (station->m_maxProbRate);
+
+              uint8_t maxTpStreams = m_minstrelGroups[maxTpGroupId].streams;
+              uint8_t sampleStreams = m_minstrelGroups[sampleGroupId].streams;
+
+              Time sampleDuration = sampleRateInfo.perfectTxTime;
+              Time maxTp2Duration = station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].perfectTxTime;
+              Time maxProbDuration = station->m_groupsTable[maxProbGroupId].m_ratesTable[maxProbRateId].perfectTxTime;
+
+              NS_LOG_DEBUG ("Use sample rate? SampleDuration= " << sampleDuration << " maxTp2Duration= " << maxTp2Duration <<
+                            " maxProbDuration= " << maxProbDuration << " sampleStreams= " << (uint32_t)sampleStreams <<
+                            " maxTpStreams= " << (uint32_t)maxTpStreams);
+              if (sampleDuration < maxTp2Duration || (sampleStreams <= maxTpStreams - 1 && sampleDuration < maxProbDuration))
+                {
+                  /// Set flag that we are currently sampling.
+                  station->m_isSampling = true;
+
+                  /// set the rate that we're currently sampling
+                  station->m_sampleRate = sampleIdx;
+
+                  NS_LOG_DEBUG ("FindRate " << "sampleRate=" << sampleIdx);
+                  station->m_sampleTries--;
+                  return sampleIdx;
+                }
+              else
+                {
+                  station->m_numSamplesSlow++;
+                  if (sampleRateInfo.numSamplesSkipped >= 20 && station->m_numSamplesSlow <= 2)
+                    {
+                      /// Set flag that we are currently sampling.
+                      station->m_isSampling = true;
+
+                      /// set the rate that we're currently sampling
+                      station->m_sampleRate = sampleIdx;
+
+                      NS_LOG_DEBUG ("FindRate " << "sampleRate=" << sampleIdx);
+                      station->m_sampleTries--;
+                      return sampleIdx;
+                    }
+                }
+            }
+        }
+    }
+  if (station->m_sampleWait > 0)
+    {
+      station->m_sampleWait--;
+    }
+
+  ///	Continue using the best rate.
+
+  NS_LOG_DEBUG ("FindRate " << "maxTpRrate=" << station->m_maxTpRate);
+  return station->m_maxTpRate;
+}
+void
+MinstrelHtWifiManager::UpdateStats (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  NS_LOG_DEBUG ("Updating stats=" << this);
+
+  station->m_nextStatsUpdate = Simulator::Now () + m_updateStats;
+
+  station->m_numSamplesSlow = 0;
+  station->m_sampleCount = 0;
+
+  double tempProb;
+
+  if (station->m_ampduPacketCount > 0)
+    {
+      double newLen = station->m_ampduLen / station->m_ampduPacketCount;
+      station->m_avgAmpduLen = ( newLen * (100 - m_ewmaLevel) + (station->m_avgAmpduLen * m_ewmaLevel) ) / 100;
+      station->m_ampduLen = 0;
+      station->m_ampduPacketCount = 0;
+    }
+
+  /* Initialize global rate indexes */
+  station->m_maxTpRate = GetLowestIndex (station);
+  station->m_maxTpRate2 = GetLowestIndex (station);
+  station->m_maxProbRate = GetLowestIndex (station);
+
+  /// Update throughput and EWMA for each rate inside each group.
+  for (uint32_t j = 0; j < m_numGroups; j++)
+    {
+      if (station->m_groupsTable[j].m_supported)
+        {
+          station->m_sampleCount++;
+
+          /* (re)Initialize group rate indexes */
+          station->m_groupsTable[j].m_maxTpRate = GetLowestIndex (station, j);
+          station->m_groupsTable[j].m_maxTpRate2 = GetLowestIndex (station, j);
+          station->m_groupsTable[j].m_maxProbRate = GetLowestIndex (station, j);
+
+          for (uint32_t i = 0; i < m_numRates; i++)
+            {
+              if (station->m_groupsTable[j].m_ratesTable[i].supported)
+                {
+                  station->m_groupsTable[j].m_ratesTable[i].retryUpdated = false;
+
+                  NS_LOG_DEBUG (i << " " << GetMcsSupported (station,  station->m_groupsTable[j].m_ratesTable[i].mcsIndex) <<
+                                "\t attempt=" << station->m_groupsTable[j].m_ratesTable[i].numRateAttempt <<
+                                "\t success=" << station->m_groupsTable[j].m_ratesTable[i].numRateSuccess);
+
+                  /// If we've attempted something.
+                  if (station->m_groupsTable[j].m_ratesTable[i].numRateAttempt > 0)
+                    {
+                      station->m_groupsTable[j].m_ratesTable[i].numSamplesSkipped = 0;
+                      /**
+                       * Calculate the probability of success.
+                       * Assume probability scales from 0 to 100.
+                       */
+                      tempProb = (100 * station->m_groupsTable[j].m_ratesTable[i].numRateSuccess) / station->m_groupsTable[j].m_ratesTable[i].numRateAttempt;
+
+                      /// Bookeeping.
+                      station->m_groupsTable[j].m_ratesTable[i].prob = tempProb;
+
+                      if (station->m_groupsTable[j].m_ratesTable[i].successHist == 0)
+                        {
+                          station->m_groupsTable[j].m_ratesTable[i].ewmaProb = tempProb;
+                        }
+                      else
+                        {
+                          station->m_groupsTable[j].m_ratesTable[i].ewmsdProb = CalculateEwmsd (station->m_groupsTable[j].m_ratesTable[i].ewmsdProb,
+                                                                                                tempProb, station->m_groupsTable[j].m_ratesTable[i].ewmaProb,
+                                                                                                m_ewmaLevel);
+                          /// EWMA probability
+                          tempProb = (tempProb * (100 - m_ewmaLevel) + station->m_groupsTable[j].m_ratesTable[i].ewmaProb * m_ewmaLevel)  / 100;
+                          station->m_groupsTable[j].m_ratesTable[i].ewmaProb = tempProb;
+                        }
+
+                      station->m_groupsTable[j].m_ratesTable[i].throughput = CalculateThroughput (station, j, i, tempProb);
+
+                      station->m_groupsTable[j].m_ratesTable[i].successHist += station->m_groupsTable[j].m_ratesTable[i].numRateSuccess;
+                      station->m_groupsTable[j].m_ratesTable[i].attemptHist += station->m_groupsTable[j].m_ratesTable[i].numRateAttempt;
+                    }
+                  else
+                    {
+                      station->m_groupsTable[j].m_ratesTable[i].numSamplesSkipped++;
+                    }
+
+                  /// Bookeeping.
+                  station->m_groupsTable[j].m_ratesTable[i].prevNumRateSuccess = station->m_groupsTable[j].m_ratesTable[i].numRateSuccess;
+                  station->m_groupsTable[j].m_ratesTable[i].prevNumRateAttempt = station->m_groupsTable[j].m_ratesTable[i].numRateAttempt;
+                  station->m_groupsTable[j].m_ratesTable[i].numRateSuccess = 0;
+                  station->m_groupsTable[j].m_ratesTable[i].numRateAttempt = 0;
+
+                  if (station->m_groupsTable[j].m_ratesTable[i].throughput != 0)
+                    {
+                      SetBestStationThRates (station, GetIndex (j, i));
+                      SetBestProbabilityRate (station, GetIndex (j, i));
+                    }
+
+                }
+            }
+        }
+    }
+
+  //Try to sample all available rates during each interval.
+  station->m_sampleCount *= 8;
+
+  //Recalculate retries for the rates selected.
+  CalculateRetransmits (station, station->m_maxTpRate);
+  CalculateRetransmits (station, station->m_maxTpRate2);
+  CalculateRetransmits (station, station->m_maxProbRate);
+
+  NS_LOG_DEBUG ("max tp=" << station->m_maxTpRate << "\nmax tp2=" <<  station->m_maxTpRate2 << "\nmax prob=" << station->m_maxProbRate);
+  if (m_printStats)
+    {
+      PrintTable (station);
+    }
+}
+
+double
+MinstrelHtWifiManager::CalculateThroughput (MinstrelHtWifiRemoteStation *station, uint32_t groupId, uint32_t rateId, double ewmaProb)
+{
+  /**
+  * Calculating throughput.
+  * Do not account throughput if sucess prob is below 10%
+  * (as done in minstrel_ht linux implementation).
+  */
+  if (ewmaProb < 10)
+    {
+      return 0;
+    }
+  else
+    {
+      /**
+       * For the throughput calculation, limit the probability value to 90% to
+       * account for collision related packet error rate fluctuation.
+       */
+      Time txTime =  station->m_groupsTable[groupId].m_ratesTable[rateId].perfectTxTime;
+      if (ewmaProb > 90)
+        {
+          return 90 / txTime.GetSeconds ();
+        }
+      else
+        {
+          return ewmaProb / txTime.GetSeconds ();
+        }
+    }
+}
+
+void
+MinstrelHtWifiManager::SetBestProbabilityRate (MinstrelHtWifiRemoteStation *station, uint32_t index)
+{
+  GroupInfo *group;
+  HtRateInfo rate;
+  uint32_t tmpGroupId, tmpRateId;
+  double tmpTh, tmpProb;
+  uint32_t groupId, rateId;
+  double currentTh;
+  // maximum group probability (GP) variables
+  uint32_t maxGPGroupId, maxGPRateId;
+  double maxGPTh;
+
+  groupId = GetGroupId (index);
+  rateId = GetRateId (index);
+  group = &station->m_groupsTable[groupId];
+  rate = group->m_ratesTable[rateId];
+
+  tmpGroupId = GetGroupId (station->m_maxProbRate);
+  tmpRateId = GetRateId (station->m_maxProbRate);
+  tmpProb = station->m_groupsTable[tmpGroupId].m_ratesTable[tmpRateId].ewmaProb;
+  tmpTh =  station->m_groupsTable[tmpGroupId].m_ratesTable[tmpRateId].throughput;
+
+  if (rate.ewmaProb > 75)
+    {
+      currentTh = station->m_groupsTable[groupId].m_ratesTable[rateId].throughput;
+      if (currentTh > tmpTh)
+        {
+          station->m_maxProbRate = index;
+        }
+
+      maxGPGroupId = GetGroupId (group->m_maxProbRate);
+      maxGPRateId = GetRateId (group->m_maxProbRate);
+      maxGPTh = station->m_groupsTable[maxGPGroupId].m_ratesTable[maxGPRateId].throughput;
+
+      if (currentTh > maxGPTh)
+        {
+          group->m_maxProbRate = index;
+        }
+    }
+  else
+    {
+      if (rate.ewmaProb > tmpProb)
+        {
+          station->m_maxProbRate = index;
+        }
+      if (rate.ewmaProb > group->m_ratesTable[group->m_maxProbRate].ewmaProb)
+        {
+          group->m_maxProbRate = index;
+        }
+    }
+}
+
+/*
+ * Find & sort topmost throughput rates
+ *
+ * If multiple rates provide equal throughput the sorting is based on their
+ * current success probability. Higher success probability is preferred among
+ * MCS groups.
+ */
+void
+MinstrelHtWifiManager::SetBestStationThRates (MinstrelHtWifiRemoteStation *station, uint32_t index)
+{
+  uint32_t groupId, rateId;
+  double th, prob;
+  uint32_t maxTpGroupId, maxTpRateId;
+  uint32_t maxTp2GroupId, maxTp2RateId;
+  double maxTpTh, maxTpProb;
+  double maxTp2Th, maxTp2Prob;
+
+  groupId = GetGroupId (index);
+  rateId = GetRateId (index);
+  prob = station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb;
+  th = station->m_groupsTable[groupId].m_ratesTable[rateId].throughput;
+
+  maxTpGroupId = GetGroupId (station->m_maxTpRate);
+  maxTpRateId = GetRateId (station->m_maxTpRate);
+  maxTpProb = station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].ewmaProb;
+  maxTpTh = station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].throughput;
+
+  maxTp2GroupId = GetGroupId (station->m_maxTpRate2);
+  maxTp2RateId = GetRateId (station->m_maxTpRate2);
+  maxTp2Prob = station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].ewmaProb;
+  maxTp2Th = station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].throughput;
+
+  if (th > maxTpTh || (th == maxTpTh && prob > maxTpProb))
+    {
+      station->m_maxTpRate2 = station->m_maxTpRate;
+      station->m_maxTpRate = index;
+    }
+  else if (th > maxTp2Th || (th == maxTp2Th && prob > maxTp2Prob))
+    {
+      station->m_maxTpRate2 = index;
+    }
+
+  //Find best rates per group
+
+  GroupInfo *group = &station->m_groupsTable[groupId];
+  maxTpGroupId = GetGroupId (group->m_maxTpRate);
+  maxTpRateId = GetRateId (group->m_maxTpRate);
+  maxTpProb = group->m_ratesTable[maxTpRateId].ewmaProb;
+  maxTpTh = station->m_groupsTable[maxTpGroupId].m_ratesTable[maxTpRateId].throughput;
+
+  maxTp2GroupId = GetGroupId (group->m_maxTpRate2);
+  maxTp2RateId = GetRateId (group->m_maxTpRate2);
+  maxTp2Prob = group->m_ratesTable[maxTp2RateId].ewmaProb;
+  maxTp2Th = station->m_groupsTable[maxTp2GroupId].m_ratesTable[maxTp2RateId].throughput;
+
+  if (th > maxTpTh || (th == maxTpTh && prob > maxTpProb))
+    {
+      group->m_maxTpRate2 = group->m_maxTpRate;
+      group->m_maxTpRate = index;
+    }
+  else if (th > maxTp2Th || (th == maxTp2Th && prob > maxTp2Prob))
+    {
+      group->m_maxTpRate2 = index;
+    }
+}
+
+void
+MinstrelHtWifiManager::RateInit (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  NS_LOG_DEBUG ("RateInit=" << station);
+
+  station->m_groupsTable = McsGroupData (m_numGroups);
+
+  /**
+  * Initialize groups supported by the receiver.
+  */
+  NS_LOG_DEBUG ("Supported groups by station:");
+  for (uint32_t groupId = 0; groupId < m_numGroups; groupId++)
+    {
+      if (m_minstrelGroups[groupId].isSupported)
+        {
+          station->m_groupsTable[groupId].m_supported = false;
+          if (!(!GetVhtSupported (station) && m_minstrelGroups[groupId].isVht)                  ///Is VHT supported by the receiver?
+              && (m_minstrelGroups[groupId].isVht || !GetVhtSupported (station) || !m_useVhtOnly) ///If it is an HT MCS, check if VHT only is disabled
+              && !(!GetShortGuardInterval (station) && m_minstrelGroups[groupId].sgi)           ///Is SGI supported by the receiver?
+              && (GetChannelWidth (station) >= m_minstrelGroups[groupId].chWidth)               ///Is channel width supported by the receiver?
+              && (GetNumberOfSupportedRxAntennas (station) >= m_minstrelGroups[groupId].streams)) ///Are streams supported by the receiver?
+            {
+              NS_LOG_DEBUG ("Group " << groupId << ": (" << (uint32_t)m_minstrelGroups[groupId].streams <<
+                            "," << (uint32_t)m_minstrelGroups[groupId].sgi << "," << m_minstrelGroups[groupId].chWidth << ")");
+
+              station->m_groupsTable[groupId].m_supported = true;                                ///Group supported.
+              station->m_groupsTable[groupId].m_col = 0;
+              station->m_groupsTable[groupId].m_index = 0;
+
+              station->m_groupsTable[groupId].m_ratesTable = HtMinstrelRate (m_numRates);        ///Create the rate list for the group.
+              for (uint32_t i = 0; i < m_numRates; i++)
+                {
+                  station->m_groupsTable[groupId].m_ratesTable[i].supported = false;
+                }
+
+              // Initialize all modes supported by the remote station that belong to the current group.
+              for (uint32_t i = 0; i < station->m_nModes; i++)
+                {
+                  WifiMode mode = GetMcsSupported (station, i);
+
+                  ///Use the McsValue as the index in the rate table.
+                  ///This way, MCSs not supported are not initialized.
+                  uint32_t rateId = mode.GetMcsValue ();
+                  if (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+                    {
+                      rateId %= MAX_HT_GROUP_RATES;
+                    }
+
+                  if ((m_minstrelGroups[groupId].isVht && mode.GetModulationClass () == WIFI_MOD_CLASS_VHT                       ///If it is a VHT MCS only add to a VHT group.
+                       && IsValidMcs (GetPhy (), m_minstrelGroups[groupId].streams, m_minstrelGroups[groupId].chWidth, mode))   ///Check validity of the VHT MCS
+                      || (!m_minstrelGroups[groupId].isVht &&  mode.GetModulationClass () == WIFI_MOD_CLASS_HT                  ///If it is a HT MCS only add to a HT group.
+                          && mode.GetMcsValue () < (m_minstrelGroups[groupId].streams * 8)                                      ///Check if the HT MCS corresponds to groups number of streams.
+                          && mode.GetMcsValue () >= ((m_minstrelGroups[groupId].streams - 1) * 8)))
+                    {
+                      NS_LOG_DEBUG ("Mode " << i << ": " << mode << " isVht: " << m_minstrelGroups[groupId].isVht);
+
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].supported = true;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex = i;         ///Mapping between rateId and operationalMcsSet
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].prob = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].prevNumRateAttempt = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].prevNumRateSuccess = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].numSamplesSkipped = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].successHist = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].attemptHist = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].throughput = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].perfectTxTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, i));
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 0;
+                      station->m_groupsTable[groupId].m_ratesTable[rateId].adjustedRetryCount = 0;
+                      CalculateRetransmits (station, groupId, rateId);
+                    }
+                }
+            }
+        }
+    }
+  SetNextSample (station);                  /// Select the initial sample index.
+  UpdateStats (station);                    /// Calculate the initial high throughput rates.
+  station->m_txrate = FindRate (station);   /// Select the rate to use.
+}
+
+void
+MinstrelHtWifiManager::CalculateRetransmits (MinstrelHtWifiRemoteStation *station, uint32_t index)
+{
+  NS_LOG_FUNCTION (this << station << index);
+  uint32_t groupId = GetGroupId (index);
+  uint32_t rateId = GetRateId (index);
+  if (!station->m_groupsTable[groupId].m_ratesTable[rateId].retryUpdated)
+    {
+      CalculateRetransmits (station, groupId, rateId);
+    }
+}
+
+void
+MinstrelHtWifiManager::CalculateRetransmits (MinstrelHtWifiRemoteStation *station, uint32_t groupId, uint32_t rateId)
+{
+  NS_LOG_FUNCTION (this << station << groupId << groupId);
+  NS_LOG_DEBUG (" Calculating the number of retries");
+
+  uint32_t cw = 15;                     // Is an approximation.
+  uint32_t cwMax = 1023;
+  Time cwTime, txTime, dataTxTime;
+  Time slotTime = GetMac ()->GetSlot ();
+  Time ackTime = GetMac ()->GetBasicBlockAckTimeout ();
+
+  if (station->m_groupsTable[groupId].m_ratesTable[rateId].ewmaProb < 1)
+    {
+      station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 1;
+    }
+  else
+    {
+      station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount = 2;
+      station->m_groupsTable[groupId].m_ratesTable[rateId].retryUpdated = true;
+
+      dataTxTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex)) +
+        GetMpduTxTime (groupId, GetMcsSupported (station, station->m_groupsTable[groupId].m_ratesTable[rateId].mcsIndex)) * (station->m_avgAmpduLen - 1);
+
+      /* Contention time for first 2 tries */
+      cwTime = (cw / 2) * slotTime;
+      cw = Min ((cw + 1) * 2, cwMax);
+      cwTime += (cw / 2) * slotTime;
+      cw = Min ((cw + 1) * 2, cwMax);
+
+      /* Total TX time for data and Contention after first 2 tries */
+      txTime = cwTime + 2 * (dataTxTime + ackTime);
+
+      /* See how many more tries we can fit inside segment size */
+      do
+        {
+          /* Contention time for this try */
+          cwTime = (cw / 2) * slotTime;
+          cw = Min ((cw + 1) * 2, cwMax);
+
+          /* Total TX time after this try */
+          txTime += cwTime + ackTime + dataTxTime;
+        }
+      while ((txTime < MilliSeconds (6))
+             && (++station->m_groupsTable[groupId].m_ratesTable[rateId].retryCount < 7));
+    }
+}
+
+double
+MinstrelHtWifiManager::CalculateEwmsd (double oldEwmsd, double currentProb, double ewmaProb, uint32_t weight)
+{
+  double diff, incr, tmp;
+
+  /* calculate exponential weighted moving variance */
+  diff = currentProb - ewmaProb;
+  incr = (100 - weight) * diff / 100;
+  tmp = oldEwmsd * oldEwmsd;
+  tmp = weight * (tmp + diff * incr) / 100;
+
+  /* return standard deviation */
+  return sqrt (tmp);
+}
+
+void
+MinstrelHtWifiManager::InitSampleTable (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_DEBUG ("InitSampleTable=" << this);
+
+  station->m_col = station->m_index = 0;
+
+  //for off-setting to make rates fall between 0 and nModes
+  uint32_t numSampleRates = m_numRates;
+
+  uint32_t newIndex;
+  for (uint32_t col = 0; col < m_nSampleCol; col++)
+    {
+      for (uint32_t i = 0; i < numSampleRates; i++ )
+        {
+          /**
+           * The next two lines basically tries to generate a random number
+           * between 0 and the number of available rates
+           */
+          int uv = m_uniformRandomVariable->GetInteger (0, numSampleRates);
+          newIndex = (i + uv) % numSampleRates;
+
+          //this loop is used for filling in other uninitialized places
+          while (station->m_sampleTable[newIndex][col] != 0)
+            {
+              newIndex = (newIndex + 1) % m_numRates;
+            }
+          station->m_sampleTable[newIndex][col] = i;
+        }
+    }
+}
+
+void
+MinstrelHtWifiManager::PrintTable (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  NS_LOG_DEBUG ("PrintTable=" << station);
+
+  station->m_statsFile << "               best   ____________rate__________    ________statistics________    ________last_______    ______sum-of________\n" <<
+    " mode guard #  rate  [name   idx airtime  max_tp]  [avg(tp) avg(prob) sd(prob)]  [prob.|retry|suc|att]  [#success | #attempts]\n";
+  for (uint32_t i = 0; i < m_numGroups; i++)
+    {
+      StatsDump (station, i, station->m_statsFile);
+    }
+
+  station->m_statsFile << "\nTotal packet count::    ideal " << Max (0, station->m_totalPacketsCount - station->m_samplePacketsCount) <<
+    "              lookaround " << station->m_samplePacketsCount << "\n";
+  station->m_statsFile << "Average # of aggregated frames per A-MPDU: " << station->m_avgAmpduLen << "\n\n";
+
+  station->m_statsFile.flush ();
+}
+
+void
+MinstrelHtWifiManager::StatsDump (MinstrelHtWifiRemoteStation *station, uint32_t groupId, std::ofstream &of)
+{
+  uint32_t numRates = m_numRates;
+  McsGroup group = m_minstrelGroups[groupId];
+  Time txTime;
+  char giMode;
+  if (group.sgi)
+    {
+      giMode = 'S';
+    }
+  else
+    {
+      giMode = 'L';
+    }
+  for (uint32_t i = 0; i < numRates; i++)
+    {
+      if (station->m_groupsTable[groupId].m_supported && station->m_groupsTable[groupId].m_ratesTable[i].supported)
+        {
+          if (!group.isVht)
+            {
+              of << "HT" << group.chWidth << "   " << giMode << "GI  " << (int)group.streams << "   ";
+            }
+          else
+            {
+              of << "VHT" << group.chWidth << "   " << giMode << "GI  " << (int)group.streams << "   ";
+            }
+
+          uint32_t maxTpRate = station->m_maxTpRate;
+          uint32_t maxTpRate2 = station->m_maxTpRate2;
+          uint32_t maxProbRate = station->m_maxProbRate;
+
+          uint32_t idx = GetIndex (groupId, i);
+          if (idx == maxTpRate)
+            {
+              of << 'A';
+            }
+          else
+            {
+              of << ' ';
+            }
+          if (idx == maxTpRate2)
+            {
+              of << 'B';
+            }
+          else
+            {
+              of << ' ';
+            }
+          if (idx == maxProbRate)
+            {
+              of << 'P';
+            }
+          else
+            {
+              of << ' ';
+            }
+
+          if (!group.isVht)
+            {
+              of << std::setw (4) << "   MCS" << (group.streams - 1) * 8 + i;
+            }
+          else
+            {
+              of << std::setw (7) << "   MCS" << i << "/" << (int) group.streams;
+            }
+
+          of << "  " << std::setw (3) << idx << "  ";
+
+          /* tx_time[rate(i)] in usec */
+          txTime = GetFirstMpduTxTime (groupId, GetMcsSupported (station, station->m_groupsTable[groupId].m_ratesTable[i].mcsIndex));
+          of << std::setw (6) << txTime.GetMicroSeconds () << "  ";
+
+          of << std::setw (7) << CalculateThroughput (station, groupId, i, 100) / 100 << "   " <<
+            std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].throughput / 100 << "   " <<
+            std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewmaProb << "  " <<
+            std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].ewmsdProb << "  " <<
+            std::setw (7) << station->m_groupsTable[groupId].m_ratesTable[i].prob << "  " <<
+            std::setw (2) << station->m_groupsTable[groupId].m_ratesTable[i].retryCount << "   " <<
+            std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].prevNumRateSuccess << "  " <<
+            std::setw (3) << station->m_groupsTable[groupId].m_ratesTable[i].prevNumRateAttempt << "   " <<
+            std::setw (9) << station->m_groupsTable[groupId].m_ratesTable[i].successHist << "   " <<
+            std::setw (9) << station->m_groupsTable[groupId].m_ratesTable[i].attemptHist << "\n";
+        }
+    }
+}
+uint32_t
+MinstrelHtWifiManager::GetIndex (uint32_t groupId, uint32_t rateId)
+{
+  NS_LOG_FUNCTION (this << groupId << rateId);
+  uint32_t index;
+  index = groupId * m_numRates + rateId;
+  return index;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetRateId (uint32_t index)
+{
+  NS_LOG_FUNCTION (this << index);
+
+  uint32_t id;
+  id = index % m_numRates;
+  return id;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetGroupId (uint32_t index)
+{
+  NS_LOG_FUNCTION (this << index);
+
+  return index / m_numRates;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetHtGroupId (uint8_t txstreams, uint8_t sgi, uint32_t chWidth)
+{
+  NS_LOG_FUNCTION (this << (int)txstreams << (int)sgi << chWidth);
+
+  return MAX_SUPPORTED_STREAMS * 2 * (chWidth == 40 ? 1 : 0) + MAX_SUPPORTED_STREAMS * sgi + txstreams - 1;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetVhtGroupId (uint8_t txstreams, uint8_t sgi, uint32_t chWidth)
+{
+  NS_LOG_FUNCTION (this << (int)txstreams << (int)sgi << chWidth);
+
+  return MAX_HT_STREAM_GROUPS * MAX_SUPPORTED_STREAMS + MAX_SUPPORTED_STREAMS * 2 * (chWidth == 160 ? 3 : chWidth == 80 ? 2 : chWidth == 40 ? 1 : 0) + MAX_SUPPORTED_STREAMS * sgi + txstreams - 1;
+}
+
+uint32_t
+MinstrelHtWifiManager::GetLowestIndex (MinstrelHtWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  uint32_t groupId = 0;
+  uint32_t rateId = 0;
+  while (groupId < m_numGroups && !station->m_groupsTable[groupId].m_supported)
+    {
+      groupId++;
+    }
+  while (rateId < m_numRates && !station->m_groupsTable[groupId].m_ratesTable[rateId].supported)
+    {
+      rateId++;
+    }
+  NS_ASSERT (station->m_groupsTable[groupId].m_supported && station->m_groupsTable[groupId].m_ratesTable[rateId].supported);
+  return GetIndex (groupId, rateId);
+}
+
+uint32_t
+MinstrelHtWifiManager::GetLowestIndex (MinstrelHtWifiRemoteStation *station, uint32_t groupId)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  uint32_t rateId = 0;
+  while (rateId < m_numRates && !station->m_groupsTable[groupId].m_ratesTable[rateId].supported)
+    {
+      rateId++;
+    }
+  NS_ASSERT (station->m_groupsTable[groupId].m_supported && station->m_groupsTable[groupId].m_ratesTable[rateId].supported);
+  return GetIndex (groupId, rateId);
+}
+
+
+WifiModeList
+MinstrelHtWifiManager::GetVhtDeviceMcsList (void) const
+{
+  WifiModeList vhtMcsList;
+  Ptr<WifiPhy> phy = GetPhy ();
+  for (uint32_t i = 0; i < phy->GetNMcs (); i++)
+    {
+      WifiMode mode = phy->GetMcs (i);
+      if (mode.GetModulationClass () == WIFI_MOD_CLASS_VHT)
+        {
+          vhtMcsList.push_back (mode);
+        }
+    }
+  return vhtMcsList;
+}
+
+WifiModeList
+MinstrelHtWifiManager::GetHtDeviceMcsList (void) const
+{
+  WifiModeList htMcsList;
+  Ptr<WifiPhy> phy = GetPhy ();
+  for (uint32_t i = 0; i < phy->GetNMcs (); i++)
+    {
+      WifiMode mode = phy->GetMcs (i);
+      if (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+        {
+          htMcsList.push_back (mode);
+        }
+    }
+  return htMcsList;
+}
+
+} // namespace ns3
+
+
+
+
+
diff -Naur ns-3.24.1/src/wifi/model/minstrel-ht-wifi-manager.h ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.h
--- ns-3.24.1/src/wifi/model/minstrel-ht-wifi-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/model/minstrel-ht-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,421 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2009 Duy Nguyen
+ * Copyright (c) 2015 Ghada Badawy
+ *
+ * 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: Duy Nguyen <duy@soe.ucsc.edu>
+ *        Ghada Badawy <gbadawy@gmail.com>
+ *        Matias Richart <mrichart@fing.edu.uy>
+ *
+ * MinstrelHt is a rate adaptation algorithm for high-throughput (HT) 802.11
+ */
+
+#ifndef MINSTREL_HT_WIFI_MANAGER_H
+#define MINSTREL_HT_WIFI_MANAGER_H
+
+#include "wifi-remote-station-manager.h"
+#include "minstrel-wifi-manager.h"
+#include "wifi-mode.h"
+#include "ns3/nstime.h"
+#include "ns3/random-variable-stream.h"
+#include <vector>
+#include <map>
+#include <deque>
+
+namespace ns3 {
+
+/**
+ * Data structure to save transmission time calculations per rate.
+ * A vector of Time, WifiMode pairs.
+ */
+typedef std::vector<std::pair<Time, WifiMode> > TxTime;
+
+/**
+ * Data structure to contain the information that defines a group.
+ * It also contains the transmission times for all the MCS in the group.
+ * A group is a collection of MCS defined by the number of spatial streams,
+ * if it uses or not Short Guard Interval, and the channel width used.
+ */
+struct McsGroup
+{
+  uint8_t streams;
+  uint8_t sgi;
+  uint32_t chWidth;
+  bool isVht;
+  bool isSupported;
+
+  // To accurately account for TX times, we separate the TX time of the first
+  // MPDU in an A-MPDU from the rest of the MPDUs.
+  TxTime ratesTxTimeTable;
+  TxTime ratesFirstMpduTxTimeTable;
+};
+
+/**
+ * Data structure for a table of group definitions.
+ * A vector of McsGroups.
+ */
+typedef std::vector<struct McsGroup> MinstrelMcsGroups;
+
+struct MinstrelHtWifiRemoteStation;
+/**
+ * A struct to contain all statistics information related to a data rate.
+ */
+struct HtRateInfo
+{
+  /**
+   * Perfect transmission time calculation, or frame calculation.
+   * Given a bit rate and a packet length n bytes.
+   */
+  Time perfectTxTime;
+
+  bool supported;               //!< If the rate is supported.
+
+  uint32_t mcsIndex;            //!< The index in the operationalMcsSet of the WifiRemoteStationManager.
+
+  uint32_t retryCount;          //!< Retry limit.
+  uint32_t adjustedRetryCount;  //!< Adjust the retry limit for this rate.
+  uint32_t numRateAttempt;      //!< Number of transmission attempts so far.
+  uint32_t numRateSuccess;      //!< Number of successful frames transmitted so far.
+  double prob;                  //!< Current probability within last time interval. (# frame success )/(# total frames)
+
+  bool retryUpdated;            //!< If number of retries was updated already.
+
+  /**
+   * Exponential weighted moving average of probability.
+   * EWMA calculation:
+   * ewma_prob =[prob *(100 - ewma_level) + (ewma_prob_old * ewma_level)]/100
+   */
+  double ewmaProb;
+
+  double ewmsdProb;             //!< Exponential weighted moving standard deviation of probability.
+
+  uint32_t prevNumRateAttempt;  //!< Number of transmission attempts with previous rate.
+  uint32_t prevNumRateSuccess;  //!< Number of successful frames transmitted with previous rate.
+  uint32_t numSamplesSkipped;   //!< Number of times this rate statistics were not updated because no attempts have been made.
+  uint64_t successHist;         //!< Aggregate of all transmission successes.
+  uint64_t attemptHist;         //!< Aggregate of all transmission attempts.
+  double throughput;            //!< Throughput of this rate (in pkts per second).
+};
+
+/**
+ * Data structure for a Minstrel Rate table.
+ * A vector of a struct HtRateInfo.
+ */
+typedef std::vector<struct HtRateInfo> HtMinstrelRate;
+
+/**
+ * A struct to contain information of a group.
+ */
+struct GroupInfo
+{
+  /**
+   * MCS rates are divided into groups based on the number of streams and flags that they use.
+   */
+  uint8_t m_col;                  //!< Sample table column.
+  uint8_t m_index;                //!< Sample table index.
+
+  bool m_supported;               //!< If the rates of this group are supported by the station.
+
+  uint32_t m_maxTpRate;           //!< The max throughput rate of this group.
+  uint32_t m_maxTpRate2;          //!< The second max throughput rate of this group.
+  uint32_t m_maxProbRate;         //!< The highest success probability rate of this group.
+
+  HtMinstrelRate m_ratesTable;    //!< Information about rates of this group.
+};
+
+/**
+ * Data structure for a table of groups. Each group is of type GroupInfo.
+ * A vector of a GroupInfo.
+ */
+typedef std::vector<struct GroupInfo> McsGroupData;
+
+/**
+ * Data structure for a Sample Rate table.
+ * A vector of a vector uint32_t.
+ */
+typedef std::vector<std::vector<uint32_t> > HtSampleRate;
+
+/**
+ * Constants for maximum values.
+ */
+
+static const uint8_t MAX_SUPPORTED_STREAMS = 4;  //!< Maximal number of streams supported by the phy layer.
+static const uint8_t MAX_HT_STREAM_GROUPS = 4;   //!< Maximal number of groups per stream in HT (2 possible channel widths and 2 possible SGI configurations).
+static const uint8_t MAX_VHT_STREAM_GROUPS = 8;  //!< Maximal number of groups per stream in VHT (4 possible channel widths and 2 possible SGI configurations).
+static const uint8_t MAX_HT_GROUP_RATES = 8;     //!< Number of rates (or MCS) per HT group.
+static const uint8_t MAX_VHT_GROUP_RATES = 10;   //!< Number of rates (or MCS) per VHT group.
+static const uint8_t MAX_HT_WIDTH = 40;          //!< Maximal channel width.
+static const uint8_t MAX_VHT_WIDTH = 160;        //!< Maximal channel width.
+
+/**
+ * \brief Implementation of Minstrel HT Rate Control Algorithm
+ * \ingroup wifi
+ *
+ * Minstrel-HT is a rate adaptation mechanism for the 802.11n/ac standard 
+ * based on Minstrel, and is based on the approach of probing the channel
+ * to dynamically learn about working rates that can be supported.  
+ * Minstrel-HT is designed for high-latency devices that implement a 
+ * Multiple Rate Retry (MRR) chain. This kind of device does 
+ * not give feedback for every frame retransmission, but only when a frame 
+ * was correctly transmitted (an ACK is received) or a frame transmission 
+ * completely fails (all retransmission attempts fail).
+ * The MRR chain is used to advise the hardware about which rate to use 
+ * when retransmitting a frame.
+ * 
+ * Minstrel-HT adapts the MCS, channel width, number of streams, and 
+ * short guard interval (enabled or disabled).  For keeping statistics,
+ * it arranges MCS in groups, where each group is defined by the 
+ * tuple (#streams, SGI, channel width).  There is a vector of all groups 
+ * supported by the PHY layer of the transmitter; for each group, the 
+ * capabilities and the estimated duration of its rates are maintained.
+ *
+ * Each station maintains a table of groups statistics. For each group, a flag 
+ * indicates if the group is supported by the station. Different stations 
+ * communicating with an AP can have different capabilities.
+ *
+ * Stats are updated per A-MPDU when receiving AmpduTxStatus. If the number 
+ * of successful or failed MPDUs is greater than zero (a BlockAck was 
+ * received), the rates are also updated.
+ * If the number of successful and failed MPDUs is zero (BlockAck timeout), 
+ * then the rate selected is based on the MRR chain.
+ * 
+ * On each update interval, it sets the maxThrRate, the secondmaxThrRate 
+ * and the maxProbRate for the MRR chain. These rates are only used when 
+ * an entire A-MPDU fails and is retried.
+ * 
+ * Differently from legacy minstrel, sampling is not done based on 
+ * "lookaround ratio", but assuring all rates are sampled at least once 
+ * each interval. However, it samples less often the low rates and high 
+ * probability of error rates.
+ *
+ * When this rate control is configured but HT and VHT are not supported, 
+ * Minstrel-HT uses legacy Minstrel (minstrel-wifi-manager) for rate control.
+ */
+class MinstrelHtWifiManager : public WifiRemoteStationManager
+{
+
+public:
+  static TypeId GetTypeId (void);
+  MinstrelHtWifiManager ();
+  virtual ~MinstrelHtWifiManager ();
+
+  /**
+   * 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);
+
+  // Inherited from WifiRemoteStationManager
+  virtual void SetupPhy (Ptr<WifiPhy> phy);
+  virtual void SetupMac (Ptr<WifiMac> mac);
+
+  /**
+   * TracedCallback signature for rate change events.
+   *
+   * \param [in] rate The new rate.
+   * \param [in] address The remote station MAC address.
+   */
+  typedef void (*RateChangeTracedCallback)(const uint64_t rate, const Mac48Address remoteAddress);
+
+private:
+  // Overriden from base class.
+  virtual void DoInitialize (void);
+  virtual WifiRemoteStation * DoCreateStation (void) const;
+  virtual void DoReportRxOk (WifiRemoteStation *station,
+                             double rxSnr, WifiMode txMode);
+  virtual void DoReportRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportDataFailed (WifiRemoteStation *station);
+  virtual void DoReportRtsOk (WifiRemoteStation *station,
+                              double ctsSnr, WifiMode ctsMode, double rtsSnr);
+  virtual void DoReportDataOk (WifiRemoteStation *station,
+                               double ackSnr, WifiMode ackMode, double dataSnr);
+  virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
+  virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
+  virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
+  virtual void DoReportAmpduTxStatus (WifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr);
+  virtual bool IsLowLatency (void) const;
+  virtual bool DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally);
+  virtual void DoDisposeStation (WifiRemoteStation *station);
+
+  /// Check the validity of a combination of number of streams, chWidth and mode.
+  bool IsValidMcs (Ptr<WifiPhy> phy, uint8_t streams, uint32_t chWidth, WifiMode mode);
+
+  /// Estimates the TxTime of a frame with a given mode and group (stream, guard interval and channel width).
+  Time CalculateMpduTxDuration (Ptr<WifiPhy> phy, uint8_t streams, uint8_t sgi, uint32_t chWidth, WifiMode mode);
+
+  /// Estimates the TxTime of a frame with a given mode and group (stream, guard interval and channel width).
+  Time CalculateFirstMpduTxDuration (Ptr<WifiPhy> phy, uint8_t streams, uint8_t sgi, uint32_t chWidth, WifiMode mode);
+
+  /// Obtain the TXtime saved in the group information.
+  Time GetMpduTxTime (uint32_t groupId, WifiMode mode) const;
+
+  /// Save a TxTime to the vector of groups.
+  void AddMpduTxTime (uint32_t groupId, WifiMode mode, Time t);
+
+  /// Obtain the TXtime saved in the group information.
+  Time GetFirstMpduTxTime (uint32_t groupId, WifiMode mode) const;
+
+  /// Save a TxTime to the vector of groups.
+  void AddFirstMpduTxTime (uint32_t groupId, WifiMode mode, Time t);
+
+  /// Update the number of retries and reset accordingly.
+  void UpdateRetry (MinstrelHtWifiRemoteStation *station);
+
+  /// Update the number of sample count variables.
+  void UpdatePacketCounters (MinstrelHtWifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus);
+
+  /// Getting the next sample from Sample Table.
+  uint32_t GetNextSample (MinstrelHtWifiRemoteStation *station);
+
+  /// Set the next sample from Sample Table.
+  void SetNextSample (MinstrelHtWifiRemoteStation *station);
+
+  /// Find a rate to use from Minstrel Table.
+  uint32_t FindRate (MinstrelHtWifiRemoteStation *station);
+
+  /// Updating the Minstrel Table every 1/10 seconds.
+  void UpdateStats (MinstrelHtWifiRemoteStation *station);
+
+  /// Initialize Minstrel Table.
+  void RateInit (MinstrelHtWifiRemoteStation *station);
+
+  /// Return the average throughput of the MCS defined by groupId and rateId.
+  double CalculateThroughput (MinstrelHtWifiRemoteStation *station, uint32_t groupId, uint32_t rateId, double ewmaProb);
+
+  /// Set index rate as maxTpRate or maxTp2Rate if is better than current values.
+  void SetBestStationThRates (MinstrelHtWifiRemoteStation *station, uint32_t index);
+
+  /// Set index rate as maxProbRate if it is better than current value.
+  void SetBestProbabilityRate (MinstrelHtWifiRemoteStation *station, uint32_t index);
+
+  /// Calculate the number of retransmissions to set for the index rate.
+  void CalculateRetransmits (MinstrelHtWifiRemoteStation *station, uint32_t index);
+
+  /// Calculate the number of retransmissions to set for the (groupId, rateId) rate.
+  void CalculateRetransmits (MinstrelHtWifiRemoteStation *station, uint32_t groupId, uint32_t rateId);
+
+  /**
+   * Estimate the time to transmit the given packet with the given number of retries.
+   * This function is "roughly" the function "calc_usecs_unicast_packet" in minstrel.c
+   * in the madwifi implementation.
+   *
+   * The basic idea is that, we try to estimate the "average" time used to transmit the
+   * packet for the given number of retries while also accounting for the 802.11 congestion
+   * window change. The original code in the madwifi seems to estimate the number of backoff
+   * slots as the half of the current CW size.
+   *
+   * There are four main parts:
+   *  - wait for DIFS (sense idle channel)
+   *  - ACK timeouts
+   *  - DATA transmission
+   *  - backoffs according to CW
+   */
+  Time CalculateTimeUnicastPacket (Time dataTransmissionTime, uint32_t shortRetries, uint32_t longRetries);
+
+  /// Perform EWMSD (Exponentially Weighted Moving Standard Deviation) calculation.
+  double CalculateEwmsd (double oldEwmsd, double currentProb, double ewmaProb, uint32_t weight);
+
+  /// Initialize Sample Table.
+  void InitSampleTable (MinstrelHtWifiRemoteStation *station);
+
+  /// Printing Sample Table.
+  void PrintSampleTable (MinstrelHtWifiRemoteStation *station);
+
+  /// Printing Minstrel Table.
+  void PrintTable (MinstrelHtWifiRemoteStation *station);
+
+  /// Print group statistics.
+  void StatsDump (MinstrelHtWifiRemoteStation *station, uint32_t index, std::ofstream &of);
+
+  /// Check for initializations.
+  void CheckInit (MinstrelHtWifiRemoteStation *station);
+
+  uint32_t CountRetries (MinstrelHtWifiRemoteStation * station);
+
+  void UpdateRate (MinstrelHtWifiRemoteStation *station);
+
+  /**
+   * For managing rates from different groups, a global index for
+   * all rates in all groups is used.
+   * The group order is fixed by BW -> SGI -> #streams.
+   * Following functions convert from groupId and rateId to
+   * global index and vice versa.
+   */
+
+  /// Return the rateId inside a group, from the global index.
+  uint32_t GetRateId (uint32_t index);
+
+  /// Return the groupId from the global index.
+  uint32_t GetGroupId (uint32_t index);
+
+  /// Returns the global index corresponding to the groupId and rateId.
+  uint32_t GetIndex (uint32_t groupId, uint32_t rateId);
+
+  /// Returns the groupId of a HT MCS with the given number of streams, if using sgi and the channel width used.
+  uint32_t GetHtGroupId (uint8_t txstreams, uint8_t sgi, uint32_t chWidth);
+
+  /// Returns the groupId of a VHT MCS with the given number of streams, if using sgi and the channel width used.
+  uint32_t GetVhtGroupId (uint8_t txstreams, uint8_t sgi, uint32_t chWidth);
+
+  /// Returns the lowest global index of the rates supported by the station.
+  uint32_t GetLowestIndex (MinstrelHtWifiRemoteStation *station);
+
+  /// Returns the lowest global index of the rates supported by in the group.
+  uint32_t GetLowestIndex (MinstrelHtWifiRemoteStation *station, uint32_t groupId);
+
+  /// Returns a list of only the VHT MCS supported by the device.
+  WifiModeList GetVhtDeviceMcsList (void) const;
+
+  /// Returns a list of only the HT MCS supported by the device.
+  WifiModeList GetHtDeviceMcsList (void) const;
+
+  Time m_updateStats;         //!< How frequent do we calculate the stats (1/10 seconds).
+  double m_lookAroundRate;    //!< The % to try other rates than our current rate.
+  double m_ewmaLevel;         //!< Exponential weighted moving average level (or coefficient).
+
+  uint32_t m_nSampleCol;      //!< Number of sample columns.
+  uint32_t m_frameLength;     //!< Frame length used for calculate modes TxTime.
+
+
+  uint8_t m_numGroups;         //!< Number of groups Minstrel should consider.
+  uint8_t m_numRates;          //!< Number of rates per group Minstrel should consider.
+
+  bool m_useVhtOnly;           //!< If only VHT MCS should be used, instead of HT and VHT.
+
+  bool m_printStats;           //!< If statistics table should be printed.
+
+
+  MinstrelMcsGroups m_minstrelGroups;                 //!< Global array for groups information.
+
+  Ptr<MinstrelWifiManager> m_legacyManager;           //!< Pointer to an instance of MinstrelWifiManager. Used when 802.11n/ac not supported.
+
+
+  Ptr<UniformRandomVariable> m_uniformRandomVariable; //!< Provides uniform random variables.
+
+  /**
+   * The trace source fired when the transmission rate change.
+   */
+  TracedCallback<uint64_t, Mac48Address> m_rateChange;
+};
+
+} // namespace ns3
+
+#endif /* MINSTREL_HT_WIFI_MANAGER_H */
diff -Naur ns-3.24.1/src/wifi/model/minstrel-wifi-manager.cc ns-3.25/src/wifi/model/minstrel-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/minstrel-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/minstrel-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -16,13 +16,14 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Duy Nguyen <duy@soe.ucsc.edu>
+ *         Matías Richart <mrichart@fing.edu.uy>
  *
  * Some Comments:
  *
  * 1) Segment Size is declared for completeness but not used  because it has
  *    to do more with the requirement of the specific hardware.
  *
- * 2) By default, Minstrel applies the multi-rate retry(the core of Minstrel
+ * 2) By default, Minstrel applies the multi-rate retry (the core of Minstrel
  *    algorithm). Otherwise, please use ConstantRateWifiManager instead.
  *
  * http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/minstrel
@@ -34,9 +35,11 @@
 #include "ns3/log.h"
 #include "ns3/uinteger.h"
 #include "ns3/double.h"
+#include "ns3/boolean.h"
 #include "ns3/wifi-mac.h"
 #include "ns3/assert.h"
 #include <vector>
+#include <iomanip>
 
 #define Min(a,b) ((a < b) ? a : b)
 
@@ -44,41 +47,6 @@
 
 NS_LOG_COMPONENT_DEFINE ("MinstrelWifiManager");
 
-/**
- * \brief hold per-remote-station state for Minstrel Wifi manager.
- *
- * This struct extends from WifiRemoteStation struct to hold additional
- * information required by the Minstrel Wifi manager
- */
-struct MinstrelWifiRemoteStation : public WifiRemoteStation
-{
-  Time m_nextStatsUpdate;  ///< 10 times every second
-
-  /**
-   * To keep track of the current position in the our random sample table
-   * going row by row from 1st column until the 10th column(Minstrel defines 10)
-   * then we wrap back to the row 1 col 1.
-   * note: there are many other ways to do this.
-   */
-  uint32_t m_col, m_index;
-  uint32_t m_maxTpRate;          ///< the current throughput rate
-  uint32_t m_maxTpRate2;         ///< second highest throughput rate
-  uint32_t m_maxProbRate;        ///< rate with highest prob of success
-  int m_packetCount;             ///< total number of packets as of now
-  int m_sampleCount;             ///< how many packets we have sample so far
-  bool m_isSampling;             ///< a flag to indicate we are currently sampling
-  uint32_t m_sampleRate;         ///< current sample rate
-  bool  m_sampleRateSlower;      ///< a flag to indicate sample rate is slower
-  uint32_t m_shortRetry;         ///< short retries such as control packts
-  uint32_t m_longRetry;          ///< long retries such as data packets
-  uint32_t m_retry;              ///< total retries short + long
-  uint32_t m_err;                ///< retry errors
-  uint32_t m_txrate;             ///< current transmit rate
-  bool m_initialized;            ///< for initializing tables
-  MinstrelRate m_minstrelTable;  ///< minstrel table
-  SampleRate m_sampleTable;      ///< sample table
-};
-
 NS_OBJECT_ENSURE_REGISTERED (MinstrelWifiManager);
 
 TypeId
@@ -105,27 +73,32 @@
                    MakeDoubleChecker<double> ())
     .AddAttribute ("SampleColumn",
                    "The number of columns used for sampling",
-                   DoubleValue (10),
-                   MakeDoubleAccessor (&MinstrelWifiManager::m_sampleCol),
-                   MakeDoubleChecker <double> ())
+                   UintegerValue (10),
+                   MakeUintegerAccessor (&MinstrelWifiManager::m_sampleCol),
+                   MakeUintegerChecker <uint32_t> ())
     .AddAttribute ("PacketLength",
                    "The packet length used for calculating mode TxTime",
-                   DoubleValue (1200),
-                   MakeDoubleAccessor (&MinstrelWifiManager::m_pktLen),
-                   MakeDoubleChecker <double> ())
+                   UintegerValue (1200),
+                   MakeUintegerAccessor (&MinstrelWifiManager::m_pktLen),
+                   MakeUintegerChecker <uint32_t> ())
+    .AddAttribute ("PrintStats",
+                   "Print statistics table",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&MinstrelWifiManager::m_printStats),
+                   MakeBooleanChecker ())
   ;
   return tid;
 }
 
 MinstrelWifiManager::MinstrelWifiManager ()
 {
+  NS_LOG_FUNCTION (this);
   m_uniformRandomVariable = CreateObject<UniformRandomVariable> ();
-
-  m_nsupported = 0;
 }
 
 MinstrelWifiManager::~MinstrelWifiManager ()
 {
+  NS_LOG_FUNCTION (this);
 }
 
 void
@@ -138,11 +111,18 @@
       WifiMode mode = phy->GetMode (i);
       WifiTxVector txVector;
       txVector.SetMode (mode);
-      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency (), 0, 0));
+      AddCalcTxTime (mode, phy->CalculateTxDuration (m_pktLen, txVector, WIFI_PREAMBLE_LONG, phy->GetFrequency ()));
     }
   WifiRemoteStationManager::SetupPhy (phy);
 }
 
+void
+MinstrelWifiManager::SetupMac (Ptr<WifiMac> mac)
+{
+  NS_LOG_FUNCTION (this << mac);
+  WifiRemoteStationManager::SetupMac (mac);
+}
+
 int64_t
 MinstrelWifiManager::AssignStreams (int64_t stream)
 {
@@ -154,7 +134,7 @@
 Time
 MinstrelWifiManager::GetCalcTxTime (WifiMode mode) const
 {
-
+  NS_LOG_FUNCTION (this << mode);
   for (TxTime::const_iterator i = m_calcTxTime.begin (); i != m_calcTxTime.end (); i++)
     {
       if (mode == i->second)
@@ -169,12 +149,14 @@
 void
 MinstrelWifiManager::AddCalcTxTime (WifiMode mode, Time t)
 {
+  NS_LOG_FUNCTION (this << mode << t);
   m_calcTxTime.push_back (std::make_pair (t, mode));
 }
 
 WifiRemoteStation *
 MinstrelWifiManager::DoCreateStation (void) const
 {
+  NS_LOG_FUNCTION (this);
   MinstrelWifiRemoteStation *station = new MinstrelWifiRemoteStation ();
 
   station->m_nextStatsUpdate = Simulator::Now () + m_updateStats;
@@ -183,15 +165,15 @@
   station->m_maxTpRate = 0;
   station->m_maxTpRate2 = 0;
   station->m_maxProbRate = 0;
-  station->m_packetCount = 0;
-  station->m_sampleCount = 0;
+  station->m_nModes = 0;
+  station->m_totalPacketsCount = 0;
+  station->m_samplePacketsCount = 0;
   station->m_isSampling = false;
   station->m_sampleRate = 0;
-  station->m_sampleRateSlower = false;
+  station->m_sampleDeferred = false;
   station->m_shortRetry = 0;
   station->m_longRetry = 0;
   station->m_retry = 0;
-  station->m_err = 0;
   station->m_txrate = 0;
   station->m_initialized = false;
 
@@ -201,84 +183,46 @@
 void
 MinstrelWifiManager::CheckInit (MinstrelWifiRemoteStation *station)
 {
+  NS_LOG_FUNCTION (this << station);
   if (!station->m_initialized && GetNSupported (station) > 1)
     {
       //Note: we appear to be doing late initialization of the table
       //to make sure that the set of supported rates has been initialized
       //before we perform our own initialization.
-      m_nsupported = GetNSupported (station);
-      station->m_minstrelTable = MinstrelRate (m_nsupported);
-      station->m_sampleTable = SampleRate (m_nsupported, std::vector<uint32_t> (m_sampleCol));
+      station->m_nModes = GetNSupported (station);
+      station->m_minstrelTable = MinstrelRate (station->m_nModes);
+      station->m_sampleTable = SampleRate (station->m_nModes, std::vector<uint32_t> (m_sampleCol));
       InitSampleTable (station);
       RateInit (station);
       station->m_initialized = true;
-
-      PrintTable (station);
-      PrintSampleTable (station);
+      std::ostringstream tmp;
+      tmp << "minstrel-stats-" << station->m_state->m_address << ".txt";
+      station->m_statsFile.open (tmp.str ().c_str (), std::ios::out);
     }
 }
 
+/**
+ *
+ * Retry Chain table is implemented here
+ *
+ * Try |         LOOKAROUND RATE              | NORMAL RATE
+ *     | random < best    | random > best     |
+ * --------------------------------------------------------------
+ *  1  | Best throughput  | Random rate       | Best throughput
+ *  2  | Random rate      | Best throughput   | Next best throughput
+ *  3  | Best probability | Best probability  | Best probability
+ *  4  | Lowest Baserate  | Lowest baserate   | Lowest baserate
+ *
+ * Note: For clarity, multiple blocks of if's and else's are used
+ * After failing max retry times, DoReportFinalDataFailed will be called
+ */
 void
-MinstrelWifiManager::DoReportRxOk (WifiRemoteStation *st,
-                                   double rxSnr, WifiMode txMode)
-{
-  NS_LOG_FUNCTION (this);
-}
-
-void
-MinstrelWifiManager::DoReportRtsFailed (WifiRemoteStation *st)
-{
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
-  NS_LOG_DEBUG ("DoReportRtsFailed m_txrate=" << station->m_txrate);
-
-  station->m_shortRetry++;
-}
-
-void
-MinstrelWifiManager::DoReportRtsOk (WifiRemoteStation *st, double ctsSnr, WifiMode ctsMode, double rtsSnr)
-{
-  NS_LOG_DEBUG ("self=" << st << " rts ok");
-}
-
-void
-MinstrelWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *st)
-{
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
-  UpdateRetry (station);
-  station->m_err++;
-}
-
-void
-MinstrelWifiManager::DoReportDataFailed (WifiRemoteStation *st)
+MinstrelWifiManager::UpdateRate (MinstrelWifiRemoteStation *station)
 {
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
-  /**
-   *
-   * Retry Chain table is implemented here
-   *
-   * Try |         LOOKAROUND RATE              | NORMAL RATE
-   *     | random < best    | random > best     |
-   * --------------------------------------------------------------
-   *  1  | Best throughput  | Random rate       | Best throughput
-   *  2  | Random rate      | Best throughput   | Next best throughput
-   *  3  | Best probability | Best probability  | Best probability
-   *  4  | Lowest Baserate  | Lowest baserate   | Lowest baserate
-   *
-   * Note: For clarity, multiple blocks of if's and else's are used
-   * After a failing 7 times, DoReportFinalDataFailed will be called
-   */
-
-  CheckInit (station);
-  if (!station->m_initialized)
-    {
-      return;
-    }
-
+  NS_LOG_FUNCTION (this << station);
   station->m_longRetry++;
   station->m_minstrelTable[station->m_txrate].numRateAttempt++;
 
-  PrintTable (station);
-
   NS_LOG_DEBUG ("DoReportDataFailed " << station << " rate " << station->m_txrate << " longRetry " << station->m_longRetry);
 
   //for normal rate, we're not currently sampling random rates
@@ -324,7 +268,7 @@
     {
       NS_LOG_DEBUG ("Failed with look around rate: current=" << station->m_txrate << ", sample=" << station->m_sampleRate << ", maxTp=" << station->m_maxTpRate << ", maxTp2=" << station->m_maxTpRate2 << ", maxProb=" << station->m_maxProbRate);
       //current sampling rate is slower than the current best rate
-      if (station->m_sampleRateSlower)
+      if (station->m_sampleDeferred)
         {
           NS_LOG_DEBUG ("Look around rate is slower than the maximum throughput rate.");
           //use best throughput rate
@@ -400,80 +344,10 @@
     }
 }
 
-void
-MinstrelWifiManager::DoReportDataOk (WifiRemoteStation *st,
-                                     double ackSnr, WifiMode ackMode, double dataSnr)
-{
-  NS_LOG_FUNCTION (st << ackSnr << ackMode << dataSnr);
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
-
-  station->m_isSampling = false;
-  station->m_sampleRateSlower = false;
-
-  CheckInit (station);
-  if (!station->m_initialized)
-    {
-      return;
-    }
-  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
-
-  station->m_minstrelTable[station->m_txrate].numRateSuccess++;
-  station->m_minstrelTable[station->m_txrate].numRateAttempt++;
-
-  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
-
-  UpdateRetry (station);
-
-  station->m_packetCount++;
-
-  if (m_nsupported >= 1)
-    {
-      station->m_txrate = FindRate (station);
-    }
-}
-
-void
-MinstrelWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
-{
-  NS_LOG_FUNCTION (st);
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
-
-  CheckInit (station);
-  if (!station->m_initialized)
-    {
-      return;
-    }
-
-  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
-
-  station->m_isSampling = false;
-  station->m_sampleRateSlower = false;
-
-  UpdateRetry (station);
-
-  station->m_err++;
-
-  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
-
-  if (m_nsupported >= 1)
-    {
-      station->m_txrate = FindRate (station);
-    }
-}
-
-void
-MinstrelWifiManager::UpdateRetry (MinstrelWifiRemoteStation *station)
-{
-  station->m_retry = station->m_shortRetry + station->m_longRetry;
-  station->m_shortRetry = 0;
-  station->m_longRetry = 0;
-}
-
 WifiTxVector
-MinstrelWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
-                                        uint32_t size)
+MinstrelWifiManager::GetDataTxVector (MinstrelWifiRemoteStation *station)
 {
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+  NS_LOG_FUNCTION (this << station);
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
     {
@@ -485,16 +359,15 @@
       CheckInit (station);
 
       //start the rate at half way
-      station->m_txrate = m_nsupported / 2;
+      station->m_txrate = station->m_nModes / 2;
     }
-  UpdateStats (station);
   return WifiTxVector (GetSupported (station, station->m_txrate), GetDefaultTxPowerLevel (), GetLongRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
 }
 
 WifiTxVector
-MinstrelWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
+MinstrelWifiManager::GetRtsTxVector (MinstrelWifiRemoteStation *station)
 {
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+  NS_LOG_FUNCTION (this << station);
   NS_LOG_DEBUG ("DoGetRtsMode m_txrate=" << station->m_txrate);
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -502,74 +375,35 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
-}
-
-bool
-MinstrelWifiManager::DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally)
-{
-  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
-
-  CheckInit (station);
-  if (!station->m_initialized)
-    {
-      return normally;
-    }
-
-  if (!station->m_isSampling)
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
     {
-      if (station->m_longRetry > (station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
-                                  station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
-                                  station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
-                                  station->m_minstrelTable[0].adjustedRetryCount))
-        {
-          return false;
-        }
-      else
-        {
-          return true;
-        }
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
     }
   else
     {
-      if (station->m_longRetry > (station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
-                                  station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
-                                  station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
-                                  station->m_minstrelTable[0].adjustedRetryCount))
-        {
-          return false;
-        }
-      else
-        {
-          return true;
-        }
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
     }
-}
-
-bool
-MinstrelWifiManager::IsLowLatency (void) const
-{
-  return true;
+  return rtsTxVector;
 }
 
 uint32_t
-MinstrelWifiManager::GetNextSample (MinstrelWifiRemoteStation *station)
+MinstrelWifiManager::CountRetries (MinstrelWifiRemoteStation *station)
 {
-  uint32_t bitrate;
-  bitrate = station->m_sampleTable[station->m_index][station->m_col];
-  station->m_index++;
-
-  //bookeeping for m_index and m_col variables
-  if (station->m_index > (m_nsupported - 2))
+  if (!station->m_isSampling)
     {
-      station->m_index = 0;
-      station->m_col++;
-      if (station->m_col >= m_sampleCol)
-        {
-          station->m_col = 0;
-        }
+      return station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+             station->m_minstrelTable[station->m_maxTpRate2].adjustedRetryCount +
+             station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
+             station->m_minstrelTable[0].adjustedRetryCount;
+    }
+  else
+    {
+      return station->m_minstrelTable[station->m_sampleRate].adjustedRetryCount +
+             station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount +
+             station->m_minstrelTable[station->m_maxProbRate].adjustedRetryCount +
+             station->m_minstrelTable[0].adjustedRetryCount;
     }
-  return bitrate;
 }
 
 uint32_t
@@ -577,7 +411,7 @@
 {
   NS_LOG_FUNCTION (this << station);
 
-  if ((station->m_sampleCount + station->m_packetCount) == 0)
+  if (station->m_totalPacketsCount == 0)
     {
       return 0;
     }
@@ -585,65 +419,81 @@
 
   uint32_t idx;
 
-  //for determining when to try a sample rate
-  int coinFlip = m_uniformRandomVariable->GetInteger (0, 100) % 2;
+  int delta = (station->m_totalPacketsCount * m_lookAroundRate / 100) - (station->m_samplePacketsCount + station->m_numSamplesDeferred / 2);
+
+  NS_LOG_DEBUG ("Decide sampling. Delta: " << delta << " lookAroundRatio: " <<  m_lookAroundRate);
 
-  /**
-   * if we are below the target of look around rate percentage, look around
-   * note: do it randomly by flipping a coin instead sampling
-   * all at once until it reaches the look around rate
-   */
-  if ( (((100 * station->m_sampleCount) / (station->m_sampleCount + station->m_packetCount )) < m_lookAroundRate)
-       && (coinFlip == 1) )
+  /* delta < 0: no sampling required */
+  if (delta >= 0)
     {
-      NS_LOG_DEBUG ("Using look around rate");
+      NS_LOG_DEBUG ("Search next sampling rate");
+      int ratesSupported = station->m_nModes;
+      if (delta > ratesSupported * 2)
+        {
+          /* From Linux implementation:
+           * With multi-rate retry, not every planned sample
+           * attempt actually gets used, due to the way the retry
+           * chain is set up - [max_tp,sample,prob,lowest] for
+           * sample_rate < max_tp.
+           *
+           * If there's too much sampling backlog and the link
+           * starts getting worse, minstrel would start bursting
+           * out lots of sampling frames, which would result
+           * in a large throughput loss. */
+          station->m_samplePacketsCount += (delta - ratesSupported * 2);
+        }
+
       //now go through the table and find an index rate
       idx = GetNextSample (station);
 
-      /**
-       * This if condition is used to make sure that we don't need to use
-       * the sample rate it is the same as our current rate
-       */
-      if (idx != station->m_maxTpRate && idx != station->m_txrate)
+      //error check
+      if (idx >= station->m_nModes)
         {
+          NS_LOG_DEBUG ("ALERT!!! ERROR");
+        }
+
+      //set the rate that we're currently sampling
+      station->m_sampleRate = idx;
 
-          //start sample count
-          station->m_sampleCount++;
+      /* From Linux implementation:
+       * Decide if direct ( 1st mrr stage) or indirect (2nd mrr stage)
+       * rate sampling method should be used.
+       * Respect such rates that are not sampled for 20 iterations.
+       */
+      if ((station->m_minstrelTable[idx].perfectTxTime > station->m_minstrelTable[station->m_maxTpRate].perfectTxTime)
+          && (station->m_minstrelTable[idx].numSamplesSkipped < 20))
+        {
+          // If the rate is slower and we have sample it enough, defer to second stage
+          station->m_sampleDeferred = true;
+          station->m_numSamplesDeferred++;
 
           //set flag that we are currently sampling
           station->m_isSampling = true;
-
-          //bookeeping for resetting stuff
-          if (station->m_packetCount >= 10000)
-            {
-              station->m_sampleCount = 0;
-              station->m_packetCount = 0;
-            }
-
-          //error check
-          if (idx >= m_nsupported)
+        }
+      else
+        {
+          // if samplieLimit is zero, then don't sample this rate
+          if (!station->m_minstrelTable[idx].sampleLimit)
             {
-              NS_LOG_DEBUG ("ALERT!!! ERROR");
+              idx =  station->m_maxTpRate;
+              station->m_isSampling = false;
             }
-
-          //set the rate that we're currently sampling
-          station->m_sampleRate = idx;
-
-          if (station->m_sampleRate == station->m_maxTpRate)
+          else
             {
-              station->m_sampleRate = station->m_maxTpRate2;
+              //set flag that we are currently sampling
+              station->m_isSampling = true;
+              if (station->m_minstrelTable[idx].sampleLimit > 0)
+                {
+                  station->m_minstrelTable[idx].sampleLimit--;
+                }
             }
+        }
 
-          //is this rate slower than the current best rate
-          station->m_sampleRateSlower =
-            (station->m_minstrelTable[idx].perfectTxTime > station->m_minstrelTable[station->m_maxTpRate].perfectTxTime);
-
-          //using the best rate instead
-          if (station->m_sampleRateSlower)
-            {
-              NS_LOG_DEBUG ("The next look around rate is slower than the maximum throughput rate, continue with the maximum throughput rate: " << station->m_maxTpRate << "(" << GetSupported (station, station->m_maxTpRate) << ")");
-              idx =  station->m_maxTpRate;
-            }
+      //using the best rate instead
+      if (station->m_sampleDeferred)
+        {
+          NS_LOG_DEBUG ("The next look around rate is slower than the maximum throughput rate, continue with the maximum throughput rate: " << station->m_maxTpRate << "(" << GetSupported (station, station->m_maxTpRate) << ")");
+          idx =  station->m_maxTpRate;
         }
     }
   //continue using the best rate
@@ -661,6 +511,7 @@
 void
 MinstrelWifiManager::UpdateStats (MinstrelWifiRemoteStation *station)
 {
+  NS_LOG_FUNCTION (this << station);
   if (Simulator::Now () <  station->m_nextStatsUpdate)
     {
       return;
@@ -679,7 +530,7 @@
   uint32_t tempProb;
 
   NS_LOG_DEBUG ("Index-Rate\t\tAttempt\tSuccess");
-  for (uint32_t i = 0; i < m_nsupported; i++)
+  for (uint32_t i = 0; i < station->m_nModes; i++)
     {
 
       //calculate the perfect tx time for this rate
@@ -698,6 +549,7 @@
       //if we've attempted something
       if (station->m_minstrelTable[i].numRateAttempt)
         {
+          station->m_minstrelTable[i].numSamplesSkipped = 0;
           /**
            * calculate the probability of success
            * assume probability scales from 0 to 18000
@@ -707,17 +559,32 @@
           //bookeeping
           station->m_minstrelTable[i].prob = tempProb;
 
-          //ewma probability (cast for gcc 3.4 compatibility)
-          tempProb = static_cast<uint32_t> (((tempProb * (100 - m_ewmaLevel)) + (station->m_minstrelTable[i].ewmaProb * m_ewmaLevel) ) / 100);
+          if (station->m_minstrelTable[i].successHist == 0)
+            {
+              station->m_minstrelTable[i].ewmaProb = tempProb;
+            }
+          else
+            {
+              //ewma probability (cast for gcc 3.4 compatibility)
+              tempProb = static_cast<uint32_t> (((tempProb * (100 - m_ewmaLevel)) + (station->m_minstrelTable[i].ewmaProb * m_ewmaLevel) ) / 100);
 
-          station->m_minstrelTable[i].ewmaProb = tempProb;
+              station->m_minstrelTable[i].ewmaProb = tempProb;
+            }
 
           //calculating throughput
           station->m_minstrelTable[i].throughput = tempProb * (1000000 / txTime.GetMicroSeconds ());
 
         }
+      else
+        {
+          station->m_minstrelTable[i].numSamplesSkipped++;
+        }
 
       //bookeeping
+      station->m_minstrelTable[i].successHist += station->m_minstrelTable[i].numRateSuccess;
+      station->m_minstrelTable[i].attemptHist += station->m_minstrelTable[i].numRateAttempt;
+      station->m_minstrelTable[i].prevNumRateSuccess = station->m_minstrelTable[i].numRateSuccess;
+      station->m_minstrelTable[i].prevNumRateAttempt = station->m_minstrelTable[i].numRateAttempt;
       station->m_minstrelTable[i].numRateSuccess = 0;
       station->m_minstrelTable[i].numRateAttempt = 0;
 
@@ -728,38 +595,37 @@
            * See: http://wireless.kernel.org/en/developers/Documentation/mac80211/RateControl/minstrel/
            *
            * Analysis of information showed that the system was sampling too hard at some rates.
-           * For those rates that never work (54mb, 500m range) there is no point in sending 10 sample packets (< 6 ms time).
-           * Consequently, for the very very low probability rates, we sample at most twice.
+           * For those rates that never work (54mb, 500m range) there is no point in retrying 10 sample packets (< 6 ms time).
+           * Consequently, for the very low probability rates, we try at most twice when fails and not sample more than 4 times.
            */
           if (station->m_minstrelTable[i].retryCount > 2)
             {
               station->m_minstrelTable[i].adjustedRetryCount = 2;
             }
-          else
-            {
-              station->m_minstrelTable[i].adjustedRetryCount = station->m_minstrelTable[i].retryCount;
-            }
+          station->m_minstrelTable[i].sampleLimit = 4;
         }
       else
         {
+          // no sampling limit.
+          station->m_minstrelTable[i].sampleLimit = -1;
           station->m_minstrelTable[i].adjustedRetryCount = station->m_minstrelTable[i].retryCount;
         }
 
-      //if it's 0 allow one retry limit
+      //if it's 0 allow two retries.
       if (station->m_minstrelTable[i].adjustedRetryCount == 0)
         {
-          station->m_minstrelTable[i].adjustedRetryCount = 1;
+          station->m_minstrelTable[i].adjustedRetryCount = 2;
         }
     }
 
   NS_LOG_DEBUG ("Attempt/success resetted to 0");
 
-  uint32_t max_prob = 0, index_max_prob = 0, max_tp = 0, index_max_tp = 0, index_max_tp2 = 0;
+  uint32_t max_tp = 0, index_max_tp = 0, index_max_tp2 = 0;
 
   //go find max throughput, second maximum throughput, high probability succ
   NS_LOG_DEBUG ("Finding the maximum throughput, second maximum throughput, and highest probability");
   NS_LOG_DEBUG ("Index-Rate\t\tT-put\tEWMA");
-  for (uint32_t i = 0; i < m_nsupported; i++)
+  for (uint32_t i = 0; i < station->m_nModes; i++)
     {
       NS_LOG_DEBUG (i << " " << GetSupported (station, i) <<
                     "\t" << station->m_minstrelTable[i].throughput <<
@@ -770,18 +636,11 @@
           index_max_tp = i;
           max_tp = station->m_minstrelTable[i].throughput;
         }
-
-      if (max_prob < station->m_minstrelTable[i].ewmaProb)
-        {
-          index_max_prob = i;
-          max_prob = station->m_minstrelTable[i].ewmaProb;
-        }
     }
 
-
   max_tp = 0;
   //find the second highest max
-  for (uint32_t i = 0; i < m_nsupported; i++)
+  for (uint32_t i = 0; i < station->m_nModes; i++)
     {
       if ((i != index_max_tp) && (max_tp < station->m_minstrelTable[i].throughput))
         {
@@ -790,6 +649,21 @@
         }
     }
 
+  uint32_t max_prob = 0, index_max_prob = 0;
+  for (uint32_t i = 0; i < station->m_nModes; i++)
+    {
+      if ((station->m_minstrelTable[i].ewmaProb >= 95 * 180) && (station->m_minstrelTable[i].throughput >= station->m_minstrelTable[index_max_prob].throughput))
+        {
+          index_max_prob = i;
+          max_prob = station->m_minstrelTable[i].ewmaProb;
+        }
+      else if (station->m_minstrelTable[i].ewmaProb >= max_prob)
+        {
+          index_max_prob = i;
+          max_prob = station->m_minstrelTable[i].ewmaProb;
+        }
+    }
+
   station->m_maxTpRate = index_max_tp;
   station->m_maxTpRate2 = index_max_tp2;
   station->m_maxProbRate = index_max_prob;
@@ -802,6 +676,215 @@
   NS_LOG_DEBUG ("max throughput=" << index_max_tp << "(" << GetSupported (station, index_max_tp) <<
                 ")\tsecond max throughput=" << index_max_tp2 << "(" << GetSupported (station, index_max_tp2) <<
                 ")\tmax prob=" << index_max_prob << "(" << GetSupported (station, index_max_prob) << ")");
+  if (m_printStats)
+    {
+      PrintTable (station);
+    }
+}
+
+void
+MinstrelWifiManager::DoReportRxOk (WifiRemoteStation *st,
+                                   double rxSnr, WifiMode txMode)
+{
+  NS_LOG_FUNCTION (this << st << rxSnr << txMode);
+}
+
+void
+MinstrelWifiManager::DoReportRtsFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
+  NS_LOG_DEBUG ("DoReportRtsFailed m_txrate=" << station->m_txrate);
+
+  station->m_shortRetry++;
+}
+
+void
+MinstrelWifiManager::DoReportRtsOk (WifiRemoteStation *st, double ctsSnr, WifiMode ctsMode, double rtsSnr)
+{
+  NS_LOG_FUNCTION (this << st);
+  NS_LOG_DEBUG ("self=" << st << " rts ok");
+}
+
+void
+MinstrelWifiManager::DoReportFinalRtsFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
+  UpdateRetry (station);
+}
+
+void
+MinstrelWifiManager::DoReportDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  UpdateRate (station);
+}
+
+void
+MinstrelWifiManager::DoReportDataOk (WifiRemoteStation *st,
+                                     double ackSnr, WifiMode ackMode, double dataSnr)
+{
+  NS_LOG_FUNCTION (st << ackSnr << ackMode << dataSnr);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
+
+  station->m_minstrelTable[station->m_txrate].numRateSuccess++;
+  station->m_minstrelTable[station->m_txrate].numRateAttempt++;
+
+  UpdatePacketCounters (station);
+
+  NS_LOG_DEBUG ("DoReportDataOk m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
+
+  UpdateRetry (station);
+  UpdateStats (station);
+
+  if (station->m_nModes >= 1)
+    {
+      station->m_txrate = FindRate (station);
+    }
+}
+
+void
+MinstrelWifiManager::DoReportFinalDataFailed (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return;
+    }
+
+  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (before update).");
+
+  UpdatePacketCounters (station);
+
+  UpdateRetry (station);
+  UpdateStats (station);
+
+  NS_LOG_DEBUG ("DoReportFinalDataFailed m_txrate = " << station->m_txrate << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess << " (after update).");
+
+  if (station->m_nModes >= 1)
+    {
+      station->m_txrate = FindRate (station);
+    }
+}
+
+void
+MinstrelWifiManager::UpdatePacketCounters (MinstrelWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+
+  station->m_totalPacketsCount++;
+  // If it is a sampling frame and the sampleRate was used, increase counter
+  if (station->m_isSampling && (!station->m_sampleDeferred || station->m_longRetry >= station->m_minstrelTable[station->m_maxTpRate].adjustedRetryCount))
+    {
+      station->m_samplePacketsCount++;
+    }
+
+  if (station->m_numSamplesDeferred > 0)
+    {
+      station->m_numSamplesDeferred--;
+    }
+
+  if (station->m_totalPacketsCount == ~0)
+    {
+      station->m_numSamplesDeferred = 0;
+      station->m_samplePacketsCount = 0;
+      station->m_totalPacketsCount = 0;
+    }
+  station->m_isSampling = false;
+  station->m_sampleDeferred = false;
+}
+
+void
+MinstrelWifiManager::UpdateRetry (MinstrelWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  station->m_retry = station->m_shortRetry + station->m_longRetry;
+  station->m_shortRetry = 0;
+  station->m_longRetry = 0;
+}
+
+WifiTxVector
+MinstrelWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+  return GetDataTxVector (station);
+}
+
+WifiTxVector
+MinstrelWifiManager::DoGetRtsTxVector (WifiRemoteStation *st)
+{
+  NS_LOG_FUNCTION (this << st);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *) st;
+  return GetRtsTxVector (station);
+}
+
+bool
+MinstrelWifiManager::DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally)
+{
+  NS_LOG_FUNCTION (this << st << packet << normally);
+  MinstrelWifiRemoteStation *station = (MinstrelWifiRemoteStation *)st;
+
+  CheckInit (station);
+  if (!station->m_initialized)
+    {
+      return normally;
+    }
+  if (station->m_longRetry > CountRetries (station))
+    {
+      return false;
+    }
+  else
+    {
+      return true;
+    }
+}
+
+bool
+MinstrelWifiManager::IsLowLatency (void) const
+{
+  NS_LOG_FUNCTION (this);
+  return true;
+}
+
+uint32_t
+MinstrelWifiManager::GetNextSample (MinstrelWifiRemoteStation *station)
+{
+  NS_LOG_FUNCTION (this << station);
+  uint32_t bitrate;
+  bitrate = station->m_sampleTable[station->m_index][station->m_col];
+  station->m_index++;
+
+  //bookeeping for m_index and m_col variables
+  if (station->m_index > (station->m_nModes - 2))
+    {
+      station->m_index = 0;
+      station->m_col++;
+      if (station->m_col >= m_sampleCol)
+        {
+          station->m_col = 0;
+        }
+    }
+  return bitrate;
 }
 
 void
@@ -809,11 +892,16 @@
 {
   NS_LOG_FUNCTION (station);
 
-  for (uint32_t i = 0; i < m_nsupported; i++)
+  for (uint32_t i = 0; i < station->m_nModes; i++)
     {
       NS_LOG_DEBUG ("Initializing rate index " << i << " " << GetSupported (station, i));
       station->m_minstrelTable[i].numRateAttempt = 0;
       station->m_minstrelTable[i].numRateSuccess = 0;
+      station->m_minstrelTable[i].prevNumRateSuccess = 0;
+      station->m_minstrelTable[i].prevNumRateAttempt = 0;
+      station->m_minstrelTable[i].successHist = 0;
+      station->m_minstrelTable[i].attemptHist = 0;
+      station->m_minstrelTable[i].numSamplesSkipped = 0;
       station->m_minstrelTable[i].prob = 0;
       station->m_minstrelTable[i].ewmaProb = 0;
       station->m_minstrelTable[i].throughput = 0;
@@ -835,10 +923,12 @@
             {
               break;
             }
+          station->m_minstrelTable[i].sampleLimit = -1;
           station->m_minstrelTable[i].retryCount = retries;
           station->m_minstrelTable[i].adjustedRetryCount = retries;
         }
     }
+  UpdateStats (station);
 }
 
 Time
@@ -874,8 +964,8 @@
 
   station->m_col = station->m_index = 0;
 
-  //for off-seting to make rates fall between 0 and numrates
-  uint32_t numSampleRates = m_nsupported;
+  //for off-setting to make rates fall between 0 and nModes
+  uint32_t numSampleRates = station->m_nModes;
 
   uint32_t newIndex;
   for (uint32_t col = 0; col < m_sampleCol; col++)
@@ -889,10 +979,10 @@
           int uv = m_uniformRandomVariable->GetInteger (0, numSampleRates);
           newIndex = (i + uv) % numSampleRates;
 
-          //this loop is used for filling in other uninitilized places
+          //this loop is used for filling in other uninitialized places
           while (station->m_sampleTable[newIndex][col] != 0)
             {
-              newIndex = (newIndex + 1) % m_nsupported;
+              newIndex = (newIndex + 1) % station->m_nModes;
             }
           station->m_sampleTable[newIndex][col] = i;
         }
@@ -904,7 +994,7 @@
 {
   NS_LOG_DEBUG ("PrintSampleTable=" << station);
 
-  uint32_t numSampleRates = m_nsupported;
+  uint32_t numSampleRates = station->m_nModes;
   std::stringstream table;
   for (uint32_t i = 0; i < numSampleRates; i++)
     {
@@ -920,12 +1010,65 @@
 void
 MinstrelWifiManager::PrintTable (MinstrelWifiRemoteStation *station)
 {
+  NS_LOG_FUNCTION (this << station);
   NS_LOG_DEBUG ("PrintTable=" << station);
 
-  for (uint32_t i = 0; i < m_nsupported; i++)
+  station->m_statsFile << "best   _______________rate________________    ________statistics________    ________last_______    ______sum-of________\n" <<
+    "rate  [      name       idx airtime max_tp]  [avg(tp) avg(prob) sd(prob)]  [prob.|retry|suc|att]  [#success | #attempts]\n";
+
+  uint32_t maxTpRate = station->m_maxTpRate;
+  uint32_t maxTpRate2 = station->m_maxTpRate2;
+  uint32_t maxProbRate = station->m_maxProbRate;
+
+  for (uint32_t i = 0; i < station->m_nModes; i++)
     {
-      NS_LOG_DEBUG (i << " (" << GetSupported (station, i) << "): "  << station->m_minstrelTable[i].perfectTxTime << ", retryCount = " << station->m_minstrelTable[i].retryCount << ", adjustedRetryCount = " << station->m_minstrelTable[i].adjustedRetryCount);
+      RateInfo rate = station->m_minstrelTable[i];
+
+      if (i == maxTpRate)
+        {
+          station->m_statsFile << 'A';
+        }
+      else
+        {
+          station->m_statsFile << ' ';
+        }
+      if (i == maxTpRate2)
+        {
+          station->m_statsFile << 'B';
+        }
+      else
+        {
+          station->m_statsFile << ' ';
+        }
+      if (i == maxProbRate)
+        {
+          station->m_statsFile << 'P';
+        }
+      else
+        {
+          station->m_statsFile << ' ';
+        }
+
+      float tmpTh = rate.throughput / 100000.0;
+      station->m_statsFile << "   " <<
+        std::setw (17) << GetSupported (station, i) << "  " <<
+        std::setw (2) << i << "  " <<
+        std::setw (4) << rate.perfectTxTime.GetMicroSeconds () <<
+        std::setw (8) << "    -----    " <<
+        std::setw (8) << tmpTh << "    " <<
+        std::setw (3) << rate.ewmaProb / 180 <<
+        std::setw (3) << "       ---      " <<
+        std::setw (3) << rate.prob / 180 << "     " <<
+        std::setw (1) << rate.adjustedRetryCount << "   " <<
+        std::setw (3) << rate.prevNumRateSuccess << " " <<
+        std::setw (3) << rate.prevNumRateAttempt << "   " <<
+        std::setw (9) << rate.successHist << "   " <<
+        std::setw (9) << rate.attemptHist << "\n";
     }
+  station->m_statsFile << "\nTotal packet count:    ideal " << station->m_totalPacketsCount - station->m_samplePacketsCount
+                       << "      lookaround " << station->m_samplePacketsCount << "\n\n";
+
+  station->m_statsFile.flush ();
 }
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/minstrel-wifi-manager.h ns-3.25/src/wifi/model/minstrel-wifi-manager.h
--- ns-3.24.1/src/wifi/model/minstrel-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/minstrel-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -16,6 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Duy Nguyen <duy@soe.ucsc.edu>
+ *         Matías Richart <mrichart@fing.edu.uy>
  */
 
 #ifndef MINSTREL_WIFI_MANAGER_H
@@ -25,11 +26,10 @@
 #include "wifi-mode.h"
 #include "ns3/nstime.h"
 #include "ns3/random-variable-stream.h"
+#include <fstream>
 
 namespace ns3 {
 
-struct MinstrelWifiRemoteStation;
-
 /**
  * A struct to contain all information related to a data rate
  */
@@ -46,14 +46,20 @@
   uint32_t numRateAttempt;      ///< how many number of attempts so far
   uint32_t numRateSuccess;      ///< number of successful pkts
   uint32_t prob;                ///< (# pkts success )/(# total pkts)
-
   /**
    * EWMA calculation
    * ewma_prob =[prob *(100 - ewma_level) + (ewma_prob_old * ewma_level)]/100
    */
   uint32_t ewmaProb;
-
   uint32_t throughput;  ///< throughput of a rate
+
+  uint32_t prevNumRateAttempt;  //!< Number of transmission attempts with previous rate.
+  uint32_t prevNumRateSuccess;  //!< Number of successful frames transmitted with previous rate.
+  uint64_t successHist;         //!< Aggregate of all transmission successes.
+  uint64_t attemptHist;         //!< Aggregate of all transmission attempts.
+
+  uint8_t numSamplesSkipped;
+  int sampleLimit;
 };
 
 /**
@@ -67,14 +73,82 @@
  */
 typedef std::vector<std::vector<uint32_t> > SampleRate;
 
+/**
+ * \brief hold per-remote-station state for Minstrel Wifi manager.
+ *
+ * This struct extends from WifiRemoteStation struct to hold additional
+ * information required by the Minstrel Wifi manager
+ */
+struct MinstrelWifiRemoteStation : public WifiRemoteStation
+{
+  Time m_nextStatsUpdate;  ///< 10 times every second
+
+  /**
+   * To keep track of the current position in the our random sample table
+   * going row by row from 1st column until the 10th column(Minstrel defines 10)
+   * then we wrap back to the row 1 col 1.
+   * note: there are many other ways to do this.
+   */
+  uint32_t m_col, m_index;
+  uint32_t m_maxTpRate;          ///< the current throughput rate
+  uint32_t m_maxTpRate2;         ///< second highest throughput rate
+  uint32_t m_maxProbRate;        ///< rate with highest prob of success
+  uint32_t m_nModes;             ///< number of modes supported
+  int m_totalPacketsCount;             ///< total number of packets as of now
+  int m_samplePacketsCount;             ///< how many packets we have sample so far
+  int m_numSamplesDeferred;
+  bool m_isSampling;             ///< a flag to indicate we are currently sampling
+  uint32_t m_sampleRate;         ///< current sample rate
+  bool  m_sampleDeferred;        ///< a flag to indicate sample rate is on the second stage
+  uint32_t m_shortRetry;         ///< short retries such as control packts
+  uint32_t m_longRetry;          ///< long retries such as data packets
+  uint32_t m_retry;              ///< total retries short + long
+  uint32_t m_txrate;             ///< current transmit rate
+  bool m_initialized;            ///< for initializing tables
+  MinstrelRate m_minstrelTable;  ///< minstrel table
+  SampleRate m_sampleTable;      ///< sample table
+  std::ofstream m_statsFile;
+};
+
 
 /**
- * \author Duy Nguyen
  * \brief Implementation of Minstrel Rate Control Algorithm
  * \ingroup wifi
  *
- * Porting Minstrel from Madwifi and Linux Kernel
- * http://linuxwireless.org/en/developers/Documentation/mac80211/RateControl/minstrel
+ * Minstrel is a rate control algorithm implemented in MadWifi and Linux.
+ * The basic principle is to probe the environment and adapt the rate
+ * based on statistics collected on the probability of successful 
+ * transmission.  The algorithm adapts the rate to the highest rate
+ * that it considers successful, and spends a fraction of its time
+ * doing 'look around' by trying other rates.
+ *
+ * Minstrel is appropriate for non-HT/VHT configurations; for HT/VHT
+ * (i.e. 802.11n/ac), users should use MinstrelHtWifiManager instead.
+ *
+ * Some notes on this implementation follow.  The implementation has
+ * been adapted to bring it closer to the Linux implementation.
+ * For each rate, a new parameter samplesSkipped is added. This parameter 
+ * is intended to solve an issue regarding the sampling of low rates when 
+ * a high rate is working well, which leads to outdated statistics. 
+ * This change makes throughput a bit lower in simple, stable scenarios,
+ * but may help in dynamic scenarios to react faster and more accurately 
+ * to changes.
+ * 
+ * Related to the previous, the logic for deciding when to sample random
+ * rates is as follows.  When a sample rate is deffered to the second MRR 
+ * chain stage, a new parameter (numSamplesDeferred) is increased. This 
+ * paramters is used (jointly with sampleCount) to compare current 
+ * sample count with the lookaround rate.
+ * 
+ * Also related with sampling, another parameter sampleLimit is added.
+ * This parameter limits the number of times a very low or very high 
+ * probability rate is sampled, avoiding to try a poorly working sample 
+ * rate too often.
+ *
+ * When updating the EWMA probability of a rate for the first time, it does
+ * not apply EWMA but instead assigns the entire probability. 
+ * Since the EWMA probability is initialized to zero, this generates 
+ * a more accurate EWMA.
  */
 class MinstrelWifiManager : public WifiRemoteStationManager
 {
@@ -84,7 +158,9 @@
   MinstrelWifiManager ();
   virtual ~MinstrelWifiManager ();
 
+  // Inherited from WifiRemoteStationManager
   virtual void SetupPhy (Ptr<WifiPhy> phy);
+  virtual void SetupMac (Ptr<WifiMac> mac);
 
   /**
    * Assign a fixed random variable stream number to the random variables
@@ -97,6 +173,29 @@
    */
   int64_t AssignStreams (int64_t stream);
 
+  void UpdateRate (MinstrelWifiRemoteStation *station);
+
+  //updating the Minstrel Table every 1/10 seconds
+  void UpdateStats (MinstrelWifiRemoteStation *station);
+
+  //find a rate to use from Minstrel Table
+  uint32_t FindRate (MinstrelWifiRemoteStation *station);
+
+  WifiTxVector GetDataTxVector (MinstrelWifiRemoteStation *station);
+
+  WifiTxVector GetRtsTxVector (MinstrelWifiRemoteStation *station);
+
+  uint32_t CountRetries (MinstrelWifiRemoteStation *station);
+
+  void UpdatePacketCounters (MinstrelWifiRemoteStation *station);
+
+  //update the number of retries and reset accordingly
+  void UpdateRetry (MinstrelWifiRemoteStation *station);
+
+  void CheckInit (MinstrelWifiRemoteStation *station);  ///< check for initializations
+
+  //initialize Sample Table
+  void InitSampleTable (MinstrelWifiRemoteStation *station);
 
 private:
   //overriden from base class
@@ -111,7 +210,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
 
   virtual bool DoNeedDataRetransmission (WifiRemoteStation *st, Ptr<const Packet> packet, bool normally);
@@ -128,21 +227,12 @@
    */
   void AddCalcTxTime (WifiMode mode, Time t);
 
-  //update the number of retries and reset accordingly
-  void UpdateRetry (MinstrelWifiRemoteStation *station);
+  //initialize Minstrel Table
+  void RateInit (MinstrelWifiRemoteStation *station);
 
   //getting the next sample from Sample Table
   uint32_t GetNextSample (MinstrelWifiRemoteStation *station);
 
-  //find a rate to use from Minstrel Table
-  uint32_t FindRate (MinstrelWifiRemoteStation *station);
-
-  //updating the Minstrel Table every 1/10 seconds
-  void UpdateStats (MinstrelWifiRemoteStation *station);
-
-  //initialize Minstrel Table
-  void RateInit (MinstrelWifiRemoteStation *station);
-
   /**
    * Estimate the time to transmit the given packet with the given number of retries.
    * This function is "roughly" the function "calc_usecs_unicast_packet" in minstrel.c
@@ -161,16 +251,12 @@
    */
   Time CalculateTimeUnicastPacket (Time dataTransmissionTime, uint32_t shortRetries, uint32_t longRetries);
 
-  //initialize Sample Table
-  void InitSampleTable (MinstrelWifiRemoteStation *station);
-
   //printing Sample Table
   void PrintSampleTable (MinstrelWifiRemoteStation *station);
 
   //printing Minstrel Table
   void PrintTable (MinstrelWifiRemoteStation *station);
 
-  void CheckInit (MinstrelWifiRemoteStation *station);  ///< check for initializations
 
   /**
    * typedef for a vector of a pair of Time, WifiMode.
@@ -185,7 +271,7 @@
   double m_ewmaLevel;       ///< exponential weighted moving average
   uint32_t m_sampleCol;     ///< number of sample columns
   uint32_t m_pktLen;        ///< packet length used for calculate mode TxTime
-  uint32_t m_nsupported;    ///< modes supported
+  bool m_printStats;        ///< If statistics table should be printed.
 
   //Provides uniform random variables.
   Ptr<UniformRandomVariable> m_uniformRandomVariable;
diff -Naur ns-3.24.1/src/wifi/model/mpdu-aggregator.h ns-3.25/src/wifi/model/mpdu-aggregator.h
--- ns-3.24.1/src/wifi/model/mpdu-aggregator.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mpdu-aggregator.h	2016-03-23 21:36:53.000000000 -0700
@@ -48,6 +48,9 @@
   typedef std::list<std::pair<Ptr<Packet>, AmpduSubframeHeader> >::const_iterator DeaggregatedMpdusCI;
 
   static TypeId GetTypeId (void);
+
+  virtual void SetMaxAmpduSize (uint32_t maxSize) = 0;
+  virtual uint32_t GetMaxAmpduSize (void) const = 0;
   /**
    * \param packet Packet we have to insert into <i>aggregatedPacket</i>.
    * \param aggregatedPacket Packet that will contain <i>packet</i>, if aggregation is possible.
diff -Naur ns-3.24.1/src/wifi/model/mpdu-standard-aggregator.cc ns-3.25/src/wifi/model/mpdu-standard-aggregator.cc
--- ns-3.24.1/src/wifi/model/mpdu-standard-aggregator.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mpdu-standard-aggregator.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,7 @@
     .SetParent<MpduAggregator> ()
     .SetGroupName ("Wifi")
     .AddConstructor<MpduStandardAggregator> ()
-    .AddAttribute ("MaxAmpduSize", "Max length in bytes of an A-MPDU",
+    .AddAttribute ("MaxAmpduSize", "Max length in bytes of an A-MPDU (Deprecated!)",
                    UintegerValue (65535),
                    MakeUintegerAccessor (&MpduStandardAggregator::m_maxAmpduLength),
                    MakeUintegerChecker<uint32_t> ())
@@ -52,6 +52,18 @@
 {
 }
 
+void
+MpduStandardAggregator::SetMaxAmpduSize (uint32_t maxSize)
+{
+  m_maxAmpduLength = maxSize;
+}
+
+uint32_t
+MpduStandardAggregator::GetMaxAmpduSize (void) const
+{
+  return m_maxAmpduLength;
+}
+
 bool
 MpduStandardAggregator::Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket)
 {
diff -Naur ns-3.24.1/src/wifi/model/mpdu-standard-aggregator.h ns-3.25/src/wifi/model/mpdu-standard-aggregator.h
--- ns-3.24.1/src/wifi/model/mpdu-standard-aggregator.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/mpdu-standard-aggregator.h	2016-03-23 21:36:53.000000000 -0700
@@ -36,6 +36,9 @@
   static TypeId GetTypeId (void);
   MpduStandardAggregator ();
   ~MpduStandardAggregator ();
+
+  virtual void SetMaxAmpduSize (uint32_t maxSize);
+  virtual uint32_t GetMaxAmpduSize (void) const;
   /**
    * \param packet packet we have to insert into <i>aggregatedPacket</i>.
    * \param aggregatedPacket packet that will contain <i>packet</i>, if aggregation is possible.
diff -Naur ns-3.24.1/src/wifi/model/msdu-aggregator.h ns-3.25/src/wifi/model/msdu-aggregator.h
--- ns-3.24.1/src/wifi/model/msdu-aggregator.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/msdu-aggregator.h	2016-03-23 21:36:53.000000000 -0700
@@ -42,6 +42,10 @@
   typedef std::list<std::pair<Ptr<Packet>, AmsduSubframeHeader> >::const_iterator DeaggregatedMsdusCI;
 
   static TypeId GetTypeId (void);
+
+  virtual void SetMaxAmsduSize (uint32_t maxSize) = 0;
+  virtual uint32_t GetMaxAmsduSize (void) const = 0;
+
   /* Adds <i>packet</i> to <i>aggregatedPacket</i>. In concrete aggregator's implementation is
    * specified how and if <i>packet</i> can be added to <i>aggregatedPacket</i>. If <i>packet</i>
    * can be added returns true, false otherwise.
diff -Naur ns-3.24.1/src/wifi/model/msdu-standard-aggregator.cc ns-3.25/src/wifi/model/msdu-standard-aggregator.cc
--- ns-3.24.1/src/wifi/model/msdu-standard-aggregator.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/msdu-standard-aggregator.cc	2016-03-23 21:36:53.000000000 -0700
@@ -36,7 +36,7 @@
     .SetParent<MsduAggregator> ()
     .SetGroupName ("Wifi")
     .AddConstructor<MsduStandardAggregator> ()
-    .AddAttribute ("MaxAmsduSize", "Max length in byte of an A-MSDU",
+    .AddAttribute ("MaxAmsduSize", "Max length in byte of an A-MSDU (Deprecated!)",
                    UintegerValue (7935),
                    MakeUintegerAccessor (&MsduStandardAggregator::m_maxAmsduLength),
                    MakeUintegerChecker<uint32_t> ())
@@ -52,6 +52,18 @@
 {
 }
 
+void
+MsduStandardAggregator::SetMaxAmsduSize (uint32_t maxSize)
+{
+  m_maxAmsduLength = maxSize;
+}
+
+uint32_t
+MsduStandardAggregator::GetMaxAmsduSize (void) const
+{
+  return m_maxAmsduLength;
+}
+
 bool
 MsduStandardAggregator::Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket,
                                    Mac48Address src, Mac48Address dest)
diff -Naur ns-3.24.1/src/wifi/model/msdu-standard-aggregator.h ns-3.25/src/wifi/model/msdu-standard-aggregator.h
--- ns-3.24.1/src/wifi/model/msdu-standard-aggregator.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/msdu-standard-aggregator.h	2016-03-23 21:36:53.000000000 -0700
@@ -36,6 +36,9 @@
   static TypeId GetTypeId (void);
   MsduStandardAggregator ();
   ~MsduStandardAggregator ();
+
+  virtual void SetMaxAmsduSize (uint32_t maxSize);
+  virtual uint32_t GetMaxAmsduSize (void) const;
   /**
    * \param packet Packet we have to insert into <i>aggregatedPacket</i>.
    * \param aggregatedPacket Packet that will contain <i>packet</i>, if aggregation is possible,
diff -Naur ns-3.24.1/src/wifi/model/nist-error-rate-model.cc ns-3.25/src/wifi/model/nist-error-rate-model.cc
--- ns-3.24.1/src/wifi/model/nist-error-rate-model.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/nist-error-rate-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -48,6 +48,7 @@
 double
 NistErrorRateModel::GetBpskBer (double snr) const
 {
+  NS_LOG_FUNCTION (this << snr);
   double z = std::sqrt (snr);
   double ber = 0.5 * erfc (z);
   NS_LOG_INFO ("bpsk snr=" << snr << " ber=" << ber);
@@ -57,6 +58,7 @@
 double
 NistErrorRateModel::GetQpskBer (double snr) const
 {
+  NS_LOG_FUNCTION (this << snr);
   double z = std::sqrt (snr / 2.0);
   double ber = 0.5 * erfc (z);
   NS_LOG_INFO ("qpsk snr=" << snr << " ber=" << ber);
@@ -66,6 +68,7 @@
 double
 NistErrorRateModel::Get16QamBer (double snr) const
 {
+  NS_LOG_FUNCTION (this << snr);
   double z = std::sqrt (snr / (5.0 * 2.0));
   double ber = 0.75 * 0.5 * erfc (z);
   NS_LOG_INFO ("16-Qam" << " snr=" << snr << " ber=" << ber);
@@ -75,6 +78,7 @@
 double
 NistErrorRateModel::Get64QamBer (double snr) const
 {
+  NS_LOG_FUNCTION (this << snr);
   double z = std::sqrt (snr / (21.0 * 2.0));
   double ber = 7.0 / 12.0 * 0.5 * erfc (z);
   NS_LOG_INFO ("64-Qam" << " snr=" << snr << " ber=" << ber);
@@ -83,6 +87,7 @@
 double
 NistErrorRateModel::Get256QamBer (double snr) const
 {
+  NS_LOG_FUNCTION (this << snr);
   double z = std::sqrt (snr / (85.0 * 2.0));
   double ber = 15.0 / 32.0 * 0.5 * erfc (z);
   NS_LOG_INFO ("256-Qam" << " snr=" << snr << " ber=" << ber);
@@ -93,6 +98,7 @@
 NistErrorRateModel::GetFecBpskBer (double snr, uint32_t nbits,
                                    uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << bValue);
   double ber = GetBpskBer (snr);
   if (ber == 0.0)
     {
@@ -108,6 +114,7 @@
 NistErrorRateModel::GetFecQpskBer (double snr, uint32_t nbits,
                                    uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << bValue);
   double ber = GetQpskBer (snr);
   if (ber == 0.0)
     {
@@ -122,6 +129,7 @@
 double
 NistErrorRateModel::CalculatePe (double p, uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << p << bValue);
   double D = std::sqrt (4.0 * p * (1.0 - p));
   double pe = 1.0;
   if (bValue == 1)
@@ -194,6 +202,7 @@
 NistErrorRateModel::GetFec16QamBer (double snr, uint32_t nbits,
                                     uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << bValue);
   double ber = Get16QamBer (snr);
   if (ber == 0.0)
     {
@@ -209,6 +218,7 @@
 NistErrorRateModel::GetFec64QamBer (double snr, uint32_t nbits,
                                     uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << bValue);
   double ber = Get64QamBer (snr);
   if (ber == 0.0)
     {
@@ -224,6 +234,7 @@
 NistErrorRateModel::GetFec256QamBer (double snr, uint32_t nbits,
                                      uint32_t bValue) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << bValue);
   double ber = Get256QamBer (snr);
   if (ber == 0.0)
     {
@@ -238,14 +249,15 @@
 double
 NistErrorRateModel::GetChunkSuccessRate (WifiMode mode, WifiTxVector txVector, double snr, uint32_t nbits) const
 {
+  NS_LOG_FUNCTION (this << mode << txVector.GetMode () << snr << nbits);
   if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM
       || mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM
       || mode.GetModulationClass () == WIFI_MOD_CLASS_HT
       || mode.GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
-      if (mode.GetConstellationSize (1) == 2)
+      if (mode.GetConstellationSize () == 2)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFecBpskBer (snr,
                                     nbits,
@@ -258,9 +270,9 @@
                                     3); //b value
             }
         }
-      else if (mode.GetConstellationSize (1) == 4)
+      else if (mode.GetConstellationSize () == 4)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFecQpskBer (snr,
                                     nbits,
@@ -273,9 +285,9 @@
                                     3); //b value
             }
         }
-      else if (mode.GetConstellationSize (1) == 16)
+      else if (mode.GetConstellationSize () == 16)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFec16QamBer (snr,
                                      nbits,
@@ -288,15 +300,15 @@
                                      3); //b value
             }
         }
-      else if (mode.GetConstellationSize (1) == 64)
+      else if (mode.GetConstellationSize () == 64)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_2_3)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_2_3)
             {
               return GetFec64QamBer (snr,
                                      nbits,
                                      2); //b value
             }
-          else if (mode.GetCodeRate (1) == WIFI_CODE_RATE_5_6)
+          else if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
             {
               return GetFec64QamBer (snr,
                                      nbits,
@@ -309,9 +321,9 @@
                                      3); //b value
             }
         }
-      else if (mode.GetConstellationSize (1) == 256)
+      else if (mode.GetConstellationSize () == 256)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_5_6)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
             {
               return GetFec256QamBer (snr,
                                       nbits,
diff -Naur ns-3.24.1/src/wifi/model/nist-error-rate-model.h ns-3.25/src/wifi/model/nist-error-rate-model.h
--- ns-3.24.1/src/wifi/model/nist-error-rate-model.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/nist-error-rate-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -59,7 +59,7 @@
   /**
    * Return BER of BPSK at the given SNR.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    *
    * \return BER of BPSK at the given SNR
    */
@@ -67,7 +67,7 @@
   /**
    * Return BER of QPSK at the given SNR.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    *
    * \return BER of QPSK at the given SNR
    */
@@ -75,7 +75,7 @@
   /**
    * Return BER of QAM16 at the given SNR.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    *
    * \return BER of QAM16 at the given SNR
    */
@@ -83,7 +83,7 @@
   /**
    * Return BER of QAM64 at the given SNR.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    *
    * \return BER of QAM64 at the given SNR
    */
@@ -91,14 +91,14 @@
   /**
    * Return BER of QAM256 at the given SNR.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \return BER of QAM256 at the given SNR
    */
   double Get256QamBer (double snr) const;
   /**
    * Return BER of BPSK at the given SNR after applying FEC.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \param nbits the number of bits in the chunk
    * \param bValue
    *
@@ -109,7 +109,7 @@
   /**
    * Return BER of QPSK at the given SNR after applying FEC.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \param nbits the number of bits in the chunk
    * \param bValue
    *
@@ -120,7 +120,7 @@
   /**
    * Return BER of QAM16 at the given SNR after applying FEC.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \param nbits the number of bits in the chunk
    * \param bValue
    *
@@ -131,7 +131,7 @@
   /**
    * Return BER of QAM64 at the given SNR after applying FEC.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \param nbits the number of bits in the chunk
    * \param bValue
    *
@@ -142,7 +142,7 @@
   /**
    * Return BER of QAM256 at the given SNR after applying FEC.
    *
-   * \param snr snr value
+   * \param snr snr ratio (not dB)
    * \param nbits the number of bits in the chunk
    * \param bValue
    * \return BER of QAM256 at the given SNR after applying FEC
diff -Naur ns-3.24.1/src/wifi/model/onoe-wifi-manager.cc ns-3.25/src/wifi/model/onoe-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/onoe-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/onoe-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -234,8 +234,7 @@
 }
 
 WifiTxVector
-OnoeWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
-                                    uint32_t size)
+OnoeWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
   OnoeWifiRemoteStation *station = (OnoeWifiRemoteStation *)st;
   UpdateMode (station);
@@ -298,8 +297,16 @@
       channelWidth = 20;
     }
   UpdateMode (station);
-  /// \todo can we implement something smarter ?
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/onoe-wifi-manager.h ns-3.25/src/wifi/model/onoe-wifi-manager.h
--- ns-3.24.1/src/wifi/model/onoe-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/onoe-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -60,7 +60,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/parf-wifi-manager.cc ns-3.25/src/wifi/model/parf-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/parf-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/parf-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -290,9 +290,9 @@
 }
 
 WifiTxVector
-ParfWifiManager::DoGetDataTxVector (WifiRemoteStation *st, uint32_t size)
+ParfWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
-  NS_LOG_FUNCTION (this << st << size);
+  NS_LOG_FUNCTION (this << st);
   ParfWifiRemoteStation *station = (ParfWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
   if (channelWidth > 20 && channelWidth != 22)
@@ -317,7 +317,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (station, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (station), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
diff -Naur ns-3.24.1/src/wifi/model/parf-wifi-manager.h ns-3.25/src/wifi/model/parf-wifi-manager.h
--- ns-3.24.1/src/wifi/model/parf-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/parf-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -64,7 +64,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool IsLowLatency (void) const;
 
diff -Naur ns-3.24.1/src/wifi/model/regular-wifi-mac.cc ns-3.25/src/wifi/model/regular-wifi-mac.cc
--- ns-3.24.1/src/wifi/model/regular-wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/regular-wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -30,7 +30,8 @@
 #include "dcf.h"
 #include "dcf-manager.h"
 #include "wifi-phy.h"
-#include "msdu-aggregator.h"
+#include "msdu-standard-aggregator.h"
+#include "mpdu-standard-aggregator.h"
 
 namespace ns3 {
 
@@ -38,7 +39,10 @@
 
 NS_OBJECT_ENSURE_REGISTERED (RegularWifiMac);
 
-RegularWifiMac::RegularWifiMac ()
+RegularWifiMac::RegularWifiMac () :
+  m_htSupported (0),
+  m_vhtSupported (0),
+  m_erpSupported (0)
 {
   NS_LOG_FUNCTION (this);
   m_rxMiddle = new MacRxMiddle ();
@@ -136,6 +140,208 @@
   return m_stationManager;
 }
 
+HtCapabilities
+RegularWifiMac::GetHtCapabilities (void) const
+{
+  HtCapabilities capabilities;
+  capabilities.SetHtSupported (1);
+  if (m_htSupported)
+    {
+      capabilities.SetLdpc (m_phy->GetLdpc ());
+      capabilities.SetSupportedChannelWidth (m_phy->GetChannelWidth () == 40);
+      capabilities.SetShortGuardInterval20 (m_phy->GetGuardInterval ());
+      capabilities.SetShortGuardInterval40 (m_phy->GetChannelWidth () == 40 && m_phy->GetGuardInterval ());
+      capabilities.SetGreenfield (m_phy->GetGreenfield ());
+      capabilities.SetMaxAmsduLength (1); //hardcoded for now (TBD)
+      capabilities.SetLSigProtectionSupport (!m_phy->GetGreenfield ());
+      capabilities.SetMaxAmpduLength (3); //hardcoded for now (TBD)
+      uint64_t maxSupportedRate = 0; //in bit/s
+      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
+        {
+          WifiMode mcs = m_phy->GetMcs (i);
+          if (mcs.GetModulationClass () != WIFI_MOD_CLASS_HT)
+            {
+              continue;
+            }
+          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
+          uint8_t nss = (mcs.GetMcsValue () / 8) + 1;
+          NS_ASSERT (nss > 0 && nss < 5);
+          if (mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss) > maxSupportedRate)
+            {
+              maxSupportedRate = mcs.GetDataRate (m_phy->GetChannelWidth (), m_phy->GetGuardInterval (), nss);
+              NS_LOG_DEBUG ("Updating maxSupportedRate to " << maxSupportedRate);
+            }
+        }
+      capabilities.SetRxHighestSupportedDataRate (maxSupportedRate / 1e6); //in Mbit/s
+      capabilities.SetTxMcsSetDefined (m_phy->GetNMcs () > 0);
+      capabilities.SetTxMaxNSpatialStreams (m_phy->GetSupportedTxSpatialStreams ());
+    }
+  return capabilities;
+}
+
+VhtCapabilities
+RegularWifiMac::GetVhtCapabilities (void) const
+{
+  VhtCapabilities capabilities;
+  capabilities.SetVhtSupported (1);
+  if (m_vhtSupported)
+    {
+      if (m_phy->GetChannelWidth () == 160)
+        {
+          capabilities.SetSupportedChannelWidthSet (1);
+        }
+      else
+        {
+          capabilities.SetSupportedChannelWidthSet (0);
+        }
+      capabilities.SetMaxMpduLength (2); //hardcoded for now (TBD)
+      capabilities.SetRxLdpc (m_phy->GetLdpc ());
+      capabilities.SetShortGuardIntervalFor80Mhz ((m_phy->GetChannelWidth () == 80) && m_phy->GetGuardInterval ());
+      capabilities.SetShortGuardIntervalFor160Mhz ((m_phy->GetChannelWidth () == 160) && m_phy->GetGuardInterval ());
+      capabilities.SetMaxAmpduLengthExponent (7); //hardcoded for now (TBD)
+      uint8_t maxMcs = 0;
+      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
+        {
+          WifiMode mcs = m_phy->GetMcs (i);
+          if ((mcs.GetModulationClass () == WIFI_MOD_CLASS_VHT)
+              && (mcs.GetMcsValue () > maxMcs))
+            {
+              maxMcs = mcs.GetMcsValue ();
+            }
+        }
+      // Support same MaxMCS for each spatial stream
+      for (uint8_t nss = 1; nss <= m_phy->GetSupportedRxSpatialStreams (); nss++)
+        {
+          capabilities.SetRxMcsMap (maxMcs, nss);
+        }
+      for (uint8_t nss = 1; nss <= m_phy->GetSupportedTxSpatialStreams (); nss++)
+        {
+          capabilities.SetTxMcsMap (maxMcs, nss);
+        }
+    }
+  return capabilities;
+}
+
+void
+RegularWifiMac::SetVoMaxAmsduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_voMaxAmsduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetViMaxAmsduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_viMaxAmsduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetBeMaxAmsduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_beMaxAmsduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetBkMaxAmsduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_bkMaxAmsduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetVoMaxAmpduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_voMaxAmpduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetViMaxAmpduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_viMaxAmpduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetBeMaxAmpduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_beMaxAmpduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetBkMaxAmpduSize (uint32_t size)
+{
+  NS_LOG_FUNCTION (this << size);
+  m_bkMaxAmpduSize = size;
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::SetVoBlockAckThreshold (uint8_t threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  GetVOQueue ()->SetBlockAckThreshold (threshold);
+}
+
+void
+RegularWifiMac::SetViBlockAckThreshold (uint8_t threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  GetVIQueue ()->SetBlockAckThreshold (threshold);
+}
+
+void
+RegularWifiMac::SetBeBlockAckThreshold (uint8_t threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  GetBEQueue ()->SetBlockAckThreshold (threshold);
+}
+
+void
+RegularWifiMac::SetBkBlockAckThreshold (uint8_t threshold)
+{
+  NS_LOG_FUNCTION (this << threshold);
+  GetBKQueue ()->SetBlockAckThreshold (threshold);
+}
+
+void
+RegularWifiMac::SetVoBlockAckInactivityTimeout (uint16_t timeout)
+{
+  NS_LOG_FUNCTION (this << timeout);
+  GetVOQueue ()->SetBlockAckInactivityTimeout (timeout);
+}
+
+void
+RegularWifiMac::SetViBlockAckInactivityTimeout (uint16_t timeout)
+{
+  NS_LOG_FUNCTION (this << timeout);
+  GetVIQueue ()->SetBlockAckInactivityTimeout (timeout);
+}
+
+void
+RegularWifiMac::SetBeBlockAckInactivityTimeout (uint16_t timeout)
+{
+  NS_LOG_FUNCTION (this << timeout);
+  GetBEQueue ()->SetBlockAckInactivityTimeout (timeout);
+}
+
+void
+RegularWifiMac::SetBkBlockAckInactivityTimeout (uint16_t timeout)
+{
+  NS_LOG_FUNCTION (this << timeout);
+  GetBKQueue ()->SetBlockAckInactivityTimeout (timeout);
+}
+
 void
 RegularWifiMac::SetupEdcaQueue (enum AcIndex ac)
 {
@@ -153,6 +359,7 @@
   edca->SetTxFailedCallback (MakeCallback (&RegularWifiMac::TxFailed, this));
   edca->SetAccessCategory (ac);
   edca->CompleteConfig ();
+
   m_edca.insert (std::make_pair (ac, edca));
 }
 
@@ -245,7 +452,7 @@
 void
 RegularWifiMac::SetQosSupported (bool enable)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << enable);
   m_qosSupported = enable;
 }
 
@@ -258,8 +465,20 @@
 void
 RegularWifiMac::SetHtSupported (bool enable)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << enable);
   m_htSupported = enable;
+  if (enable)
+    {
+      SetQosSupported (true);
+    }
+  if (!enable && !m_vhtSupported)
+    {
+      DisableAggregation ();
+    }
+  else
+    {
+      EnableAggregation ();
+    }
 }
 
 bool
@@ -271,8 +490,20 @@
 void
 RegularWifiMac::SetVhtSupported (bool enable)
 {
-  NS_LOG_FUNCTION (this);
+  NS_LOG_FUNCTION (this << enable);
   m_vhtSupported = enable;
+  if (enable)
+    {
+      SetQosSupported (true);
+    }
+  if (!enable && !m_htSupported)
+    {
+      DisableAggregation ();
+    }
+  else
+    {
+      EnableAggregation ();
+    }
 }
 
 bool
@@ -281,6 +512,19 @@
   return m_htSupported;
 }
 
+bool
+RegularWifiMac::GetErpSupported () const
+{
+  return m_erpSupported;
+}
+
+void
+RegularWifiMac::SetErpSupported (bool enable)
+{
+  NS_LOG_FUNCTION (this);
+  m_erpSupported = enable;
+}
+
 void
 RegularWifiMac::SetCtsToSelfSupported (bool enable)
 {
@@ -459,6 +703,19 @@
 }
 
 void
+RegularWifiMac::SetShortSlotTimeSupported (bool enable)
+{
+  NS_LOG_FUNCTION (this << enable);
+  m_shortSlotTimeSupported = enable;
+}
+
+bool
+RegularWifiMac::GetShortSlotTimeSupported (void) const
+{
+  return m_shortSlotTimeSupported;
+}
+
+void
 RegularWifiMac::Enqueue (Ptr<const Packet> packet,
                          Mac48Address to, Mac48Address from)
 {
@@ -661,59 +918,162 @@
     .SetParent<WifiMac> ()
     .SetGroupName ("Wifi")
     .AddAttribute ("QosSupported",
-                   "This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA",
+                   "This Boolean attribute is set to enable 802.11e/WMM-style QoS support at this STA.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&RegularWifiMac::SetQosSupported,
                                         &RegularWifiMac::GetQosSupported),
                    MakeBooleanChecker ())
     .AddAttribute ("HtSupported",
-                   "This Boolean attribute is set to enable 802.11n support at this STA",
+                   "This Boolean attribute is set to enable 802.11n support at this STA.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&RegularWifiMac::SetHtSupported,
                                         &RegularWifiMac::GetHtSupported),
                    MakeBooleanChecker ())
     .AddAttribute ("VhtSupported",
-                   "This Boolean attribute is set to enable 802.11ac support at this STA",
+                   "This Boolean attribute is set to enable 802.11ac support at this STA.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&RegularWifiMac::SetVhtSupported,
                                         &RegularWifiMac::GetVhtSupported),
                    MakeBooleanChecker ())
     .AddAttribute ("CtsToSelfSupported",
-                   "Use CTS to Self when using a rate that is not in the basic set rate",
+                   "Use CTS to Self when using a rate that is not in the basic rate set.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&RegularWifiMac::SetCtsToSelfSupported,
                                         &RegularWifiMac::GetCtsToSelfSupported),
                    MakeBooleanChecker ())
-    .AddAttribute ("DcaTxop", "The DcaTxop object",
+    .AddAttribute ("VO_MaxAmsduSize",
+                   "Maximum length in bytes of an A-MSDU for AC_VO access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetVoMaxAmsduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("VI_MaxAmsduSize",
+                   "Maximum length in bytes of an A-MSDU for AC_VI access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetViMaxAmsduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("BE_MaxAmsduSize",
+                   "Maximum length in bytes of an A-MSDU for AC_BE access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBeMaxAmsduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("BK_MaxAmsduSize",
+                   "Maximum length in bytes of an A-MSDU for AC_BK access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBkMaxAmsduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("VO_MaxAmpduSize",
+                   "Maximum length in bytes of an A-MPDU for AC_VO access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetVoMaxAmpduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("VI_MaxAmpduSize",
+                   "Maximum length in bytes of an A-MPDU for AC_VI access class.",
+                   UintegerValue (65535),
+                   MakeUintegerAccessor (&RegularWifiMac::SetViMaxAmpduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("BE_MaxAmpduSize",
+                   "Maximum length in bytes of an A-MPDU for AC_BE access class.",
+                   UintegerValue (65535),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBeMaxAmpduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("BK_MaxAmpduSize",
+                   "Maximum length in bytes of an A-MPDU for AC_BK access class.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBkMaxAmpduSize),
+                   MakeUintegerChecker<uint32_t> ())
+    .AddAttribute ("VO_BlockAckThreshold",
+                   "If number of packets in VO queue reaches this value, "
+                   "block ack mechanism is used. If this value is 0, block ack is never used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetVoBlockAckThreshold),
+                   MakeUintegerChecker<uint8_t> (0, 64))
+    .AddAttribute ("VI_BlockAckThreshold",
+                   "If number of packets in VI queue reaches this value, "
+                   "block ack mechanism is used. If this value is 0, block ack is never used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetViBlockAckThreshold),
+                   MakeUintegerChecker<uint8_t> (0, 64))
+    .AddAttribute ("BE_BlockAckThreshold",
+                   "If number of packets in BE queue reaches this value, "
+                   "block ack mechanism is used. If this value is 0, block ack is never used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBeBlockAckThreshold),
+                   MakeUintegerChecker<uint8_t> (0, 64))
+    .AddAttribute ("BK_BlockAckThreshold",
+                   "If number of packets in BK queue reaches this value, "
+                   "block ack mechanism is used. If this value is 0, block ack is never used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBkBlockAckThreshold),
+                   MakeUintegerChecker<uint8_t> (0, 64))
+    .AddAttribute ("VO_BlockAckInactivityTimeout",
+                   "Represents max time (blocks of 1024 micro seconds) allowed for block ack"
+                   "inactivity for AC_VO. If this value isn't equal to 0 a timer start after that a"
+                   "block ack setup is completed and will be reset every time that a block ack"
+                   "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetVoBlockAckInactivityTimeout),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("VI_BlockAckInactivityTimeout",
+                   "Represents max time (blocks of 1024 micro seconds) allowed for block ack"
+                   "inactivity for AC_VI. If this value isn't equal to 0 a timer start after that a"
+                   "block ack setup is completed and will be reset every time that a block ack"
+                   "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetViBlockAckInactivityTimeout),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("BE_BlockAckInactivityTimeout",
+                   "Represents max time (blocks of 1024 micro seconds) allowed for block ack"
+                   "inactivity for AC_BE. If this value isn't equal to 0 a timer start after that a"
+                   "block ack setup is completed and will be reset every time that a block ack"
+                   "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBeBlockAckInactivityTimeout),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("BK_BlockAckInactivityTimeout",
+                   "Represents max time (blocks of 1024 micro seconds) allowed for block ack"
+                   "inactivity for AC_BK. If this value isn't equal to 0 a timer start after that a"
+                   "block ack setup is completed and will be reset every time that a block ack"
+                   "frame is received. If this value is 0, block ack inactivity timeout won't be used.",
+                   UintegerValue (0),
+                   MakeUintegerAccessor (&RegularWifiMac::SetBkBlockAckInactivityTimeout),
+                   MakeUintegerChecker<uint16_t> ())
+    .AddAttribute ("ShortSlotTimeSupported",
+                   "Whether or not short slot time is supported (only used by ERP APs or STAs).",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&WifiMac::GetShortSlotTimeSupported,
+                                        &WifiMac::SetShortSlotTimeSupported),
+                   MakeBooleanChecker ())
+    .AddAttribute ("DcaTxop",
+                   "The DcaTxop object.",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetDcaTxop),
                    MakePointerChecker<DcaTxop> ())
     .AddAttribute ("VO_EdcaTxopN",
-                   "Queue that manages packets belonging to AC_VO access class",
+                   "Queue that manages packets belonging to AC_VO access class.",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetVOQueue),
                    MakePointerChecker<EdcaTxopN> ())
     .AddAttribute ("VI_EdcaTxopN",
-                   "Queue that manages packets belonging to AC_VI access class",
+                   "Queue that manages packets belonging to AC_VI access class.",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetVIQueue),
                    MakePointerChecker<EdcaTxopN> ())
     .AddAttribute ("BE_EdcaTxopN",
-                   "Queue that manages packets belonging to AC_BE access class",
+                   "Queue that manages packets belonging to AC_BE access class.",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetBEQueue),
                    MakePointerChecker<EdcaTxopN> ())
     .AddAttribute ("BK_EdcaTxopN",
-                   "Queue that manages packets belonging to AC_BK access class",
+                   "Queue that manages packets belonging to AC_BK access class.",
                    PointerValue (),
                    MakePointerAccessor (&RegularWifiMac::GetBKQueue),
                    MakePointerChecker<EdcaTxopN> ())
     .AddTraceSource ("TxOkHeader",
-                     "The header of successfully transmitted packet",
+                     "The header of successfully transmitted packet.",
                      MakeTraceSourceAccessor (&RegularWifiMac::m_txOkCallback),
                      "ns3::WifiMacHeader::TracedCallback")
     .AddTraceSource ("TxErrHeader",
-                     "The header of unsuccessfully transmitted packet",
+                     "The header of unsuccessfully transmitted packet.",
                      MakeTraceSourceAccessor (&RegularWifiMac::m_txErrCallback),
                      "ns3::WifiMacHeader::TracedCallback")
   ;
@@ -723,19 +1083,22 @@
 void
 RegularWifiMac::FinishConfigureStandard (enum WifiPhyStandard standard)
 {
-  uint32_t cwmin;
-  uint32_t cwmax;
-
+  NS_LOG_FUNCTION (this << standard);
+  uint32_t cwmin = 0;
+  uint32_t cwmax = 0;
   switch (standard)
     {
+    case WIFI_PHY_STANDARD_80211ac:
+      SetVhtSupported (true);
+    case WIFI_PHY_STANDARD_80211n_5GHZ:
+    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
+      SetHtSupported (true);
+    case WIFI_PHY_STANDARD_80211g:
+      m_erpSupported = true;
     case WIFI_PHY_STANDARD_holland:
     case WIFI_PHY_STANDARD_80211a:
-    case WIFI_PHY_STANDARD_80211g:
     case WIFI_PHY_STANDARD_80211_10MHZ:
     case WIFI_PHY_STANDARD_80211_5MHZ:
-    case WIFI_PHY_STANDARD_80211n_5GHZ:
-    case WIFI_PHY_STANDARD_80211n_2_4GHZ:
-    case WIFI_PHY_STANDARD_80211ac:
       cwmin = 15;
       cwmax = 1023;
       break;
@@ -747,15 +1110,21 @@
       NS_FATAL_ERROR ("Unsupported WifiPhyStandard in RegularWifiMac::FinishConfigureStandard ()");
     }
 
+  ConfigureContentionWindow (cwmin, cwmax);
+}
+
+void
+RegularWifiMac::ConfigureContentionWindow (uint32_t cwMin, uint32_t cwMax)
+{
   //The special value of AC_BE_NQOS which exists in the Access
   //Category enumeration allows us to configure plain old DCF.
-  ConfigureDcf (m_dca, cwmin, cwmax, AC_BE_NQOS);
+  ConfigureDcf (m_dca, cwMin, cwMax, AC_BE_NQOS);
 
   //Now we configure the EDCA functions
   for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
-    {
-      ConfigureDcf (i->second, cwmin, cwmax, i->first);
-    }
+  {
+    ConfigureDcf (i->second, cwMin, cwMax, i->first);
+  }
 }
 
 void
@@ -772,4 +1141,73 @@
   m_txErrCallback (hdr);
 }
 
+void
+RegularWifiMac::ConfigureAggregation (void)
+{
+  NS_LOG_FUNCTION (this);
+  if (GetVOQueue ()->GetMsduAggregator () != 0)
+    {
+      GetVOQueue ()->GetMsduAggregator ()->SetMaxAmsduSize (m_voMaxAmsduSize);
+    }
+  if (GetVIQueue ()->GetMsduAggregator () != 0)
+    {
+      GetVIQueue ()->GetMsduAggregator ()->SetMaxAmsduSize (m_viMaxAmsduSize);
+    }
+  if (GetBEQueue ()->GetMsduAggregator () != 0)
+    {
+      GetBEQueue ()->GetMsduAggregator ()->SetMaxAmsduSize (m_beMaxAmsduSize);
+    }
+  if (GetBKQueue ()->GetMsduAggregator () != 0)
+    {
+      GetBKQueue ()->GetMsduAggregator ()->SetMaxAmsduSize (m_bkMaxAmsduSize);
+    }
+  if (GetVOQueue ()->GetMpduAggregator () != 0)
+    {
+      GetVOQueue ()->GetMpduAggregator ()->SetMaxAmpduSize (m_voMaxAmpduSize);
+    }
+  if (GetVIQueue ()->GetMpduAggregator () != 0)
+    {
+      GetVIQueue ()->GetMpduAggregator ()->SetMaxAmpduSize (m_viMaxAmpduSize);
+    }
+  if (GetBEQueue ()->GetMpduAggregator () != 0)
+    {
+      GetBEQueue ()->GetMpduAggregator ()->SetMaxAmpduSize (m_beMaxAmpduSize);
+    }
+  if (GetBKQueue ()->GetMpduAggregator () != 0)
+    {
+      GetBKQueue ()->GetMpduAggregator ()->SetMaxAmpduSize (m_bkMaxAmpduSize);
+    }
+}
+
+void
+RegularWifiMac::EnableAggregation (void)
+{
+  NS_LOG_FUNCTION (this);
+  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
+  {
+    if (i->second->GetMsduAggregator () == 0)
+      {
+        Ptr<MsduStandardAggregator> msduAggregator = CreateObject<MsduStandardAggregator> ();
+        i->second->SetMsduAggregator (msduAggregator);
+      }
+    if (i->second->GetMpduAggregator () == 0)
+      {
+        Ptr<MpduStandardAggregator> mpduAggregator = CreateObject<MpduStandardAggregator> ();
+        i->second->SetMpduAggregator (mpduAggregator);
+      }
+  }
+  ConfigureAggregation ();
+}
+
+void
+RegularWifiMac::DisableAggregation (void)
+{
+  NS_LOG_FUNCTION (this);
+  for (EdcaQueues::iterator i = m_edca.begin (); i != m_edca.end (); ++i)
+  {
+    i->second->SetMsduAggregator (0);
+    i->second->SetMpduAggregator (0);
+  }
+}
+
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/regular-wifi-mac.h ns-3.25/src/wifi/model/regular-wifi-mac.h
--- ns-3.24.1/src/wifi/model/regular-wifi-mac.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/regular-wifi-mac.h	2016-03-23 21:36:53.000000000 -0700
@@ -119,7 +119,6 @@
    *               false otherwise
    */
   void SetCtsToSelfSupported (bool enable);
-
   /**
    * Return whether the device supports CTS-to-self
    * capability.
@@ -128,6 +127,22 @@
    *         false otherwise.
    */
   bool GetCtsToSelfSupported () const;
+
+  /**
+   * Enable or disable short slot time feature.
+   *
+   * \param enable true if short slot time is to be supported,
+   *               false otherwise
+   */
+  virtual void SetShortSlotTimeSupported (bool enable);
+  /**
+   * \return whether the device supports short slot time capability.
+   *
+   * \return true if short slot time is supported,
+   *         false otherwise.
+   */
+  virtual bool GetShortSlotTimeSupported (void) const;
+
   /**
    * \return the MAC address associated to this MAC layer.
    */
@@ -205,6 +220,18 @@
    * \return the station manager attached to this MAC.
    */
   virtual Ptr<WifiRemoteStationManager> GetWifiRemoteStationManager (void) const;
+  /**
+   * Return the HT capability of the device.
+   *
+   * \return the HT capability that we support
+   */
+  HtCapabilities GetHtCapabilities (void) const;
+  /**
+   * Return the VHT capability of the device.
+   *
+   * \return the VHT capability that we support
+   */
+  VhtCapabilities GetVhtCapabilities (void) const;
 
   /**
    * This type defines the callback of a higher layer that a
@@ -313,6 +340,15 @@
    * chain up to this implementation to deal with the remainder.
    */
   virtual void FinishConfigureStandard (enum WifiPhyStandard standard);
+  
+  /**
+   * \param cwMin the minimum congestion window size
+   * \param cwMax the maximum congestion window size
+   *
+   * This method is called to set the minimum and the maximum
+   * contention window size.
+   */
+  void ConfigureContentionWindow (uint32_t cwMin, uint32_t cwMax);
 
   /**
    * This method is invoked by a subclass to specify what type of
@@ -439,12 +475,12 @@
   bool GetHtSupported () const;
 
   /**
-  * This Boolean is set \c true iff this WifiMac is to model
-  * 802.11ac. It is exposed through the attribute system.
-  */
+   * This Boolean is set \c true iff this WifiMac is to model
+   * 802.11ac. It is exposed through the attribute system.
+   */
   bool m_vhtSupported;
   /**
-   * Enable or disable HT support for the device.
+   * Enable or disable VHT support for the device.
    *
    * \param enable whether VHT is supported
    */
@@ -455,6 +491,24 @@
    * \return true if VHT is supported, false otherwise
    */
   bool GetVhtSupported () const;
+  
+  /**
+   * This Boolean is set \c true iff this WifiMac is to model
+   * 802.11g. It is exposed through the attribute system.
+   */
+  bool m_erpSupported;
+  /**
+   * Enable or disable ERP support for the device.
+   *
+   * \param enable whether ERP is supported
+   */
+  void SetErpSupported (bool enable);
+  /**
+   * Return whether the device supports ERP.
+   *
+   * \return true if ERP is supported, false otherwise
+   */
+  bool GetErpSupported () const;
 
 
 private:
@@ -469,8 +523,44 @@
    */
   void SetupEdcaQueue (enum AcIndex ac);
 
+  void SetVoMaxAmsduSize (uint32_t size);
+  void SetViMaxAmsduSize (uint32_t size);
+  void SetBeMaxAmsduSize (uint32_t size);
+  void SetBkMaxAmsduSize (uint32_t size);
+
+  void SetVoMaxAmpduSize (uint32_t size);
+  void SetViMaxAmpduSize (uint32_t size);
+  void SetBeMaxAmpduSize (uint32_t size);
+  void SetBkMaxAmpduSize (uint32_t size);
+  
+  void SetVoBlockAckThreshold (uint8_t threshold);
+  void SetViBlockAckThreshold (uint8_t threshold);
+  void SetBeBlockAckThreshold (uint8_t threshold);
+  void SetBkBlockAckThreshold (uint8_t threshold);
+  
+  void SetVoBlockAckInactivityTimeout (uint16_t timeout);
+  void SetViBlockAckInactivityTimeout (uint16_t timeout);
+  void SetBeBlockAckInactivityTimeout (uint16_t timeout);
+  void SetBkBlockAckInactivityTimeout (uint16_t timeout);
+  
+  void ConfigureAggregation (void);
+  void EnableAggregation (void);
+  void DisableAggregation (void);
+
+  uint32_t m_voMaxAmsduSize;
+  uint32_t m_viMaxAmsduSize;
+  uint32_t m_beMaxAmsduSize;
+  uint32_t m_bkMaxAmsduSize;
+
+  uint32_t m_voMaxAmpduSize;
+  uint32_t m_viMaxAmpduSize;
+  uint32_t m_beMaxAmpduSize;
+  uint32_t m_bkMaxAmpduSize;
+
   TracedCallback<const WifiMacHeader &> m_txOkCallback;
   TracedCallback<const WifiMacHeader &> m_txErrCallback;
+  
+  bool m_shortSlotTimeSupported;
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/model/rraa-wifi-manager.cc ns-3.25/src/wifi/model/rraa-wifi-manager.cc
--- ns-3.24.1/src/wifi/model/rraa-wifi-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/rraa-wifi-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -282,8 +282,7 @@
 }
 
 WifiTxVector
-RraaWifiManager::DoGetDataTxVector (WifiRemoteStation *st,
-                                    uint32_t size)
+RraaWifiManager::DoGetDataTxVector (WifiRemoteStation *st)
 {
   RraaWifiRemoteStation *station = (RraaWifiRemoteStation *) st;
   uint32_t channelWidth = GetChannelWidth (station);
@@ -309,7 +308,16 @@
       //avoid to use legacy rate adaptation algorithms for IEEE 802.11n/ac
       channelWidth = 20;
     }
-  return WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), false, 1, 0, channelWidth, GetAggregation (station), false);
+  WifiTxVector rtsTxVector;
+  if (GetUseNonErpProtection () == false)
+    {
+      rtsTxVector = WifiTxVector (GetSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  else
+    {
+      rtsTxVector = WifiTxVector (GetNonErpSupported (st, 0), GetDefaultTxPowerLevel (), GetShortRetryCount (st), false, 1, 0, channelWidth, GetAggregation (station), false);
+    }
+  return rtsTxVector;
 }
 
 bool
@@ -394,7 +402,8 @@
 struct RraaWifiManager::ThresholdsItem
 RraaWifiManager::GetThresholds (WifiMode mode, RraaWifiRemoteStation *station) const
 {
-  switch (mode.GetDataRate (GetChannelWidth (station), GetShortGuardInterval (station), 1) / 1000000)
+  uint8_t nss = 1;  // This RAA only supports 1 spatial stream
+  switch (mode.GetDataRate (GetChannelWidth (station), GetShortGuardInterval (station), nss) / 1000000)
     {
     case 54:
       {
diff -Naur ns-3.24.1/src/wifi/model/rraa-wifi-manager.h ns-3.25/src/wifi/model/rraa-wifi-manager.h
--- ns-3.24.1/src/wifi/model/rraa-wifi-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/rraa-wifi-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -67,7 +67,7 @@
                                double ackSnr, WifiMode ackMode, double dataSnr);
   virtual void DoReportFinalRtsFailed (WifiRemoteStation *station);
   virtual void DoReportFinalDataFailed (WifiRemoteStation *station);
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size);
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station);
   virtual WifiTxVector DoGetRtsTxVector (WifiRemoteStation *station);
   virtual bool DoNeedRts (WifiRemoteStation *st,
                           Ptr<const Packet> packet, bool normally);
diff -Naur ns-3.24.1/src/wifi/model/sta-wifi-mac.cc ns-3.25/src/wifi/model/sta-wifi-mac.cc
--- ns-3.24.1/src/wifi/model/sta-wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/sta-wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -37,6 +37,7 @@
 #include "amsdu-subframe-header.h"
 #include "mgt-headers.h"
 #include "ht-capabilities.h"
+#include "ht-operations.h"
 #include "vht-capabilities.h"
 
 /*
@@ -222,6 +223,7 @@
   MgtAssocRequestHeader assoc;
   assoc.SetSsid (GetSsid ());
   assoc.SetSupportedRates (GetSupportedRates ());
+  assoc.SetCapabilities (GetCapabilities ());
   if (m_htSupported || m_vhtSupported)
     {
       assoc.SetHtCapabilities (GetHtCapabilities ());
@@ -488,6 +490,7 @@
     {
       MgtBeaconHeader beacon;
       packet->RemoveHeader (beacon);
+      CapabilityInformation capabilities = beacon.GetCapabilities ();
       bool goodBeacon = false;
       if (GetSsid ().IsBroadcast ()
           || beacon.GetSsid ().IsEqual (GetSsid ()))
@@ -512,6 +515,32 @@
           Time delay = MicroSeconds (beacon.GetBeaconIntervalUs () * m_maxMissedBeacons);
           RestartBeaconWatchdog (delay);
           SetBssid (hdr->GetAddr3 ());
+          bool isShortPreambleEnabled = capabilities.IsShortPreamble ();
+          if (m_erpSupported)
+            {
+              ErpInformation erpInformation = beacon.GetErpInformation ();
+              isShortPreambleEnabled &= !erpInformation.GetBarkerPreambleMode ();
+              if (erpInformation.GetUseProtection() == true)
+                {
+                  m_stationManager->SetUseNonErpProtection (true);
+                }
+              else
+                {
+                  m_stationManager->SetUseNonErpProtection (false);
+                }
+              if (capabilities.IsShortSlotTime () == true)
+                {
+                  //enable short slot time
+                  SetSlot (MicroSeconds (9));
+                }
+              else
+                {
+                  //disable short slot time
+                  SetSlot (MicroSeconds (20));
+                }
+            }
+          m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
+          m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ());
         }
       if (goodBeacon && m_state == BEACON_MISSED)
         {
@@ -526,6 +555,7 @@
         {
           MgtProbeResponseHeader probeResp;
           packet->RemoveHeader (probeResp);
+          CapabilityInformation capabilities = probeResp.GetCapabilities ();
           if (!probeResp.GetSsid ().IsEqual (GetSsid ()))
             {
               //not a probe resp for our ssid.
@@ -540,6 +570,57 @@
                   return;
                 }
             }
+          for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
+            {
+              WifiMode mode = m_phy->GetMode (i);
+              uint8_t nss = 1; // Assume 1 spatial stream
+              if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
+                {
+                  m_stationManager->AddSupportedMode (hdr->GetAddr2 (), mode);
+                  if (rates.IsBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
+                    {
+                      m_stationManager->AddBasicMode (mode);
+                    }
+                }
+            }
+            
+          bool isShortPreambleEnabled = capabilities.IsShortPreamble ();
+          if (m_erpSupported)
+            {
+              bool isErpAllowed = false;
+              for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
+              {
+                WifiMode mode = m_phy->GetMode (i);
+                if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM && rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                  {
+                    isErpAllowed = true;
+                    break;
+                  }
+              }
+              if (!isErpAllowed)
+                {
+                  //disable short slot time and set cwMin to 31
+                  SetSlot (MicroSeconds (20));
+                  ConfigureContentionWindow (31, 1023);
+                }
+              else
+                {
+                  ErpInformation erpInformation = probeResp.GetErpInformation ();
+                  isShortPreambleEnabled &= !erpInformation.GetBarkerPreambleMode ();
+                  if (m_stationManager->GetShortSlotTimeEnabled ())
+                    {
+                      //enable short slot time
+                      SetSlot (MicroSeconds (9));
+                    }
+                  else
+                    {
+                      //disable short slot time
+                      SetSlot (MicroSeconds (20));
+                    }
+                }
+            }
+          m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
+          m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ());
           SetBssid (hdr->GetAddr3 ());
           Time delay = MicroSeconds (probeResp.GetBeaconIntervalUs () * m_maxMissedBeacons);
           RestartBeaconWatchdog (delay);
@@ -566,11 +647,50 @@
             {
               SetState (ASSOCIATED);
               NS_LOG_DEBUG ("assoc completed");
+              CapabilityInformation capabilities = assocResp.GetCapabilities ();
               SupportedRates rates = assocResp.GetSupportedRates ();
+              bool isShortPreambleEnabled = capabilities.IsShortPreamble ();
+              if (m_erpSupported)
+                {
+                  bool isErpAllowed = false;
+                  for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
+                  {
+                    WifiMode mode = m_phy->GetMode (i);
+                    if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM && rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                      {
+                        isErpAllowed = true;
+                        break;
+                      }
+                  }
+                  if (!isErpAllowed)
+                    {
+                      //disable short slot time and set cwMin to 31
+                      SetSlot (MicroSeconds (20));
+                      ConfigureContentionWindow (31, 1023);
+                    }
+                  else
+                    {
+                      ErpInformation erpInformation = assocResp.GetErpInformation ();
+                      isShortPreambleEnabled &= !erpInformation.GetBarkerPreambleMode ();
+                      if (m_stationManager->GetShortSlotTimeEnabled ())
+                        {
+                          //enable short slot time
+                          SetSlot (MicroSeconds (9));
+                        }
+                      else
+                        {
+                          //disable short slot time
+                          SetSlot (MicroSeconds (20));
+                        }
+                    }
+                }
+              m_stationManager->SetShortPreambleEnabled (isShortPreambleEnabled);
+              m_stationManager->SetShortSlotTimeEnabled (capabilities.IsShortSlotTime ());
               if (m_htSupported)
                 {
                   HtCapabilities htcapabilities = assocResp.GetHtCapabilities ();
-                  m_stationManager->AddStationHtCapabilities (hdr->GetAddr2 (),htcapabilities);
+                  HtOperations htOperations = assocResp.GetHtOperations ();
+                  m_stationManager->AddStationHtCapabilities (hdr->GetAddr2 (), htcapabilities);
                 }
               if (m_vhtSupported)
                 {
@@ -581,10 +701,11 @@
               for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
                 {
                   WifiMode mode = m_phy->GetMode (i);
-                  if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                  uint8_t nss = 1; // Assume 1 spatial stream
+                  if (rates.IsSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
                     {
                       m_stationManager->AddSupportedMode (hdr->GetAddr2 (), mode);
-                      if (rates.IsBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1)))
+                      if (rates.IsBasicRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, nss)))
                         {
                           m_stationManager->AddBasicMode (mode);
                         }
@@ -640,6 +761,7 @@
 StaWifiMac::GetSupportedRates (void) const
 {
   SupportedRates rates;
+  uint8_t nss = 1;  // Number of spatial streams is 1 for non-MIMO modes
   if (m_htSupported || m_vhtSupported)
     {
       for (uint32_t i = 0; i < m_phy->GetNBssMembershipSelectors (); i++)
@@ -650,75 +772,19 @@
   for (uint32_t i = 0; i < m_phy->GetNModes (); i++)
     {
       WifiMode mode = m_phy->GetMode (i);
-      rates.AddSupportedRate (mode.GetDataRate (m_phy->GetChannelWidth (), false, 1));
+      uint64_t modeDataRate = mode.GetDataRate (m_phy->GetChannelWidth (), false, nss);
+      NS_LOG_DEBUG ("Adding supported rate of " << modeDataRate);
+      rates.AddSupportedRate (modeDataRate);
     }
   return rates;
 }
 
-HtCapabilities
-StaWifiMac::GetHtCapabilities (void) const
+CapabilityInformation
+StaWifiMac::GetCapabilities (void) const
 {
-  HtCapabilities capabilities;
-  capabilities.SetHtSupported (1);
-  if (m_htSupported)
-    {
-      capabilities.SetLdpc (m_phy->GetLdpc ());
-      capabilities.SetSupportedChannelWidth (m_phy->GetChannelWidth () == 40);
-      capabilities.SetShortGuardInterval20 (m_phy->GetGuardInterval ());
-      capabilities.SetShortGuardInterval40 (m_phy->GetChannelWidth () == 40 && m_phy->GetGuardInterval ());
-      capabilities.SetGreenfield (m_phy->GetGreenfield ());
-      capabilities.SetMaxAmsduLength (1); //hardcoded for now (TBD)
-      capabilities.SetLSigProtectionSupport (!m_phy->GetGreenfield ());
-      capabilities.SetMaxAmpduLength (3); //hardcoded for now (TBD)
-      uint64_t maxSupportedRate = 0; //in bit/s
-      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
-        {
-          WifiMode mcs = m_phy->GetMcs (i);
-          capabilities.SetRxMcsBitmask (mcs.GetMcsValue ());
-          if (mcs.GetDataRate (m_phy->GetGuardInterval (), m_phy->GetGuardInterval (), 1) > maxSupportedRate)
-            {
-              maxSupportedRate = mcs.GetDataRate (m_phy->GetGuardInterval (), m_phy->GetGuardInterval (), 1);
-            }
-        }
-      capabilities.SetRxHighestSupportedDataRate (maxSupportedRate / 1e6); //in Mbit/s
-      capabilities.SetTxMcsSetDefined (m_phy->GetNMcs () > 0);
-      capabilities.SetTxMaxNSpatialStreams (m_phy->GetNumberOfTransmitAntennas ());
-    }
-  return capabilities;
-}
-
-VhtCapabilities
-StaWifiMac::GetVhtCapabilities (void) const
-{
-  VhtCapabilities capabilities;
-  capabilities.SetVhtSupported (1);
-  if (m_vhtSupported)
-    {
-      if (m_phy->GetChannelWidth () == 160)
-        {
-          capabilities.SetSupportedChannelWidthSet (1);
-        }
-      else
-        {
-          capabilities.SetSupportedChannelWidthSet (0);
-        }
-      capabilities.SetMaxMpduLength (2); //hardcoded for now (TBD)
-      capabilities.SetRxLdpc (m_phy->GetLdpc ());
-      capabilities.SetShortGuardIntervalFor80Mhz ((m_phy->GetChannelWidth () == 80) && m_phy->GetGuardInterval ());
-      capabilities.SetShortGuardIntervalFor160Mhz ((m_phy->GetChannelWidth () == 160) && m_phy->GetGuardInterval ());
-      capabilities.SetMaxAmpduLengthExponent (7); //hardcoded for now (TBD)
-      uint8_t maxMcs = 0;
-      for (uint8_t i = 0; i < m_phy->GetNMcs (); i++)
-        {
-          WifiMode mcs = m_phy->GetMcs (i);
-          if (mcs.GetMcsValue () > maxMcs)
-            {
-              maxMcs = mcs.GetMcsValue ();
-            }
-        }
-      capabilities.SetRxMcsMap (maxMcs, 1); //Only 1 SS is currently supported
-      capabilities.SetTxMcsMap (maxMcs, 1); //Only 1 SS is currently supported
-    }
+  CapabilityInformation capabilities;
+  capabilities.SetShortPreamble (m_phy->GetShortPlcpPreambleSupported () || m_erpSupported);
+  capabilities.SetShortSlotTime (GetShortSlotTimeSupported () && m_erpSupported);
   return capabilities;
 }
 
diff -Naur ns-3.24.1/src/wifi/model/sta-wifi-mac.h ns-3.25/src/wifi/model/sta-wifi-mac.h
--- ns-3.24.1/src/wifi/model/sta-wifi-mac.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/sta-wifi-mac.h	2016-03-23 21:36:53.000000000 -0700
@@ -28,6 +28,7 @@
 #include "ns3/traced-callback.h"
 #include "supported-rates.h"
 #include "amsdu-subframe-header.h"
+#include "capability-information.h"
 
 namespace ns3  {
 
@@ -171,17 +172,11 @@
    */
   void SetState (enum MacState value);
   /**
-   * Return the HT capability of the current AP.
+   * Return the Capability information of the current STA.
    *
-   * \return the HT capability that we support
+   * \return the Capability information that we support
    */
-  HtCapabilities GetHtCapabilities (void) const;
-  /**
-   * Return the VHT capability of the current AP.
-   *
-   * \return the VHT capability that we support
-   */
-  VhtCapabilities GetVhtCapabilities (void) const;
+  CapabilityInformation GetCapabilities (void) const;
 
   enum MacState m_state;
   Time m_probeRequestTimeout;
diff -Naur ns-3.24.1/src/wifi/model/vht-capabilities.h ns-3.25/src/wifi/model/vht-capabilities.h
--- ns-3.24.1/src/wifi/model/vht-capabilities.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/vht-capabilities.h	2016-03-23 21:36:53.000000000 -0700
@@ -90,10 +90,32 @@
   uint8_t GetTxStbc () const;
   uint8_t GetMaxAmpduLengthExponent () const;
 
-  //MCS and NSS field information
+  // MCS and NSS field information
+  // For each value of NSS ranging from 1 to 8, we need to encode two bits.
+  // The value 0 indicates that the maximum MCS for that spatial stream is 7.
+  // The value 1 indicates that the maximum MCS for that spatial stream is 8.
+  // The value 2 indicates that the maximum MCS for that spatial stream is 9.
+  //
+  // The maps may be set all at once by passing in a 16-bit field corresponding
+  // to the above, or incrementally for each NSS separately, where the 
+  // MCS value must be in the range 7-9.
+  /**
+   * \param map The 16-bit encoding of Max MCS for each of 8 spatial streams
+   */
   void SetRxMcsMap (uint16_t map);
+  /**
+   * \param mcs Max MCS value (between 7 and 9)
+   * \param nss Spatial stream for which the Max MCS value is being set
+   */
   void SetRxMcsMap (uint8_t mcs, uint8_t nss);
+  /**
+   * \param map The 16-bit encoding of Max MCS for each of 8 spatial streams
+   */
   void SetTxMcsMap (uint16_t map);
+  /**
+   * \param mcs Max MCS value (between 7 and 9)
+   * \param nss Spatial stream for which the Max MCS value is being set
+   */
   void SetTxMcsMap (uint8_t mcs, uint8_t nss);
   void SetRxHighestSupportedLgiDataRate (uint16_t supporteddatarate);
   void SetTxHighestSupportedLgiDataRate (uint16_t supporteddatarate);
diff -Naur ns-3.24.1/src/wifi/model/wifi-information-element.h ns-3.25/src/wifi/model/wifi-information-element.h
--- ns-3.24.1/src/wifi/model/wifi-information-element.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-information-element.h	2016-03-23 21:36:53.000000000 -0700
@@ -83,7 +83,9 @@
 #define IE_RSN                                 ((WifiInformationElementId)48)
 // 49 is reserved in 802.11-2007
 #define IE_EXTENDED_SUPPORTED_RATES            ((WifiInformationElementId)50)
-// 51 to 126 are reserved in 802.11-2007
+// 51 to 60 are reserved in 802.11-2007
+#define IE_HT_OPERATIONS                       ((WifiInformationElementId)61)
+// 62 to 126 are reserved in 802.11-2007
 #define IE_EXTENDED_CAPABILITIES               ((WifiInformationElementId)127)
 // 128 to 190 are reserved in 802.11-2007
 #define IE_VHT_CAPABILITIES                    ((WifiInformationElementId)191)
diff -Naur ns-3.24.1/src/wifi/model/wifi-mac.cc ns-3.25/src/wifi/model/wifi-mac.cc
--- ns-3.24.1/src/wifi/model/wifi-mac.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mac.cc	2016-03-23 21:36:53.000000000 -0700
@@ -21,6 +21,7 @@
 #include "wifi-mac.h"
 #include "dcf.h"
 #include "ns3/uinteger.h"
+#include "ns3/boolean.h"
 #include "ns3/trace-source-accessor.h"
 
 namespace ns3 {
@@ -351,10 +352,9 @@
 {
   SetSifs (MicroSeconds (10));
   // Slot time defaults to the "long slot time" of 20 us in the standard
-  // according to mixed 802.11b/g deployments.  Short slot time is supported
-  // if the user sets the slot to 9 us *after* calling Configure80211g().
-  // The other parameters below should also be adjusted accordingly as they
-  // depend on slot time.
+  // according to mixed 802.11b/g deployments.  Short slot time is enabled
+  // if the user sets the ShortSlotTimeSupported flag to true and when the BSS
+  // consists of only ERP STAs capable of supporting this option.
   SetSlot (MicroSeconds (20));
   SetEifsNoDifs (MicroSeconds (10 + 304));
   SetPifs (MicroSeconds (10 + 20));
@@ -390,7 +390,7 @@
   Configure80211g ();
   SetRifs (MicroSeconds (2));
   SetBasicBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultBasicBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
-  SetCompressedBlockAckTimeout (GetSifs () + GetSlot () + GetDefaultCompressedBlockAckDelay () + GetDefaultMaxPropagationDelay () * 2);
+  SetCompressedBlockAckTimeout (GetSifs () + GetSlot () + MicroSeconds (448) + GetDefaultMaxPropagationDelay () * 2);
 }
 void
 WifiMac::Configure80211n_5Ghz (void)
diff -Naur ns-3.24.1/src/wifi/model/wifi-mac.h ns-3.25/src/wifi/model/wifi-mac.h
--- ns-3.24.1/src/wifi/model/wifi-mac.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mac.h	2016-03-23 21:36:53.000000000 -0700
@@ -65,10 +65,9 @@
    * \param pifs the pifs duration.
    */
   virtual void SetPifs (Time pifs) = 0;
-/**
+  /**
    * \param rifs the rifs duration.
    */
-
   virtual void SetRifs (Time rifs) = 0;
   /**
    * \param ctsTimeout the duration of a CTS timeout.
@@ -84,6 +83,23 @@
    * Unused for now.
    */
   void SetMaxPropagationDelay (Time delay);
+  /**
+   * \param ssid the current ssid of this MAC layer.
+   */
+  virtual void SetSsid (Ssid ssid) = 0;
+  /**
+   * \param enable true if short slot time is to be supported,
+   *               false otherwise
+   */
+  virtual void SetShortSlotTimeSupported (bool enable) = 0;
+  /**
+   * \brief Sets the interface in promiscuous mode.
+   *
+   * Enables promiscuous mode on the interface. Note that any further
+   * filtering on the incoming frame path may affect the overall
+   * behavior.
+   */
+  virtual void SetPromisc (void) = 0;
 
   /**
    * \return the current RIFS duration.
@@ -138,21 +154,13 @@
    */
   virtual void SetAddress (Mac48Address address) = 0;
   /**
-   * \param ssid the current ssid of this MAC layer.
-   */
-  virtual void SetSsid (Ssid ssid) = 0;
-  /**
    * \return the bssid of the network this device belongs to.
    */
   virtual Mac48Address GetBssid (void) const = 0;
   /**
-   * \brief Sets the interface in promiscuous mode.
-   *
-   * Enables promiscuous mode on the interface. Note that any further
-   * filtering on the incoming frame path may affect the overall
-   * behavior.
+   * \return whether the device supports short slot time capability.
    */
-  virtual void SetPromisc (void) = 0;
+  virtual bool GetShortSlotTimeSupported (void) const = 0;
 
   /**
    * \param packet the packet to send.
diff -Naur ns-3.24.1/src/wifi/model/wifi-mac-header.cc ns-3.25/src/wifi/model/wifi-mac-header.cc
--- ns-3.24.1/src/wifi/model/wifi-mac-header.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mac-header.cc	2016-03-23 21:36:53.000000000 -0700
@@ -19,6 +19,7 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
+
 #include "ns3/assert.h"
 #include "ns3/address-utils.h"
 #include "wifi-mac-header.h"
@@ -36,13 +37,13 @@
 
 enum
 {
+  //Reserved: 0 - 6
+  SUBTYPE_CTL_CTLWRAPPER = 7,
   SUBTYPE_CTL_BACKREQ = 8,
   SUBTYPE_CTL_BACKRESP = 9,
   SUBTYPE_CTL_RTS = 11,
   SUBTYPE_CTL_CTS = 12,
-  SUBTYPE_CTL_ACK = 13,
-  SUBTYPE_CTL_CTLWRAPPER = 7
-
+  SUBTYPE_CTL_ACK = 13
 };
 
 WifiMacHeader::WifiMacHeader ()
@@ -52,6 +53,7 @@
     m_amsduPresent (0)
 {
 }
+
 WifiMacHeader::~WifiMacHeader ()
 {
 }
@@ -179,6 +181,10 @@
 {
   switch (type)
     {
+    case WIFI_MAC_CTL_CTLWRAPPER:
+      m_ctrlType = TYPE_CTL;
+      m_ctrlSubtype = SUBTYPE_CTL_CTLWRAPPER;
+      break;
     case WIFI_MAC_CTL_BACKREQ:
       m_ctrlType = TYPE_CTL;
       m_ctrlSubtype = SUBTYPE_CTL_BACKREQ;
@@ -199,10 +205,6 @@
       m_ctrlType = TYPE_CTL;
       m_ctrlSubtype = SUBTYPE_CTL_ACK;
       break;
-    case WIFI_MAC_CTL_CTLWRAPPER:
-      m_ctrlType = TYPE_CTL;
-      m_ctrlSubtype = SUBTYPE_CTL_CTLWRAPPER;
-      break;
     case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 0;
@@ -255,7 +257,6 @@
       m_ctrlType = TYPE_MGT;
       m_ctrlSubtype = 15;
       break;
-
     case WIFI_MAC_DATA:
       m_ctrlType = TYPE_DATA;
       m_ctrlSubtype = 0;
@@ -449,16 +450,16 @@
 
 void WifiMacHeader::SetQosMeshControlPresent (void)
 {
-  // mark bit 0 of this variable instead of bit 8, since m_qosStuff is
-  // shifted by one byte when serialized
-  m_qosStuff = m_qosStuff | 0x01; // bit 8 of QoS Control Field
+  //Mark bit 0 of this variable instead of bit 8, since m_qosStuff is
+  //shifted by one byte when serialized
+  m_qosStuff = m_qosStuff | 0x01; //bit 8 of QoS Control Field
 }
 
 void WifiMacHeader::SetQosNoMeshControlPresent ()
 {
-  // clear bit 0 of this variable instead of bit 8, since m_qosStuff is
-  // shifted by one byte when serialized
-  m_qosStuff = m_qosStuff & 0xfe; // bit 8 of QoS Control Field
+  //Clear bit 0 of this variable instead of bit 8, since m_qosStuff is
+  //shifted by one byte when serialized
+  m_qosStuff = m_qosStuff & 0xfe; //bit 8 of QoS Control Field
 }
 
 
@@ -1085,7 +1086,6 @@
       break;
     case WIFI_MAC_CTL_CTLWRAPPER:
       break;
-
     case WIFI_MAC_MGT_BEACON:
     case WIFI_MAC_MGT_ASSOCIATION_REQUEST:
     case WIFI_MAC_MGT_ASSOCIATION_RESPONSE:
diff -Naur ns-3.24.1/src/wifi/model/wifi-mac-header.h ns-3.25/src/wifi/model/wifi-mac-header.h
--- ns-3.24.1/src/wifi/model/wifi-mac-header.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mac-header.h	2016-03-23 21:36:53.000000000 -0700
@@ -19,6 +19,7 @@
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
+
 #ifndef WIFI_MAC_HEADER_H
 #define WIFI_MAC_HEADER_H
 
@@ -34,12 +35,12 @@
  */
 enum WifiMacType
 {
-  WIFI_MAC_CTL_RTS = 0,
+  WIFI_MAC_CTL_CTLWRAPPER = 0,
+  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,
diff -Naur ns-3.24.1/src/wifi/model/wifi-mac-queue.cc ns-3.25/src/wifi/model/wifi-mac-queue.cc
--- ns-3.24.1/src/wifi/model/wifi-mac-queue.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mac-queue.cc	2016-03-23 21:36:53.000000000 -0700
@@ -221,6 +221,7 @@
 uint32_t
 WifiMacQueue::GetSize (void)
 {
+  Cleanup ();
   return m_size;
 }
 
diff -Naur ns-3.24.1/src/wifi/model/wifi-mode.cc ns-3.25/src/wifi/model/wifi-mode.cc
--- ns-3.24.1/src/wifi/model/wifi-mode.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mode.cc	2016-03-23 21:36:53.000000000 -0700
@@ -20,6 +20,7 @@
  */
 
 #include "wifi-mode.h"
+#include "wifi-tx-vector.h"
 #include "ns3/simulator.h"
 #include "ns3/assert.h"
 #include "ns3/log.h"
@@ -72,9 +73,11 @@
 uint64_t
 WifiMode::GetPhyRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const
 {
+  //TODO: nss > 4 not supported yet
+  NS_ASSERT (nss <= 4);
   uint32_t dataRate, phyRate;
   dataRate = GetDataRate (channelWidth, isShortGuardInterval, nss);
-  switch (GetCodeRate (nss))
+  switch (GetCodeRate ())
     {
     case WIFI_CODE_RATE_5_6:
       phyRate = dataRate * 6 / 5;
@@ -97,22 +100,25 @@
 }
 
 uint64_t
+WifiMode::GetPhyRate (WifiTxVector txVector) const
+{
+  return GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), txVector.GetNss ());
+}
+
+uint64_t
 WifiMode::GetDataRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const
 {
+  //TODO: nss > 4 not supported yet
+  NS_ASSERT (nss <= 4);
   struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
   uint64_t dataRate = 0;
-  if (nss > 1)
-    {
-      NS_FATAL_ERROR ("MIMO is not supported");
-      return 0;
-    }
   if (item->modClass == WIFI_MOD_CLASS_DSSS)
     {
-      dataRate = (11000000 / 11) * log2 (GetConstellationSize (1));
+      dataRate = (11000000 / 11) * log2 (GetConstellationSize ());
     }
   else if (item->modClass == WIFI_MOD_CLASS_HR_DSSS)
     {
-      dataRate = (11000000 / 8) * log2 (GetConstellationSize (1));
+      dataRate = (11000000 / 8) * log2 (GetConstellationSize ());
     }
   else if (item->modClass == WIFI_MOD_CLASS_OFDM || item->modClass == WIFI_MOD_CLASS_ERP_OFDM)
     {
@@ -134,7 +140,7 @@
         }
 
       double codingRate;
-      switch (GetCodeRate (1))
+      switch (GetCodeRate ())
         {
         case WIFI_CODE_RATE_3_4:
           codingRate = (3.0 / 4.0);
@@ -151,18 +157,22 @@
           break;
         }
 
-      uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize (1));
+      uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize ());
 
       dataRate = lrint (ceil (symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate));
     }
   else if (item->modClass == WIFI_MOD_CLASS_HT || item->modClass == WIFI_MOD_CLASS_VHT)
     {
-      if (item->mcsValue == 9)
+      if (item->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 9 && nss != 3)
         {
-          //VHT MCS 9 forbidden at 20 MHz
+          //VHT MCS 9 forbidden at 20 MHz (only allowed when NSS = 3)
           NS_ASSERT (channelWidth != 20);
         }
-
+      if (item->modClass == WIFI_MOD_CLASS_VHT && item->mcsValue == 6 && nss == 3)
+        {
+          //VHT MCS 6 forbidden at 80 MHz when NSS = 3
+          NS_ASSERT (channelWidth != 80);
+        }
       double symbolRate;
       if (!isShortGuardInterval)
         {
@@ -192,7 +202,7 @@
         }
 
       double codingRate;
-      switch (GetCodeRate (nss))
+      switch (GetCodeRate ())
         {
         case WIFI_CODE_RATE_5_6:
           codingRate = (5.0 / 6.0);
@@ -208,11 +218,11 @@
           break;
         case WIFI_CODE_RATE_UNDEFINED:
         default:
-          NS_FATAL_ERROR ("trying to get datarate for a mcs without any coding rate defined");
+          NS_FATAL_ERROR ("trying to get datarate for a mcs without any coding rate defined with nss: " << (uint16_t) nss);
           break;
         }
 
-      uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize (nss));
+      uint32_t numberOfBitsPerSubcarrier = log2 (GetConstellationSize ());
 
       dataRate = lrint (ceil (symbolRate * usableSubCarriers * numberOfBitsPerSubcarrier * codingRate));
     }
@@ -220,18 +230,23 @@
     {
       NS_ASSERT ("undefined datarate for the modulation class!");
     }
+  dataRate *= nss; // number of spatial streams
   return dataRate;
 }
 
+uint64_t
+WifiMode::GetDataRate (WifiTxVector txVector) const
+{
+  return GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), txVector.GetNss ());
+}
+
 enum WifiCodeRate
-WifiMode::GetCodeRate (uint8_t nss) const
+WifiMode::GetCodeRate (void) const
 {
   struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
   if (item->modClass == WIFI_MOD_CLASS_HT)
     {
-      NS_ASSERT (nss <= 4);
-      NS_ASSERT ((item->mcsValue - (8 * (nss - 1))) >= 0 || (item->mcsValue - (8 * (nss - 1))) <= 7);
-      switch (item->mcsValue - (8 * (nss - 1)))
+      switch (item->mcsValue % 8)
         {
         case 0:
         case 1:
@@ -251,7 +266,6 @@
     }
   else if (item->modClass == WIFI_MOD_CLASS_VHT)
     {
-      NS_ASSERT (nss <= 8);
       switch (item->mcsValue)
         {
         case 0:
@@ -279,14 +293,12 @@
 }
 
 uint16_t
-WifiMode::GetConstellationSize (uint8_t nss) const
+WifiMode::GetConstellationSize (void) const
 {
   struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
   if (item->modClass == WIFI_MOD_CLASS_HT)
     {
-      NS_ASSERT (nss <= 4);
-      NS_ASSERT ((item->mcsValue - (8 * (nss - 1))) >= 0 || (item->mcsValue - (8 * (nss - 1))) <= 7);
-      switch (item->mcsValue - (8 * (nss - 1)))
+      switch (item->mcsValue % 8)
         {
         case 0:
           return 2;
@@ -306,7 +318,6 @@
     }
   else if (item->modClass == WIFI_MOD_CLASS_VHT)
     {
-      NS_ASSERT (nss <= 8);
       switch (item->mcsValue)
         {
         case 0:
@@ -378,6 +389,142 @@
   return item->modClass;
 }
 
+uint64_t
+WifiMode::GetNonHtReferenceRate (void) const
+{
+  uint64_t dataRate;
+  struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
+  if (item->modClass == WIFI_MOD_CLASS_HT || item->modClass == WIFI_MOD_CLASS_VHT)
+    {
+      WifiCodeRate codeRate = GetCodeRate();
+      switch(GetConstellationSize())
+        {
+        case 2:
+          if (codeRate == WIFI_CODE_RATE_1_2)
+            dataRate = 6000000;
+          else if (codeRate == WIFI_CODE_RATE_3_4)
+            dataRate = 9000000;
+          else
+            NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
+          break;
+        case 4:
+          if (codeRate == WIFI_CODE_RATE_1_2)
+            dataRate = 12000000;
+          else if (codeRate == WIFI_CODE_RATE_3_4)
+            dataRate = 18000000;
+          else
+            NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
+          break;
+        case 16:
+          if (codeRate == WIFI_CODE_RATE_1_2)
+            dataRate = 24000000;
+          else if (codeRate == WIFI_CODE_RATE_3_4)
+            dataRate = 36000000;
+          else
+            NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
+          break;
+        case 64:
+          if (codeRate == WIFI_CODE_RATE_1_2 || codeRate == WIFI_CODE_RATE_2_3)
+            dataRate = 48000000;
+          else if (codeRate == WIFI_CODE_RATE_3_4 || codeRate == WIFI_CODE_RATE_5_6)
+            dataRate = 54000000;
+          else
+            NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
+          break;
+        case 256:
+          if (codeRate == WIFI_CODE_RATE_3_4 || codeRate == WIFI_CODE_RATE_5_6)
+            dataRate = 54000000;
+          else
+            NS_FATAL_ERROR ("Trying to get reference rate for a MCS with wrong combination of coding rate and modulation");
+          break;
+        default:
+            NS_FATAL_ERROR ("Wrong constellation size");
+        }
+    }
+  else
+    {
+      NS_FATAL_ERROR ("Trying to get reference rate for a non-HT rate");
+    }
+  return dataRate;
+}
+
+bool
+WifiMode::IsHigherCodeRate (WifiMode mode) const
+{
+  WifiCodeRate codeRate = mode.GetCodeRate ();
+  switch (GetCodeRate ())
+    {
+    case WIFI_CODE_RATE_1_2:
+      return false; //This is the smallest code rate.
+    case WIFI_CODE_RATE_2_3:
+      return (codeRate == WIFI_CODE_RATE_1_2);
+    case WIFI_CODE_RATE_3_4:
+      return (codeRate == WIFI_CODE_RATE_1_2 || codeRate == WIFI_CODE_RATE_2_3);
+    case WIFI_CODE_RATE_5_6:
+      return (codeRate == WIFI_CODE_RATE_1_2 || codeRate == WIFI_CODE_RATE_2_3 || codeRate == WIFI_CODE_RATE_3_4);
+    default:
+      NS_FATAL_ERROR ("Wifi Code Rate not defined");
+      return false;
+    }
+}
+
+bool
+WifiMode::IsHigherDataRate (WifiMode mode) const
+{
+  struct WifiModeFactory::WifiModeItem *item = WifiModeFactory::GetFactory ()->Get (m_uid);
+  switch(item->modClass)
+    {
+    case WIFI_MOD_CLASS_DSSS:
+      if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS)
+        {
+          return (GetConstellationSize () > mode.GetConstellationSize ());
+        }
+      else
+        {
+          return false;
+        }
+    case WIFI_MOD_CLASS_HR_DSSS:
+      if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS)
+        {
+          return true;
+        }
+      else
+        {
+          return (GetConstellationSize () > mode.GetConstellationSize ());
+        }
+    case WIFI_MOD_CLASS_ERP_OFDM:
+    case WIFI_MOD_CLASS_OFDM:
+    case WIFI_MOD_CLASS_HT:
+    case WIFI_MOD_CLASS_VHT:
+      if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS)
+        {
+          return true;
+        }
+      else if (mode.GetModulationClass () == WIFI_MOD_CLASS_HR_DSSS)
+        {
+          return (mode.GetConstellationSize () > GetConstellationSize ());
+        }
+      else
+        {
+          if (GetConstellationSize () > mode.GetConstellationSize ())
+            {
+              return true;
+            }
+          else if (GetConstellationSize () == mode.GetConstellationSize ())
+            {
+              return IsHigherCodeRate (mode);
+            }
+          else
+            {
+              return false;
+            }
+        }
+    default:
+      NS_FATAL_ERROR ("Modulation class not defined");
+      return false;
+    }
+}
+
 WifiMode::WifiMode ()
   : m_uid (0)
 {
diff -Naur ns-3.24.1/src/wifi/model/wifi-mode.h ns-3.25/src/wifi/model/wifi-mode.h
--- ns-3.24.1/src/wifi/model/wifi-mode.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-mode.h	2016-03-23 21:36:53.000000000 -0700
@@ -31,6 +31,8 @@
 
 namespace ns3 {
 
+class WifiTxVector;
+
 /**
  * This enumeration defines the modulation classes per
  * (Table 9-4 "Modulation classes"; IEEE 802.11-2012).
@@ -110,6 +112,15 @@
    */
   uint64_t GetPhyRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const;
   /**
+   * \param txVector the WifiTxVector of the signal
+   *
+   * \returns the physical bit rate of this signal.
+   *
+   * If a transmission mode uses 1/2 FEC, and if its
+   * data rate is 3.25Mbps, the phy rate is 6.5Mbps
+   */
+  uint64_t GetPhyRate (WifiTxVector txVector) const;
+  /**
    *
    * \param channelWidth the considered channel width in MHz
    * \param isShortGuardInterval whether short guard interval is considered or not
@@ -119,19 +130,19 @@
    */
   uint64_t GetDataRate (uint32_t channelWidth, bool isShortGuardInterval, uint8_t nss) const;
   /**
+   * \param txVector the WifiTxVector of the signal
    *
-   * \param nss the considered number of streams
-   *
+   * \returns the data bit rate of this signal.
+   */
+  uint64_t GetDataRate (WifiTxVector txVector) const;
+  /**
    * \returns the coding rate of this transmission mode
    */
-  enum WifiCodeRate GetCodeRate (uint8_t nss) const;
+  enum WifiCodeRate GetCodeRate (void) const;
   /**
-   *
-   * \param nss the considered number of streams
-   *
    * \returns the size of the modulation constellation.
    */
-  uint16_t GetConstellationSize (uint8_t nss) const;
+  uint16_t GetConstellationSize (void) const;
   /**
    * \returns the MCS value.
    */
@@ -159,7 +170,26 @@
    * \returns the Modulation Class (Section 9.7.8 "Modulation classes"; IEEE 802.11-2012)
    * to which this WifiMode belongs.
    */
-  enum WifiModulationClass GetModulationClass () const;
+  enum WifiModulationClass GetModulationClass () const;  
+  /**
+   * \returns the rate (in bps) of the non-HT Reference Rate
+   * which corresponds to the HT MCS of this WifiMode.
+   *
+   * To convert an HT MCS to is corresponding non-HT Reference Rate
+   * use the modulation and coding rate of the HT MCS
+   * and lookup in Table 9-5 of IEEE 802.11-2012.
+   */
+  uint64_t GetNonHtReferenceRate (void) const;
+  /**
+   * \returns true if this WifiMode has a
+   * a code rate strictly higher than mode.
+   */
+  bool IsHigherCodeRate (WifiMode mode) const;
+  /**
+   * \returns true if this WifiMode has a
+   * a rate strictly higher than mode.
+   */
+  bool IsHigherDataRate (WifiMode mode) const;
 
   /**
    * Create an invalid WifiMode. Calling any method on the
diff -Naur ns-3.24.1/src/wifi/model/wifi-net-device.cc ns-3.25/src/wifi/model/wifi-net-device.cc
--- ns-3.24.1/src/wifi/model/wifi-net-device.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-net-device.cc	2016-03-23 21:36:53.000000000 -0700
@@ -317,7 +317,6 @@
 WifiNetDevice::ForwardUp (Ptr<Packet> packet, Mac48Address from, Mac48Address to)
 {
   LlcSnapHeader llc;
-  packet->RemoveHeader (llc);
   enum NetDevice::PacketType type;
   if (to.IsBroadcast ())
     {
@@ -339,9 +338,14 @@
   if (type != NetDevice::PACKET_OTHERHOST)
     {
       m_mac->NotifyRx (packet);
+      packet->RemoveHeader (llc);
       m_forwardUp (this, packet, llc.GetType (), from);
     }
-
+  else
+    {
+      packet->RemoveHeader (llc);
+    }
+    
   if (!m_promiscRx.IsNull ())
     {
       m_mac->NotifyPromiscRx (packet);
diff -Naur ns-3.24.1/src/wifi/model/wifi-phy.cc ns-3.25/src/wifi/model/wifi-phy.cc
--- ns-3.24.1/src/wifi/model/wifi-phy.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-phy.cc	2016-03-23 21:36:53.000000000 -0700
@@ -243,14 +243,14 @@
     case WIFI_MOD_CLASS_VHT:
       switch (txVector.GetChannelWidth ())
         {
-        case 5000000:
+        case 5:
           return WifiPhy::GetOfdmRate1_5MbpsBW5MHz ();
-        case 10000000:
+        case 10:
           return WifiPhy::GetOfdmRate3MbpsBW10MHz ();
-        case 20000000:
-        case 40000000:
-        case 80000000:
-        case 160000000:
+        case 20:
+        case 40:
+        case 80:
+        case 160:
         default:
           //(Section 18.3.2 "PLCP frame format"; IEEE Std 802.11-2012)
           //actually this is only the first part of the PlcpHeader,
@@ -262,7 +262,7 @@
       return WifiPhy::GetErpOfdmRate6Mbps ();
     case WIFI_MOD_CLASS_DSSS:
     case WIFI_MOD_CLASS_HR_DSSS:
-      if (preamble == WIFI_PREAMBLE_LONG)
+      if (preamble == WIFI_PREAMBLE_LONG || payloadMode == WifiPhy::GetDsssRate1Mbps ())
         {
           //(Section 16.2.3 "PLCP field definitions" and Section 17.2.2.2 "Long PPDU format"; IEEE Std 802.11-2012)
           return WifiPhy::GetDsssRate1Mbps ();
@@ -291,7 +291,7 @@
       {
         switch (txVector.GetChannelWidth ())
           {
-          case 20000000:
+          case 20:
           default:
             //(Section 18.3.3 "PLCP preamble (SYNC))" and Figure 18-4 "OFDM training structure"; IEEE Std 802.11-2012)
             //also (Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012)
@@ -300,10 +300,10 @@
             //header, see Section 18.3.2 and Figure 18-1) is sent using the
             //payload mode.
             return MicroSeconds (4);
-          case 10000000:
+          case 10:
             //(Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012)
             return MicroSeconds (8);
-          case 5000000:
+          case 5:
             //(Section 18.3.2.4 "Timing related parameters" Table 18-5 "Timing-related parameters"; IEEE Std 802.11-2012)
             return MicroSeconds (16);
           }
@@ -326,7 +326,7 @@
       return MicroSeconds (4);
     case WIFI_MOD_CLASS_DSSS:
     case WIFI_MOD_CLASS_HR_DSSS:
-      if (preamble == WIFI_PREAMBLE_SHORT)
+      if ((preamble == WIFI_PREAMBLE_SHORT) && (txVector.GetMode ().GetDataRate (22, 0, 1) > 1000000))
         {
           //(Section 17.2.2.3 "Short PPDU format" and Figure 17-2 "Short PPDU format"; IEEE Std 802.11-2012)
           return MicroSeconds (24);
@@ -355,16 +355,16 @@
       {
         switch (txVector.GetChannelWidth ())
           {
-          case 20000000:
+          case 20:
           default:
             //(Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             //also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
             return MicroSeconds (16);
-          case 10000000:
+          case 10:
             //(Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             //also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
             return MicroSeconds (32);
-          case 5000000:
+          case 5:
             //(Section 18.3.3 "PLCP preamble (SYNC))" Figure 18-4 "OFDM training structure"
             //also Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
             return MicroSeconds (64);
@@ -378,7 +378,7 @@
       return MicroSeconds (16);
     case WIFI_MOD_CLASS_DSSS:
     case WIFI_MOD_CLASS_HR_DSSS:
-      if (preamble == WIFI_PREAMBLE_SHORT)
+      if ((preamble == WIFI_PREAMBLE_SHORT) && (txVector.GetMode ().GetDataRate (22, 0, 1) > 1000000))
         {
           //(Section 17.2.2.3 "Short PPDU format)" Figure 17-2 "Short PPDU format"; IEEE Std 802.11-2012)
           return MicroSeconds (72);
@@ -395,7 +395,13 @@
 }
 
 Time
-WifiPhy::GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag)
+WifiPhy::GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency)
+{
+  return GetPayloadDuration (size, txVector, preamble, frequency, NORMAL_MPDU, 0);
+}
+
+Time
+WifiPhy::GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, enum mpduType mpdutype, uint8_t incFlag)
 {
   WifiMode payloadMode = txVector.GetMode ();
   NS_LOG_FUNCTION (size << payloadMode);
@@ -411,14 +417,14 @@
 
         switch (txVector.GetChannelWidth ())
           {
-          case 20000000:
+          case 20:
           default:
             symbolDuration = MicroSeconds (4);
             break;
-          case 10000000:
+          case 10:
             symbolDuration = MicroSeconds (8);
             break;
-          case 5000000:
+          case 5:
             symbolDuration = MicroSeconds (16);
             break;
           }
@@ -426,20 +432,19 @@
         //(Section 18.3.2.3 "Modulation-dependent parameters" Table 18-4 "Modulation-dependent parameters"; IEEE Std 802.11-2012)
         //corresponds to N_{DBPS} in the table
         double numDataBitsPerSymbol = payloadMode.GetDataRate (txVector.GetChannelWidth (), 0, 1) * symbolDuration.GetNanoSeconds () / 1e9;
-        //(Section 18.3.5.4 "Pad bits (PAD)" Equation 18-11; IEEE Std 802.11-2012)
-        uint32_t numSymbols;
+        double numSymbols;
 
-        if (packetType == 1 && preamble != WIFI_PREAMBLE_NONE)
+        if (mpdutype == MPDU_IN_AGGREGATE && preamble != WIFI_PREAMBLE_NONE)
           {
             //First packet in an A-MPDU
-            numSymbols = ceil ((16 + size * 8.0 + 6) / numDataBitsPerSymbol);
+            numSymbols = ((16 + size * 8.0 + 6) / numDataBitsPerSymbol);
             if (incFlag == 1)
               {
                 m_totalAmpduSize += size;
                 m_totalAmpduNumSymbols += numSymbols;
               }
           }
-        else if (packetType == 1 && preamble == WIFI_PREAMBLE_NONE)
+        else if (mpdutype == MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE)
           {
             //consecutive packets in an A-MPDU
             numSymbols = ((size * 8.0) / numDataBitsPerSymbol);
@@ -449,11 +454,12 @@
                 m_totalAmpduNumSymbols += numSymbols;
               }
           }
-        else if (packetType == 2 && preamble == WIFI_PREAMBLE_NONE)
+        else if (mpdutype == LAST_MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE)
           {
             //last packet in an A-MPDU
             uint32_t totalAmpduSize = m_totalAmpduSize + size;
             numSymbols = lrint (ceil ((16 + totalAmpduSize * 8.0 + 6) / numDataBitsPerSymbol));
+            NS_ASSERT (m_totalAmpduNumSymbols <= numSymbols);
             numSymbols -= m_totalAmpduNumSymbols;
             if (incFlag == 1)
               {
@@ -461,7 +467,7 @@
                 m_totalAmpduNumSymbols = 0;
               }
           }
-        else if (packetType == 0 && preamble != WIFI_PREAMBLE_NONE)
+        else if (mpdutype == NORMAL_MPDU && preamble != WIFI_PREAMBLE_NONE)
           {
             //Not an A-MPDU
             numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
@@ -474,11 +480,11 @@
         //Add signal extension for ERP PHY
         if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
           {
-            return Time (numSymbols * symbolDuration) + MicroSeconds (6);
+            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ()) + MicroSeconds (6);
           }
         else
           {
-            return Time (numSymbols * symbolDuration);
+            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ());
           }
       }
     case WIFI_MOD_CLASS_HT:
@@ -507,43 +513,141 @@
           }
 
         //check tables 20-35 and 20-36 in the .11n standard to get cases when nes = 2
+        double Nes = 1;
+        if (payloadMode.GetUniqueName () == "HtMcs21"
+           || payloadMode.GetUniqueName () == "HtMcs22"
+           || payloadMode.GetUniqueName () == "HtMcs23"
+           || payloadMode.GetUniqueName () == "HtMcs28"
+           || payloadMode.GetUniqueName () == "HtMcs29"
+           || payloadMode.GetUniqueName () == "HtMcs30"
+           || payloadMode.GetUniqueName () == "HtMcs31")
+          {
+            Nes = 2;
+          }
         //check tables 22-30 to 22-61 in the .11ac standard to get cases when nes > 1
-        double Nes;
+        //todo: improve logic to reduce the number of if cases
+        //todo: extend to NSS > 4 for VHT rates
+        if (txVector.GetChannelWidth () == 40
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () >= 8)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 80
+            && txVector.GetNss () == 2
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 80
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 80
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () == 9)
+          {
+            Nes = 3;
+          }
+        if (txVector.GetChannelWidth () == 80
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 4)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 80
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 3;
+          }
         if (txVector.GetChannelWidth () == 160
-            && (payloadMode.GetUniqueName () == "VhtMcs7" || payloadMode.GetUniqueName () == "VhtMcs8" || payloadMode.GetUniqueName () == "VhtMcs9"))
+            && payloadMode.GetMcsValue () >= 7)
           {
             Nes = 2;
           }
-        else
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 2
+            && payloadMode.GetMcsValue () >= 4)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 2
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 3;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () >= 3)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () >= 5)
+          {
+            Nes = 3;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 3
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 4;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 2)
+          {
+            Nes = 2;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 4)
           {
-            Nes = 1;
+            Nes = 3;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 5)
+          {
+            Nes = 4;
+          }
+        if (txVector.GetChannelWidth () == 160
+            && txVector.GetNss () == 4
+            && payloadMode.GetMcsValue () >= 7)
+          {
+            Nes = 6;
           }
 
         //IEEE Std 802.11n, section 20.3.11, equation (20-32)
-        uint32_t numSymbols;
-        double numDataBitsPerSymbol = payloadMode.GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1) * txVector.GetNss () * symbolDuration.GetNanoSeconds () / 1e9;
+        double numDataBitsPerSymbol = payloadMode.GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), txVector.GetNss ()) * symbolDuration.GetNanoSeconds () / 1e9;
+        double numSymbols;
 
-        if (packetType == 1 && preamble != WIFI_PREAMBLE_NONE)
+        if (mpdutype == MPDU_IN_AGGREGATE && preamble != WIFI_PREAMBLE_NONE)
           {
             //First packet in an A-MPDU
-            numSymbols = ceil (m_Stbc * (16 + size * 8.0 + 6 * Nes) / (m_Stbc * numDataBitsPerSymbol));
+            numSymbols = (m_Stbc * (16 + size * 8.0 + 6 * Nes) / (m_Stbc * numDataBitsPerSymbol));
             if (incFlag == 1)
               {
                 m_totalAmpduSize += size;
                 m_totalAmpduNumSymbols += numSymbols;
               }
           }
-        else if (packetType == 1 && preamble == WIFI_PREAMBLE_NONE)
+        else if (mpdutype == MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE)
           {
             //consecutive packets in an A-MPDU
-            numSymbols = m_Stbc * ((size * 8.0 ) / (m_Stbc * numDataBitsPerSymbol));
+            numSymbols = (m_Stbc * size * 8.0) / (m_Stbc * numDataBitsPerSymbol);
             if (incFlag == 1)
               {
                 m_totalAmpduSize += size;
                 m_totalAmpduNumSymbols += numSymbols;
               }
           }
-        else if (packetType == 2 && preamble == WIFI_PREAMBLE_NONE)
+        else if (mpdutype == LAST_MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE)
           {
             //last packet in an A-MPDU
             uint32_t totalAmpduSize = m_totalAmpduSize + size;
@@ -556,7 +660,7 @@
                 m_totalAmpduNumSymbols = 0;
               }
           }
-        else if (packetType == 0 && preamble != WIFI_PREAMBLE_NONE)
+        else if (mpdutype == NORMAL_MPDU && preamble != WIFI_PREAMBLE_NONE)
           {
             //Not an A-MPDU
             numSymbols = lrint (m_Stbc * ceil ((16 + size * 8.0 + 6.0 * Nes) / (m_Stbc * numDataBitsPerSymbol)));
@@ -566,13 +670,13 @@
             NS_FATAL_ERROR ("Wrong combination of preamble and packet type");
           }
 
-        if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT && frequency >= 2400 && frequency <= 2500 && ((packetType == 0 && preamble != WIFI_PREAMBLE_NONE) || (packetType == 2 && preamble == WIFI_PREAMBLE_NONE))) //at 2.4 GHz
+        if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_HT && frequency >= 2400 && frequency <= 2500 && ((mpdutype == NORMAL_MPDU && preamble != WIFI_PREAMBLE_NONE) || (mpdutype == LAST_MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE))) //at 2.4 GHz
           {
-            return Time (numSymbols * symbolDuration) + MicroSeconds (6);
+            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ()) + MicroSeconds (6);
           }
         else //at 5 GHz
           {
-            return Time (numSymbols * symbolDuration);
+            return NanoSeconds (numSymbols * symbolDuration.GetNanoSeconds ());
           }
       }
     case WIFI_MOD_CLASS_DSSS:
@@ -602,13 +706,19 @@
 }
 
 Time
-WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag)
+WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, enum mpduType mpdutype, uint8_t incFlag)
 {
   Time duration = CalculatePlcpPreambleAndHeaderDuration (txVector, preamble)
-    + GetPayloadDuration (size, txVector, preamble, frequency, packetType, incFlag);
+    + GetPayloadDuration (size, txVector, preamble, frequency, mpdutype, incFlag);
   return duration;
 }
 
+Time
+WifiPhy::CalculateTxDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency)
+{
+  return CalculateTxDuration (size, txVector, preamble, frequency, NORMAL_MPDU, 0);
+}
+
 void
 WifiPhy::NotifyTxBegin (Ptr<const Packet> packet)
 {
@@ -1449,6 +1559,42 @@
   return mcs;
 }
 
+bool
+WifiPhy::IsValidTxVector (WifiTxVector txVector)
+{
+  uint32_t chWidth = txVector.GetChannelWidth();
+  uint8_t nss = txVector.GetNss();
+  std::string modeName = txVector.GetMode().GetUniqueName();
+
+  if (chWidth == 20)
+    {
+      if (nss != 3 && nss != 6)
+        {
+          return (modeName != "VhtMcs9");
+        }
+    }
+  else if (chWidth == 80)
+    {
+      if (nss == 3 || nss == 7)
+        {
+          return (modeName != "VhtMcs6");
+        }
+      else if (nss == 6)
+        {
+          return (modeName != "VhtMcs9");
+        }
+    }
+  else if (chWidth == 160)
+    {
+      if (nss == 3)
+        {
+          return (modeName != "VhtMcs9");
+        }
+    }
+
+  return true;
+}
+
 std::ostream& operator<< (std::ostream& os, enum WifiPhy::State state)
 {
   switch (state)
diff -Naur ns-3.24.1/src/wifi/model/wifi-phy.h ns-3.25/src/wifi/model/wifi-phy.h
--- ns-3.24.1/src/wifi/model/wifi-phy.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-phy.h	2016-03-23 21:36:53.000000000 -0700
@@ -39,6 +39,19 @@
 class WifiChannel;
 class NetDevice;
 
+/**
+ * This enumeration defines the type of an MPDU.
+ */
+enum mpduType
+{
+  /** The MPDU is not part of an A-MPDU */
+  NORMAL_MPDU = 0,
+  /** The MPDU is part of an A-MPDU, but is not the last aggregate */
+  MPDU_IN_AGGREGATE,
+  /** The MPDU is the last aggregate in an A-MPDU */
+  LAST_MPDU_IN_AGGREGATE
+};
+
 struct signalNoiseDbm
 {
   double signal; //in dBm
@@ -47,8 +60,8 @@
 
 struct mpduInfo
 {
-  uint8_t packetType;
-  uint32_t referenceNumber;
+  enum mpduType type;
+  uint32_t mpduRefNumber;
 };
 
 /**
@@ -179,8 +192,9 @@
   /**
    * arg1: packet received unsuccessfully
    * arg2: snr of packet
+   * arg3: PHY-RXEND flag
    */
-  typedef Callback<void, Ptr<const Packet>, double> RxErrorCallback;
+  typedef Callback<void, Ptr<Packet>, double, bool> RxErrorCallback;
 
   static TypeId GetTypeId (void);
 
@@ -221,10 +235,17 @@
    *        this packet, and txPowerLevel, a power level to use to send this packet. The real transmission
    *        power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels
    * \param preamble the type of preamble to use to send this packet.
-   * \param packetType the type of the packet 0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU
-   * \param mpduReferenceNumber the A-MPDU reference number (must be a different value for each A-MPDU but the same for each subframe within one A-MPDU)
    */
-  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber) = 0;
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble) = 0;
+  /**
+   * \param packet the packet to send
+   * \param txVector the TXVECTOR that has tx parameters such as mode, the transmission mode to use to send
+   *        this packet, and txPowerLevel, a power level to use to send this packet. The real transmission
+   *        power is calculated as txPowerMin + txPowerLevel * (txPowerMax - txPowerMin) / nTxLevels
+   * \param preamble the type of preamble to use to send this packet.
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
+   */
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble, enum mpduType mpdutype) = 0;
 
   /**
    * \param listener the new listener
@@ -302,12 +323,21 @@
    * \param txVector the TXVECTOR used for the transmission of this packet
    * \param preamble the type of preamble to use for this packet.
    * \param frequency the channel center frequency (MHz)
-   * \param packetType the type of the packet 0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU
+   *
+   * \return the total amount of time this PHY will stay busy for the transmission of these bytes.
+   */
+  Time CalculateTxDuration (uint32_t size, WifiTxVector txVector, enum WifiPreamble preamble, double frequency);
+  /**
+   * \param size the number of bytes in the packet to send
+   * \param txVector the TXVECTOR used for the transmission of this packet
+   * \param preamble the type of preamble to use for this packet.
+   * \param frequency the channel center frequency (MHz)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param incFlag this flag is used to indicate that the static variables need to be update or not. This function is called a couple of times for the same packet so static variables should not be increased each time.
    *
    * \return the total amount of time this PHY will stay busy for the transmission of these bytes.
    */
-  Time CalculateTxDuration (uint32_t size, WifiTxVector txVector, enum WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag);
+  Time CalculateTxDuration (uint32_t size, WifiTxVector txVector, enum WifiPreamble preamble, double frequency, enum mpduType mpdutype, uint8_t incFlag);
 
   /**
    * \param txVector the transmission parameters used for this packet
@@ -388,12 +418,21 @@
    * \param txVector the TXVECTOR used for the transmission of this packet
    * \param preamble the type of preamble to use for this packet
    * \param frequency the channel center frequency (MHz)
-   * \param packetType the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU)
+   *
+   * \return the duration of the payload
+   */
+  Time GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency);
+  /**
+   * \param size the number of bytes in the packet to send
+   * \param txVector the TXVECTOR used for the transmission of this packet
+   * \param preamble the type of preamble to use for this packet
+   * \param frequency the channel center frequency (MHz)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param incFlag this flag is used to indicate that the static variables need to be update or not. This function is called a couple of times for the same packet so static variables should not be increased each time
    *
    * \return the duration of the payload
    */
-  Time GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, uint8_t packetType, uint8_t incFlag);
+  Time GetPayloadDuration (uint32_t size, WifiTxVector txVector, WifiPreamble preamble, double frequency, enum mpduType mpdutype, uint8_t incFlag);
 
   /**
    * The WifiPhy::GetNModes() and WifiPhy::GetMode() methods are used
@@ -444,13 +483,13 @@
   virtual bool IsModeSupported (WifiMode mode) const = 0;
 
   /**
-   * \param txMode the transmission mode
+   * \param txVector the transmission vector
    * \param ber the probability of bit error rate
    *
    * \return the minimum snr which is required to achieve
-   *          the requested ber for the specified transmission mode. (W/W)
+   *          the requested ber for the specified transmission vector. (W/W)
    */
-  virtual double CalculateSnr (WifiMode txMode, double ber) const = 0;
+  virtual double CalculateSnr (WifiTxVector txVector, double ber) const = 0;
 
   /**
   * The WifiPhy::NBssMembershipSelectors() method is used
@@ -1017,6 +1056,15 @@
    * \return MCS 9 from VHT MCS values
    */
   static WifiMode GetVhtMcs9 ();
+  /**
+   * The standard disallows certain combinations of WifiMode, number of
+   * spatial streams, and channel widths.  This method can be used to
+   * check whether this WifiTxVector contains an invalid combination.
+   *
+   * \param txVector the WifiTxVector to inspect
+   * \return true if the WifiTxVector parameters are allowed by the standard
+   */
+  static bool IsValidTxVector (WifiTxVector txVector);
 
   /**
    * Public method used to fire a PhyTxBegin trace.
@@ -1111,8 +1159,7 @@
    */
   typedef void (* MonitorSnifferRxCallback)(Ptr<const Packet> packet, uint16_t channelFreqMhz,
                                             uint16_t channelNumber, uint32_t rate, WifiPreamble preamble,
-                                            WifiTxVector txVector, struct mpduInfo aMpdu,
-                                            struct signalNoiseDbm signalNoise);
+                                            WifiTxVector txVector, struct mpduInfo aMpdu, struct signalNoiseDbm signalNoise);
 
   /**
    * Public method used to fire a MonitorSniffer trace for a wifi packet being transmitted.
@@ -1220,6 +1267,14 @@
    */
   virtual bool GetGreenfield (void) const = 0;
   /**
+   * \param preamble sets whether short PLCP preamble is supported or not
+   */
+  virtual void SetShortPlcpPreambleSupported (bool preamble) = 0;
+  /**
+   * \return true if short PLCP preamble is supported, false otherwise
+   */
+  virtual bool GetShortPlcpPreambleSupported (void) const = 0;
+  /**
    * \return the channel width
    */
   virtual uint32_t GetChannelWidth (void) const = 0;
@@ -1227,7 +1282,22 @@
    * \param channelwidth channel width
    */
   virtual void SetChannelWidth (uint32_t channelwidth) = 0;
-
+  /**
+   * \return the maximum number of supported Rx spatial streams
+   */
+  virtual uint8_t GetSupportedRxSpatialStreams (void) const = 0;
+  /**
+   * \return the maximum number of supported Tx spatial streams
+   */
+  virtual uint8_t GetSupportedTxSpatialStreams (void) const = 0;
+  /**
+   * \param width channel width (in MHz) to support
+   */
+  virtual void AddSupportedChannelWidth (uint32_t width) = 0;
+  /**
+   * \return a vector containing the supported channel widths, values in MHz
+   */
+  virtual std::vector<uint32_t> GetSupportedChannelWidthSet (void) const = 0;
 
 private:
   /**
@@ -1290,8 +1360,7 @@
    * const  references because of their sizes.
    */
   TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t,
-                 WifiPreamble, WifiTxVector,
-                 struct mpduInfo, struct signalNoiseDbm> m_phyMonitorSniffRxTrace;
+                 WifiPreamble, WifiTxVector, struct mpduInfo, struct signalNoiseDbm> m_phyMonitorSniffRxTrace;
 
   /**
    * A trace source that emulates a wifi device in monitor mode
@@ -1306,10 +1375,9 @@
    * of its size.
    */
   TracedCallback<Ptr<const Packet>, uint16_t, uint16_t, uint32_t,
-                 WifiPreamble, WifiTxVector,
-                 struct mpduInfo> m_phyMonitorSniffTxTrace;
+                 WifiPreamble, WifiTxVector, struct mpduInfo> m_phyMonitorSniffTxTrace;
 
-  uint32_t m_totalAmpduNumSymbols; //!< Number of symbols previously transmitted for the MPDUs in an A-MPDU, used for the computation of the number of symbols needed for the last MPDU in the A-MPDU
+  double m_totalAmpduNumSymbols;   //!< Number of symbols previously transmitted for the MPDUs in an A-MPDU, used for the computation of the number of symbols needed for the last MPDU in the A-MPDU
   uint32_t m_totalAmpduSize;       //!< Total size of the previously transmitted MPDUs in an A-MPDU, used for the computation of the number of symbols needed for the last MPDU in the A-MPDU
 };
 
diff -Naur ns-3.24.1/src/wifi/model/wifi-phy-state-helper.cc ns-3.25/src/wifi/model/wifi-phy-state-helper.cc
--- ns-3.24.1/src/wifi/model/wifi-phy-state-helper.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-phy-state-helper.cc	2016-03-23 21:36:53.000000000 -0700
@@ -442,14 +442,14 @@
 }
 
 void
-WifiPhyStateHelper::SwitchFromRxEndError (Ptr<const Packet> packet, double snr)
+WifiPhyStateHelper::SwitchFromRxEndError (Ptr<Packet> packet, double snr, bool isEndOfFrame)
 {
   m_rxErrorTrace (packet, snr);
   NotifyRxEndError ();
   DoSwitchFromRx ();
   if (!m_rxErrorCallback.IsNull ())
     {
-      m_rxErrorCallback (packet, snr);
+      m_rxErrorCallback (packet, snr, isEndOfFrame);
     }
 }
 
diff -Naur ns-3.24.1/src/wifi/model/wifi-phy-state-helper.h ns-3.25/src/wifi/model/wifi-phy-state-helper.h
--- ns-3.24.1/src/wifi/model/wifi-phy-state-helper.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-phy-state-helper.h	2016-03-23 21:36:53.000000000 -0700
@@ -167,8 +167,9 @@
    *
    * \param packet the packet that we failed to received
    * \param snr the SNR of the received packet
+   * \param isEndOfFrame PHY-RXEND indication.
    */
-  void SwitchFromRxEndError (Ptr<const Packet> packet, double snr);
+  void SwitchFromRxEndError (Ptr<Packet> packet, double snr, bool isEndOfFrame);
   /**
    * Switch to CCA busy.
    *
@@ -214,11 +215,12 @@
   /**
    * TracedCallback signature for receive end error event.
    *
-   * \param [in] packet The received packet.
-   * \param [in] snr    The SNR of the received packet.
+   * \param [in] packet       The received packet.
+   * \param [in] snr          The SNR of the received packet.
+   * \param [in] isEndOfFrame PHY-RXEND indication..
    */
   typedef void (* RxEndErrorTracedCallback)
-    (Ptr<const Packet> packet, double snr);
+    (Ptr<const Packet> packet, double snr, bool isEndOfFrame);
 
   /**
    * TracedCallback signature for transmit event.
diff -Naur ns-3.24.1/src/wifi/model/wifi-remote-station-manager.cc ns-3.25/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.24.1/src/wifi/model/wifi-remote-station-manager.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-remote-station-manager.cc	2016-03-23 21:36:53.000000000 -0700
@@ -27,6 +27,7 @@
 #include "ns3/boolean.h"
 #include "ns3/double.h"
 #include "ns3/uinteger.h"
+#include "ns3/enum.h"
 #include "ns3/wifi-phy.h"
 #include "ns3/wifi-mac.h"
 #include "ns3/trace-source-accessor.h"
@@ -282,48 +283,60 @@
   static TypeId tid = TypeId ("ns3::WifiRemoteStationManager")
     .SetParent<Object> ()
     .SetGroupName ("Wifi")
-    .AddAttribute ("IsLowLatency", "If true, we attempt to modelize a so-called low-latency device: a device"
-                   " where decisions about tx parameters can be made on a per-packet basis and feedback about the"
-                   " transmission of each packet is obtained before sending the next. Otherwise, we modelize a "
-                   " high-latency device, that is a device where we cannot update our decision about tx parameters"
-                   " after every packet transmission.",
+    .AddAttribute ("IsLowLatency",
+                   "If true, we attempt to modelize a so-called low-latency device: "
+                   "a device where decisions about tx parameters can be made on a per-packet basis and "
+                   "feedback about the transmission of each packet is obtained before sending the next. "
+                   "Otherwise, we modelize a high-latency device, that is a device where we cannot update "
+                   "our decision about tx parameters after every packet transmission.",
+                   TypeId::ATTR_GET,
                    BooleanValue (true), //this value is ignored because there is no setter
                    MakeBooleanAccessor (&WifiRemoteStationManager::IsLowLatency),
                    MakeBooleanChecker ())
-    .AddAttribute ("MaxSsrc", "The maximum number of retransmission attempts for an RTS. This value"
-                   " will not have any effect on some rate control algorithms.",
+    .AddAttribute ("MaxSsrc",
+                   "The maximum number of retransmission attempts for an RTS. "
+                   " This value will not have any effect on some rate control algorithms.",
                    UintegerValue (7),
                    MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSsrc),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("MaxSlrc", "The maximum number of retransmission attempts for a DATA packet. This value"
-                   " will not have any effect on some rate control algorithms.",
+    .AddAttribute ("MaxSlrc",
+                   "The maximum number of retransmission attempts for a DATA packet. "
+                   "This value will not have any effect on some rate control algorithms.",
                    UintegerValue (7),
                    MakeUintegerAccessor (&WifiRemoteStationManager::m_maxSlrc),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("RtsCtsThreshold", "If  the size of the data packet + LLC header + MAC header + FCS trailer is bigger than "
-                   "this value, we use an RTS/CTS handshake before sending the data, as per IEEE Std. 802.11-2012, Section 9.3.5. "
+    .AddAttribute ("RtsCtsThreshold",
+                   "If the size of the PSDU is bigger than this value, we use an RTS/CTS handshake before sending the data frame."
                    "This value will not have any effect on some rate control algorithms.",
-                   UintegerValue (2346),
+                   UintegerValue (65535),
                    MakeUintegerAccessor (&WifiRemoteStationManager::m_rtsCtsThreshold),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("FragmentationThreshold", "If the size of the data packet + LLC header + MAC header + FCS trailer is bigger"
-                   "than this value, we fragment it such that the size of the fragments are equal or smaller "
-                   "than this value, as per IEEE Std. 802.11-2012, Section 9.5. "
+    .AddAttribute ("FragmentationThreshold",
+                   "If the size of the PSDU is bigger than this value, we fragment it such that the size of the fragments are equal or smaller. "
+                   "This value does not apply when it is carried in an A-MPDU. "
                    "This value will not have any effect on some rate control algorithms.",
                    UintegerValue (2346),
                    MakeUintegerAccessor (&WifiRemoteStationManager::DoSetFragmentationThreshold,
                                          &WifiRemoteStationManager::DoGetFragmentationThreshold),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("NonUnicastMode", "Wifi mode used for non-unicast transmissions.",
+    .AddAttribute ("NonUnicastMode",
+                   "Wifi mode used for non-unicast transmissions.",
                    WifiModeValue (),
                    MakeWifiModeAccessor (&WifiRemoteStationManager::m_nonUnicastMode),
                    MakeWifiModeChecker ())
-    .AddAttribute ("DefaultTxPowerLevel", "Default power level to be used for transmissions. "
-                   "This is the power level that is used by all those WifiManagers that do not"
-                   "implement TX power control.",
+    .AddAttribute ("DefaultTxPowerLevel",
+                   "Default power level to be used for transmissions. "
+                   "This is the power level that is used by all those WifiManagers that do not implement TX power control.",
                    UintegerValue (0),
                    MakeUintegerAccessor (&WifiRemoteStationManager::m_defaultTxPowerLevel),
                    MakeUintegerChecker<uint8_t> ())
+    .AddAttribute ("ProtectionMode",
+                   "Protection mode used when non-ERP STAs are connected to an ERP AP: Rts-Cts or Cts-To-Self",
+                   EnumValue (WifiRemoteStationManager::CTS_TO_SELF),
+                   MakeEnumAccessor (&WifiRemoteStationManager::SetProtectionMode,
+                                     &WifiRemoteStationManager::GetProtectionMode),
+                   MakeEnumChecker (WifiRemoteStationManager::RTS_CTS, "Rts-Cts",
+                                    WifiRemoteStationManager::CTS_TO_SELF, "Cts-To-Self"))
     .AddTraceSource ("MacTxRtsFailed",
                      "The transmission of a RTS by the MAC layer has failed",
                      MakeTraceSourceAccessor (&WifiRemoteStationManager::m_macTxRtsFailed),
@@ -346,7 +359,10 @@
 
 WifiRemoteStationManager::WifiRemoteStationManager ()
   : m_htSupported (false),
-    m_vhtSupported (false)
+    m_vhtSupported (false),
+    m_useNonErpProtection (false),
+    m_shortPreambleEnabled (false),
+    m_shortSlotTimeEnabled (false)
 {
 }
 
@@ -425,6 +441,42 @@
   DoSetFragmentationThreshold (threshold);
 }
 
+void
+WifiRemoteStationManager::SetProtectionMode (WifiRemoteStationManager::ProtectionMode mode)
+{
+  m_protectionMode = mode;
+}
+
+void
+WifiRemoteStationManager::SetShortPreambleEnabled (bool enable)
+{
+  m_shortPreambleEnabled = enable;
+}
+
+void
+WifiRemoteStationManager::SetShortSlotTimeEnabled (bool enable)
+{
+  m_shortSlotTimeEnabled = enable;
+}
+
+bool
+WifiRemoteStationManager::GetShortSlotTimeEnabled (void) const
+{
+  return m_shortSlotTimeEnabled;
+}
+
+bool
+WifiRemoteStationManager::GetShortPreambleEnabled (void) const
+{
+  return m_shortPreambleEnabled;
+}
+
+WifiRemoteStationManager::ProtectionMode
+WifiRemoteStationManager::GetProtectionMode (void) const
+{
+  return m_protectionMode;
+}
+
 bool
 WifiRemoteStationManager::HasHtSupported (void) const
 {
@@ -480,6 +532,24 @@
 }
 
 void
+WifiRemoteStationManager::AddSupportedPlcpPreamble (Mac48Address address, bool isShortPreambleSupported)
+{
+  NS_LOG_FUNCTION (this << address << isShortPreambleSupported);
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  state->m_shortPreamble = isShortPreambleSupported;
+}
+
+void
+WifiRemoteStationManager::AddSupportedErpSlotTime (Mac48Address address, bool isShortSlotTimeSupported)
+{
+  NS_LOG_FUNCTION (this << address << isShortSlotTimeSupported);
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  state->m_shortSlotTime = isShortSlotTimeSupported;
+}
+
+void
 WifiRemoteStationManager::AddSupportedMode (Mac48Address address, WifiMode mode)
 {
   NS_LOG_FUNCTION (this << address << mode);
@@ -509,6 +579,18 @@
 }
 
 void
+WifiRemoteStationManager::AddAllSupportedMcs (Mac48Address address)
+{
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStationState *state = LookupState (address);
+  state->m_operationalMcsSet.clear ();
+  for (uint32_t i = 0; i < m_wifiPhy->GetNMcs (); i++)
+    {
+      state->m_operationalMcsSet.push_back (m_wifiPhy->GetMcs (i));
+    }
+}
+
+void
 WifiRemoteStationManager::AddSupportedMcs (Mac48Address address, WifiMode mcs)
 {
   NS_LOG_FUNCTION (this << address << mcs);
@@ -526,6 +608,18 @@
 }
 
 bool
+WifiRemoteStationManager::GetShortPreambleSupported (Mac48Address address) const
+{
+  return LookupState (address)->m_shortPreamble;
+}
+
+bool
+WifiRemoteStationManager::GetShortSlotTimeSupported (Mac48Address address) const
+{
+  return LookupState (address)->m_shortSlotTime;
+}
+
+bool
 WifiRemoteStationManager::IsBrandNew (Mac48Address address) const
 {
   if (address.IsGroup ())
@@ -584,17 +678,16 @@
 }
 
 void
-WifiRemoteStationManager::PrepareForQueue (Mac48Address address, const WifiMacHeader *header,
-                                           Ptr<const Packet> packet, uint32_t fullPacketSize)
+WifiRemoteStationManager::PrepareForQueue (Mac48Address address, const WifiMacHeader *header, Ptr<const Packet> packet)
 {
-  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
+  NS_LOG_FUNCTION (this << address << *header << packet);
   if (IsLowLatency () || address.IsGroup ())
     {
       return;
     }
   WifiRemoteStation *station = Lookup (address, header);
   WifiTxVector rts = DoGetRtsTxVector (station);
-  WifiTxVector data = DoGetDataTxVector (station, fullPacketSize);
+  WifiTxVector data = DoGetDataTxVector (station);
   WifiTxVector ctstoself = DoGetCtsToSelfTxVector ();
   HighLatencyDataTxVectorTag datatag;
   HighLatencyRtsTxVectorTag rtstag;
@@ -613,10 +706,9 @@
 }
 
 WifiTxVector
-WifiRemoteStationManager::GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
-                                           Ptr<const Packet> packet, uint32_t fullPacketSize)
+WifiRemoteStationManager::GetDataTxVector (Mac48Address address, const WifiMacHeader *header, Ptr<const Packet> packet)
 {
-  NS_LOG_FUNCTION (this << address << *header << packet << fullPacketSize);
+  NS_LOG_FUNCTION (this << address << *header << packet);
   if (address.IsGroup ())
     {
       WifiTxVector v;
@@ -640,7 +732,7 @@
       (void) found;
       return datatag.GetDataTxVector ();
     }
-  return DoGetDataTxVector (Lookup (address, header), fullPacketSize);
+  return DoGetDataTxVector (Lookup (address, header));
 }
 
 WifiTxVector
@@ -779,11 +871,31 @@
   DoReportRxOk (station, rxSnr, txMode);
 }
 
+void
+WifiRemoteStationManager::ReportAmpduTxStatus (Mac48Address address, uint8_t tid,
+                                               uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr)
+{
+  NS_LOG_FUNCTION (this << address << (uint16_t)tid << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr);
+  NS_ASSERT (!address.IsGroup ());
+  WifiRemoteStation *station = Lookup (address, tid);
+  DoReportAmpduTxStatus (station, nSuccessfulMpdus, nFailedMpdus, rxSnr, dataSnr);
+}
+
 bool
 WifiRemoteStationManager::NeedRts (Mac48Address address, const WifiMacHeader *header,
-                                   Ptr<const Packet> packet)
+                                   Ptr<const Packet> packet, WifiTxVector txVector)
 {
-  NS_LOG_FUNCTION (this << address << *header << packet);
+  WifiMode mode = txVector.GetMode ();
+  NS_LOG_FUNCTION (this << address << *header << packet << mode);
+  if (m_protectionMode == RTS_CTS
+      && ((mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+      || (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+      || (mode.GetModulationClass () == WIFI_MOD_CLASS_VHT))
+      && m_useNonErpProtection)
+    {
+      NS_LOG_DEBUG ("WifiRemoteStationManager::NeedRTS returning true to protect non-ERP stations");
+      return true;
+    }
   if (address.IsGroup ())
     {
       return false;
@@ -795,21 +907,21 @@
 bool
 WifiRemoteStationManager::NeedCtsToSelf (WifiTxVector txVector)
 {
-  NS_LOG_FUNCTION (this << txVector);
   WifiMode mode = txVector.GetMode ();
-  //search for the BSS Basic Rate set, if the used mode is in the basic set then there is no need for Cts To Self
-  for (WifiModeListIterator i = m_bssBasicRateSet.begin (); i != m_bssBasicRateSet.end (); i++)
+  NS_LOG_FUNCTION (this << mode);
+  if (m_protectionMode == CTS_TO_SELF
+      && ((mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+      || (mode.GetModulationClass () == WIFI_MOD_CLASS_HT)
+      || (mode.GetModulationClass () == WIFI_MOD_CLASS_VHT))
+      && m_useNonErpProtection)
     {
-      if (mode == *i)
-        {
-          NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
-          return false;
-        }
+      NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning true to protect non-ERP stations");
+      return true;
     }
-  if (HasHtSupported ())
+  else if (!m_useNonErpProtection)
     {
-      //search for the BSS Basic MCS set, if the used mode is in the basic set then there is no need for Cts To Self
-      for (WifiModeListIterator i = m_bssBasicMcsSet.begin (); i != m_bssBasicMcsSet.end (); i++)
+    //search for the BSS Basic Rate set, if the used mode is in the basic set then there is no need for Cts To Self
+      for (WifiModeListIterator i = m_bssBasicRateSet.begin (); i != m_bssBasicRateSet.end (); i++)
         {
           if (mode == *i)
             {
@@ -817,9 +929,34 @@
               return false;
             }
         }
+      if (HasHtSupported ())
+        {
+          //search for the BSS Basic MCS set, if the used mode is in the basic set then there is no need for Cts To Self
+          for (WifiModeListIterator i = m_bssBasicMcsSet.begin (); i != m_bssBasicMcsSet.end (); i++)
+            {
+              if (mode == *i)
+                {
+                  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning false");
+                  return false;
+                }
+            }
+        }
+      NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning true");
+      return true;
     }
-  NS_LOG_DEBUG ("WifiRemoteStationManager::NeedCtsToSelf returning true");
-  return true;
+  return false;
+}
+
+void
+WifiRemoteStationManager::SetUseNonErpProtection (bool enable)
+{
+  m_useNonErpProtection = enable;
+}
+
+bool
+WifiRemoteStationManager::GetUseNonErpProtection (void) const
+{
+  return m_useNonErpProtection;
 }
 
 bool
@@ -970,6 +1107,28 @@
   return isLast;
 }
 
+bool
+WifiRemoteStationManager::IsAllowedControlAnswerModulationClass (enum WifiModulationClass modClassReq, enum WifiModulationClass modClassAnswer) const
+{
+  switch (modClassReq)
+    {
+    case WIFI_MOD_CLASS_DSSS:
+      return (modClassAnswer == WIFI_MOD_CLASS_DSSS);
+    case WIFI_MOD_CLASS_HR_DSSS:
+      return (modClassAnswer == WIFI_MOD_CLASS_DSSS || modClassAnswer == WIFI_MOD_CLASS_HR_DSSS);
+    case WIFI_MOD_CLASS_ERP_OFDM:
+      return (modClassAnswer == WIFI_MOD_CLASS_DSSS || modClassAnswer == WIFI_MOD_CLASS_HR_DSSS || modClassAnswer == WIFI_MOD_CLASS_ERP_OFDM);
+    case WIFI_MOD_CLASS_OFDM:
+      return (modClassAnswer == WIFI_MOD_CLASS_OFDM);
+    case WIFI_MOD_CLASS_HT:
+    case WIFI_MOD_CLASS_VHT:
+      return true;
+    default:
+      NS_FATAL_ERROR ("Modulation class not defined");
+      return false;
+    }
+}
+
 WifiMode
 WifiRemoteStationManager::GetControlAnswerMode (Mac48Address address, WifiMode reqMode)
 {
@@ -993,12 +1152,9 @@
   //First, search the BSS Basic Rate set
   for (WifiModeListIterator i = m_bssBasicRateSet.begin (); i != m_bssBasicRateSet.end (); i++)
     {
-      if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-          && (i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-          && ((i->GetModulationClass () == reqMode.GetModulationClass ())
-              || (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
-              || (reqMode.GetModulationClass () == WIFI_MOD_CLASS_VHT)))
-
+      if ((!found || i->IsHigherDataRate (mode))
+          && (!i->IsHigherDataRate (reqMode))
+          && (IsAllowedControlAnswerModulationClass (reqMode.GetModulationClass (), i->GetModulationClass ())))
         {
           mode = *i;
           //We've found a potentially-suitable transmit rate, but we
@@ -1014,9 +1170,9 @@
           mode = GetDefaultMcs ();
           for (WifiModeListIterator i = m_bssBasicMcsSet.begin (); i != m_bssBasicMcsSet.end (); i++)
             {
-              if ((!found || i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-                  && i->GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-              //&& thismode.GetModulationClass () == reqMode.GetModulationClass ()) //TODO: check standard
+              if ((!found || i->IsHigherDataRate (mode))
+                  && (!i->IsHigherDataRate (reqMode))
+                  && (i->GetModulationClass () == reqMode.GetModulationClass ()))
                 {
                   mode = *i;
                   //We've found a potentially-suitable transmit rate, but we
@@ -1055,7 +1211,6 @@
   for (uint32_t idx = 0; idx < m_wifiPhy->GetNModes (); idx++)
     {
       WifiMode thismode = m_wifiPhy->GetMode (idx);
-
       /* If the rate:
        *
        *  - is a mandatory rate for the PHY, and
@@ -1066,12 +1221,9 @@
        * ...then it's our best choice so far.
        */
       if (thismode.IsMandatory ()
-          && (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-          && (thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-          && ((thismode.GetModulationClass () == reqMode.GetModulationClass ())
-              || (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)
-              || (reqMode.GetModulationClass () == WIFI_MOD_CLASS_HT)))
-
+          && (!found || thismode.IsHigherDataRate (mode))
+          && (!thismode.IsHigherDataRate (reqMode))
+          && (IsAllowedControlAnswerModulationClass (reqMode.GetModulationClass (), thismode.GetModulationClass ())))
         {
           mode = thismode;
           //As above; we've found a potentially-suitable transmit
@@ -1086,9 +1238,9 @@
         {
           WifiMode thismode = m_wifiPhy->GetMcs (idx);
           if (thismode.IsMandatory ()
-              && (!found || thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) > mode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1))
-              && thismode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1) <= reqMode.GetPhyRate (m_wifiPhy->GetChannelWidth (), m_wifiPhy->GetGuardInterval (), 1)
-              && thismode.GetModulationClass () == reqMode.GetModulationClass ())
+              && (!found || thismode.IsHigherDataRate (mode))
+              && (!thismode.IsHigherCodeRate(reqMode))
+              && (thismode.GetModulationClass () == reqMode.GetModulationClass ()))
             {
               mode = thismode;
               //As above; we've found a potentially-suitable transmit
@@ -1306,10 +1458,11 @@
   state->m_shortGuardInterval = m_wifiPhy->GetGuardInterval ();
   state->m_greenfield = m_wifiPhy->GetGreenfield ();
   state->m_rx = 1;
-  state->m_tx = 1;
   state->m_ness = 0;
   state->m_aggregation = false;
   state->m_stbc = false;
+  state->m_htSupported = false;
+  state->m_vhtSupported = false;
   const_cast<WifiRemoteStationManager *> (this)->m_states.push_back (state);
   NS_LOG_DEBUG ("WifiRemoteStationManager::LookupState returning new state");
   return state;
@@ -1369,7 +1522,9 @@
     {
       state->m_channelWidth = 20;
     }
+  state->m_htSupported = true;
   state->m_greenfield = htCapabilities.GetGreenfield ();
+  state->m_rx = htCapabilities.GetRxHighestSupportedAntennas ();
 }
 
 void
@@ -1393,6 +1548,7 @@
     {
       state->m_channelWidth = m_wifiPhy->GetChannelWidth ();
     }
+  state->m_vhtSupported = true;
 }
 
 bool
@@ -1456,10 +1612,50 @@
 WifiMode
 WifiRemoteStationManager::GetBasicMode (uint32_t i) const
 {
-  NS_ASSERT (i < m_bssBasicRateSet.size ());
+  NS_ASSERT (i < GetNBasicModes ());
   return m_bssBasicRateSet[i];
 }
 
+uint32_t
+WifiRemoteStationManager::GetNNonErpBasicModes (void) const
+{
+  uint32_t size = 0;
+  for (WifiModeListIterator i = m_bssBasicRateSet.begin (); i != m_bssBasicRateSet.end (); i++)
+  {
+    if (i->GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+      {
+        continue;
+      }
+    size++;
+  }
+  return size;
+}
+
+WifiMode
+WifiRemoteStationManager::GetNonErpBasicMode (uint32_t i) const
+{
+  NS_ASSERT (i < GetNNonErpBasicModes ());
+  uint32_t index = 0;
+  bool found = false;
+  for (WifiModeListIterator j = m_bssBasicRateSet.begin (); j != m_bssBasicRateSet.end (); )
+  {
+    if (i == index)
+      {
+        found = true;
+      }
+    if (j->GetModulationClass () != WIFI_MOD_CLASS_ERP_OFDM)
+      {
+        if (found)
+          {
+            break;
+          }
+      }
+    index++;
+    j++;
+  }
+  return m_bssBasicRateSet[index];
+}
+
 void
 WifiRemoteStationManager::AddBasicMcs (WifiMode mcs)
 {
@@ -1483,7 +1679,7 @@
 WifiMode
 WifiRemoteStationManager::GetBasicMcs (uint32_t i) const
 {
-  NS_ASSERT (i < m_bssBasicMcsSet.size ());
+  NS_ASSERT (i < GetNBasicMcs ());
   return m_bssBasicMcsSet[i];
 }
 
@@ -1528,6 +1724,12 @@
   return normally;
 }
 
+void
+WifiRemoteStationManager::DoReportAmpduTxStatus (WifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr)
+{
+  NS_LOG_DEBUG ("DoReportAmpduTxStatus received but the manager does not handle A-MPDUs!");
+}
+
 WifiMode
 WifiRemoteStationManager::GetSupported (const WifiRemoteStation *station, uint32_t i) const
 {
@@ -1542,6 +1744,34 @@
   return station->m_state->m_operationalMcsSet[i];
 }
 
+WifiMode
+WifiRemoteStationManager::GetNonErpSupported (const WifiRemoteStation *station, uint32_t i) const
+{
+  NS_ASSERT (i < GetNNonErpSupported (station));
+  //IEEE 802.11g standard defines that if the protection mechanism is enabled, Rts, Cts and Cts-To-Self
+  //frames should select a rate in the BSSBasicRateSet that corresponds to an 802.11b basic rate.
+  //This is a implemented here to avoid changes in every RAA, but should maybe be moved in case it breaks standard rules.
+  uint32_t index = 0;
+  bool found = false;
+  for (WifiModeListIterator j = station->m_state->m_operationalRateSet.begin (); j != station->m_state->m_operationalRateSet.end (); )
+  {
+    if (i == index)
+      {
+        found = true;
+      }
+    if (j->GetModulationClass () != WIFI_MOD_CLASS_ERP_OFDM)
+      {
+        if (found)
+          {
+            break;
+          }
+      }
+    index++;
+    j++;
+  }
+  return station->m_state->m_operationalRateSet[index];
+}
+
 uint32_t
 WifiRemoteStationManager::GetChannelWidth (const WifiRemoteStation *station) const
 {
@@ -1572,19 +1802,13 @@
   return station->m_state->m_stbc;
 }
 
-uint32_t
-WifiRemoteStationManager::GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const
+uint8_t
+WifiRemoteStationManager::GetNumberOfSupportedRxAntennas (const WifiRemoteStation *station) const
 {
   return station->m_state->m_rx;
 }
 
 uint32_t
-WifiRemoteStationManager::GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const
-{
-  return station->m_state->m_tx;
-}
-
-uint32_t
 WifiRemoteStationManager::GetNess (const WifiRemoteStation *station) const
 {
   return station->m_state->m_ness;
@@ -1620,12 +1844,39 @@
   return station->m_state->m_operationalRateSet.size ();
 }
 
+bool
+WifiRemoteStationManager::GetHtSupported (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_htSupported;
+}
+
+bool
+WifiRemoteStationManager::GetVhtSupported (const WifiRemoteStation *station) const
+{
+  return station->m_state->m_vhtSupported;
+}
+
 uint32_t
 WifiRemoteStationManager::GetNMcsSupported (const WifiRemoteStation *station) const
 {
   return station->m_state->m_operationalMcsSet.size ();
 }
 
+uint32_t
+WifiRemoteStationManager::GetNNonErpSupported (const WifiRemoteStation *station) const
+{
+  uint32_t size = 0;
+  for (WifiModeListIterator i = station->m_state->m_operationalRateSet.begin (); i != station->m_state->m_operationalRateSet.end (); i++)
+  {
+    if (i->GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
+      {
+        continue;
+      }
+    size++;
+  }
+  return size;
+}
+
 void
 WifiRemoteStationManager::SetDefaultTxPowerLevel (uint8_t txPower)
 {
diff -Naur ns-3.24.1/src/wifi/model/wifi-remote-station-manager.h ns-3.25/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.24.1/src/wifi/model/wifi-remote-station-manager.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/wifi-remote-station-manager.h	2016-03-23 21:36:53.000000000 -0700
@@ -92,6 +92,12 @@
 
   WifiRemoteStationManager ();
   virtual ~WifiRemoteStationManager ();
+  
+  enum ProtectionMode
+  {
+    RTS_CTS,
+    CTS_TO_SELF
+  };
 
   /**
    * Set up PHY associated with this device since it is the object that
@@ -200,6 +206,57 @@
    * \return true if VHT capability support is enabled, false otherwise
    */
   bool HasVhtSupported (void) const;
+  /**
+   * Sets the protection mode.
+   *
+   * \param mode the protection mode
+   */
+  void SetProtectionMode (ProtectionMode mode);
+  /**
+   * Return the protection mode.
+   *
+   * \return the protection mode
+   */
+  ProtectionMode GetProtectionMode (void) const;
+  /**
+   * Enable or disable protection for non-ERP stations.
+   *
+   * \param enable enable or disable protection for non-ERP stations
+   */
+  void SetUseNonErpProtection (bool enable);
+  /**
+   * Return whether the device supports protection of non-ERP stations.
+   *
+   * \return true if protection for non-ERP stations is enabled, 
+   *         false otherwise
+   */
+  bool GetUseNonErpProtection (void) const;
+  /**
+   * Enable or disable short PLCP preambles.
+   *
+   * \param enable enable or disable short PLCP preambles
+   */
+  void SetShortPreambleEnabled (bool enable);
+  /**
+   * Return whether the device uses short PLCP preambles.
+   *
+   * \return true if short PLCP preambles are enabled,
+   *         false otherwise
+   */
+  bool GetShortPreambleEnabled (void) const;
+  /**
+   * Enable or disable short slot time.
+   *
+   * \param enable enable or disable short slot time
+   */
+  void SetShortSlotTimeEnabled (bool enable);
+  /**
+   * Return whether the device uses short slot time.
+   *
+   * \return true if short slot time is enabled,
+   *         false otherwise
+   */
+  bool GetShortSlotTimeEnabled (void) const;
 
   /**
    * Reset the station, invoked in a STA upon dis-association or in an AP upon reboot.
@@ -235,6 +292,20 @@
    */
   WifiMode GetBasicMode (uint32_t i) const;
   /**
+   * Return the number of non-ERP basic modes we support.
+   *
+   * \return the number of basic modes we support
+   */
+  uint32_t GetNNonErpBasicModes (void) const;
+  /**
+   * Return a basic mode from the set of basic modes that is not an ERP mode.
+   *
+   * \param i index of the basic mode in the basic mode set
+   *
+   * \return the basic mode at the given index
+   */
+  WifiMode GetNonErpBasicMode (uint32_t i) const;
+  /**
    * Return whether the station supports Greenfield or not.
    *
    * \param address the address of the station
@@ -244,6 +315,24 @@
    */
   bool GetGreenfieldSupported (Mac48Address address) const;
   /**
+   * Return whether the station supports short PLCP preamble or not.
+   *
+   * \param address the address of the station
+   *
+   * \return true if short PLCP preamble is supported by the station,
+   *         false otherwise
+   */
+  bool GetShortPreambleSupported (Mac48Address address) const;
+  /**
+   * Return whether the station supports short ERP slot time or not.
+   *
+   * \param address the address of the station
+   *
+   * \return true if short ERP slot time is supported by the station,
+   *         false otherwise
+   */
+  bool GetShortSlotTimeSupported (Mac48Address address) const;
+  /**
    * Add a given Modulation and Coding Scheme (MCS) index to
    * the set of basic MCS.
    *
@@ -285,7 +374,6 @@
    */
   WifiMode GetNonUnicastMode (void) const;
 
-
   /**
    * Invoked in an AP upon disassociation of a
    * specific STA.
@@ -313,7 +401,27 @@
    * \param address the address of the station being recorded
    */
   void AddAllSupportedModes (Mac48Address address);
-
+  /**
+   * Invoked in a STA or AP to store all of the MCS supported
+   * by a destination which is also supported locally.
+   *
+   * \param address the address of the station being recorded
+   */
+  void AddAllSupportedMcs (Mac48Address address);
+  /**
+   * Record whether the short PLCP preamble is supported by the station.
+   *
+   * \param address the address of the station
+   * \param isShortPreambleSupported whether or not short PLCP preamble is supported by the station
+   */
+  void AddSupportedPlcpPreamble (Mac48Address address, bool isShortPreambleSupported);
+  /**
+   * Record whether the short ERP slot time is supported by the station.
+   *
+   * \param address the address of the station
+   * \param isShortSlotTimeSupported whether or not short ERP slot time is supported by the station
+   */
+  void AddSupportedErpSlotTime (Mac48Address address, bool isShortSlotTimeSupported);
   /**
    * Return whether the station state is brand new.
    *
@@ -374,7 +482,6 @@
    * \param address remote address
    * \param header MAC header
    * \param packet the packet to queue
-   * \param fullPacketSize the size of the packet after its 802.11 MAC header has been added.
    *
    * This method is typically invoked just before queuing a packet for transmission.
    * It is a no-op unless the IsLowLatency attribute of the attached ns3::WifiRemoteStationManager
@@ -382,24 +489,23 @@
    * the packet as a tag. These tx parameters are later retrieved from GetDadaMode and GetRtsMode.
    */
   void PrepareForQueue (Mac48Address address, const WifiMacHeader *header,
-                        Ptr<const Packet> packet, uint32_t fullPacketSize);
+                        Ptr<const Packet> packet);
 
   /**
    * \param address remote address
    * \param header MAC header
    * \param packet the packet to send
-   * \param fullPacketSize the size of the packet after its 802.11 MAC header has been added.
    *
-   * \return the transmission mode to use to send this packet
+   * \return the TXVECTOR to use to send this packet
    */
   WifiTxVector GetDataTxVector (Mac48Address address, const WifiMacHeader *header,
-                                Ptr<const Packet> packet, uint32_t fullPacketSize);
+                                Ptr<const Packet> packet);
   /**
    * \param address remote address
    * \param header MAC header
    * \param packet the packet to send
    *
-   * \return the transmission mode to use to send the RTS prior to the
+   * \return the TXVECTOR to use to send the RTS prior to the
    *         transmission of the data packet itself.
    */
   WifiTxVector GetRtsTxVector (Mac48Address address, const WifiMacHeader *header,
@@ -479,6 +585,19 @@
    * \param header MAC header of the DATA packet
    */
   void ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header);
+  /**
+   * Typically called per A-MPDU, either when a Block ACK was successfully 
+   * received or when a BlockAckTimeout has elapsed.
+   *
+   * \param address the address of the receiver
+   * \param tid TID of the DATA packet
+   * \param nSuccessfulMpdus number of successfully transmitted MPDUs.
+   * A value of 0 means that the Block ACK was missed.
+   * \param nFailedMpdus number of unsuccessfully transmitted MPDUs.
+   * \param rxSnr received SNR of the block ack frame itself
+   * \param dataSnr data SNR reported by remote station
+   */
+  void ReportAmpduTxStatus (Mac48Address address, uint8_t tid, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr);
 
   /**
    * \param address remote address
@@ -495,12 +614,13 @@
    * \param address remote address
    * \param header MAC header
    * \param packet the packet to send
+   * \param txVector the TXVECTOR of the packet to send
    *
    * \return true if we want to use an RTS/CTS handshake for this
    *         packet before sending it, false otherwise.
    */
   bool NeedRts (Mac48Address address, const WifiMacHeader *header,
-                Ptr<const Packet> packet);
+                Ptr<const Packet> packet, WifiTxVector txVector);
   /**
    * Return if we need to do Cts-to-self before sending a DATA.
    *
@@ -652,6 +772,24 @@
    */
   uint32_t GetNSupported (const WifiRemoteStation *station) const;
   /**
+   * Return whether the given station is HT capable.
+   *
+   * \param station the station being queried
+   *
+   * \return true if the station has HT capabilities,
+   *         false otherwise
+   */
+  bool GetHtSupported (const WifiRemoteStation *station) const;
+  /**
+   * Return whether the given station is VHT capable.
+   *
+   * \param station the station being queried
+   *
+   * \return true if the station has VHT capabilities,
+   *         false otherwise
+   */
+  bool GetVhtSupported (const WifiRemoteStation *station) const;
+  /**
    * Return the WifiMode supported by the specified station at the specified index.
    *
    * \param station the station being queried
@@ -659,6 +797,7 @@
    *
    * \return the WifiMode at the given index of the specified station
    */
+
   WifiMode GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const;
   /**
    * Return the number of MCS supported by the given station.
@@ -669,6 +808,23 @@
    */
   uint32_t GetNMcsSupported (const WifiRemoteStation *station) const;
   /**
+   * Return whether non-ERP mode associated with the specified station at the specified index.
+   *
+   * \param station the station being queried
+   * \param i the index
+   *
+   * \return WifiMode at the given index of the specified station
+   */
+  WifiMode GetNonErpSupported (const WifiRemoteStation *station, uint32_t i) const;
+  /**
+   * Return the number of non-ERP modes supported by the given station.
+   *
+   * \param station the station being queried
+   *
+   * \return the number of non-ERP modes supported by the given station
+   */
+  uint32_t GetNNonErpSupported (const WifiRemoteStation *station) const;
+  /**
    * Return the channel width supported by the station.
    *
    * \param station the station being queried
@@ -712,6 +868,7 @@
    *         false otherwise
    */
   bool GetGreenfield (const WifiRemoteStation *station) const;
+
   /**
    * Return the number of receive antennas the station has.
    *
@@ -719,15 +876,7 @@
    *
    * \return the number of receive antennas the station has
    */
-  uint32_t GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const;
-  /**
-   * Return the number of transmit antennas the station has.
-   *
-   * \param station the station being queried
-   *
-   * \return the number of transmit antennas the station has
-   */
-  uint32_t GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const;
+  uint8_t GetNumberOfSupportedRxAntennas (const WifiRemoteStation *station) const;
   /**
    * \returns the number of Ness the station has.
    *
@@ -834,14 +983,13 @@
   virtual WifiRemoteStation* DoCreateStation (void) const = 0;
   /**
     * \param station the station that we need to communicate
-    * \param size size of the packet or fragment we want to send
     *
-    * \return the transmission mode to use to send a packet to the station
+    * \return the TXVECTOR to use to send a packet to the station
     *
     * Note: This method is called before sending a unicast packet or a fragment
     *       of a unicast packet to decide which transmission mode to use.
     */
-  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station, uint32_t size) = 0;
+  virtual WifiTxVector DoGetDataTxVector (WifiRemoteStation *station) = 0;
   /**
    * \param station the station that we need to communicate
    *
@@ -949,6 +1097,20 @@
    */
   virtual void DoReportRxOk (WifiRemoteStation *station,
                              double rxSnr, WifiMode txMode) = 0;
+  /**
+   * Typically called per A-MPDU, either when a Block ACK was successfully received
+   * or when a BlockAckTimeout has elapsed. This method is a virtual method that must
+   * be implemented by the sub-class intended to handle A-MPDUs. This allows different
+   * types of WifiRemoteStationManager to respond differently.
+   *
+   * \param station the station that sent the DATA to us
+   * \param nSuccessfulMpdus number of successfully transmitted MPDUs.
+   *        A value of 0 means that the Block ACK was missed.
+   * \param nFailedMpdus number of unsuccessfully transmitted MPDUs.
+   * \param rxSnr received SNR of the block ack frame itself
+   * \param dataSnr data SNR reported by remote station
+   */
+  virtual void DoReportAmpduTxStatus (WifiRemoteStation *station, uint32_t nSuccessfulMpdus, uint32_t nFailedMpdus, double rxSnr, double dataSnr);
 
   /**
    * Return the state of the station associated with the given address.
@@ -978,6 +1140,18 @@
    */
   WifiRemoteStation* Lookup (Mac48Address address, const WifiMacHeader *header) const;
 
+  /**
+   * Return whether the modulation class of the selected mode for the 
+   * control answer frame is allowed.
+   *
+   * \param modClassReq modulation class of the request frame
+   * \param modClassAnswer modulation class of the answer frame
+   *
+   * \return true if the modulation class of the selected mode for the 
+   * control answer frame is allowed, false otherwise
+   */
+  bool IsAllowedControlAnswerModulationClass (enum WifiModulationClass modClassReq, enum WifiModulationClass modClassAnswer) const;
+
   WifiMode GetControlAnswerMode (Mac48Address address, WifiMode reqMode);
 
   /**
@@ -1056,6 +1230,10 @@
   uint32_t m_nextFragmentationThreshold;  //!< Threshold for fragmentation that will be used for the next transmission
   uint8_t m_defaultTxPowerLevel;  //!< Default tranmission power level
   WifiMode m_nonUnicastMode;  //!< Transmission mode for non-unicast DATA frames
+  bool m_useNonErpProtection; //!< flag if protection for non-ERP stations against ERP transmissions is enabled
+  bool m_shortPreambleEnabled; //!< flag if short PLCP preamble is enabled
+  bool m_shortSlotTimeEnabled; //!< flag if short slot time is enabled
+  ProtectionMode m_protectionMode; //!< Protection mode for ERP stations when non-ERP stations are detected
 
   /**
    * The trace source fired when the transmission of a single RTS has failed
@@ -1109,12 +1287,15 @@
 
   uint32_t m_channelWidth;    //!< Channel width (in MHz) supported by the remote station
   bool m_shortGuardInterval;  //!< Flag if short guard interval is supported by the remote station
-  uint32_t m_rx;              //!< Number of RX antennas of the remote station
-  uint32_t m_tx;              //!< Number of TX antennas of the remote station
+  uint8_t m_rx;               //!< Number of supported RX streams by the remote station
   uint32_t m_ness;            //!< Number of streams in beamforming of the remote station
-  bool m_stbc;                //!< Flag if STBC is used by the remote station
+  bool m_stbc;                //!< Flag if STBC is supported by the remote station
   bool m_aggregation;         //!< Flag if MPDU aggregation is used by the remote station
-  bool m_greenfield;          //!< Flag if green field is used by the remote station
+  bool m_greenfield;          //!< Flag if greenfield is supported by the remote station
+  bool m_shortPreamble;       //!< Flag if short PLCP preamble is supported by the remote station
+  bool m_shortSlotTime;       //!< Flag if short ERP slot time is supported by the remote station
+  bool m_htSupported;         //!< Flag if HT is supported by the station
+  bool m_vhtSupported;        //!< Flag if VHT is supported by the station
 };
 
 /**
diff -Naur ns-3.24.1/src/wifi/model/yans-error-rate-model.cc ns-3.25/src/wifi/model/yans-error-rate-model.cc
--- ns-3.24.1/src/wifi/model/yans-error-rate-model.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-error-rate-model.cc	2016-03-23 21:36:53.000000000 -0700
@@ -54,6 +54,7 @@
 double
 YansErrorRateModel::GetBpskBer (double snr, uint32_t signalSpread, uint32_t phyRate) const
 {
+  NS_LOG_FUNCTION (this << snr << signalSpread << phyRate);
   double EbNo = snr * signalSpread / phyRate;
   double z = std::sqrt (EbNo);
   double ber = 0.5 * erfc (z);
@@ -64,6 +65,7 @@
 double
 YansErrorRateModel::GetQamBer (double snr, unsigned int m, uint32_t signalSpread, uint32_t phyRate) const
 {
+  NS_LOG_FUNCTION (this << snr << m << signalSpread << phyRate);
   double EbNo = snr * signalSpread / phyRate;
   double z = std::sqrt ((1.5 * Log2 (m) * EbNo) / (m - 1.0));
   double z1 = ((1.0 - 1.0 / std::sqrt (m)) * erfc (z));
@@ -127,6 +129,7 @@
 double
 YansErrorRateModel::CalculatePd (double ber, unsigned int d) const
 {
+  NS_LOG_FUNCTION (this << ber << d);
   double pd;
   if ((d % 2) == 0)
     {
@@ -144,6 +147,7 @@
                                    uint32_t signalSpread, uint32_t phyRate,
                                    uint32_t dFree, uint32_t adFree) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << signalSpread << phyRate << dFree << adFree);
   double ber = GetBpskBer (snr, signalSpread, phyRate);
   if (ber == 0.0)
     {
@@ -163,6 +167,7 @@
                                   uint32_t m, uint32_t dFree,
                                   uint32_t adFree, uint32_t adFreePlusOne) const
 {
+  NS_LOG_FUNCTION (this << snr << nbits << signalSpread << phyRate << m << dFree << adFree << adFreePlusOne);
   double ber = GetQamBer (snr, m, signalSpread, phyRate);
   if (ber == 0.0)
     {
@@ -182,19 +187,20 @@
 double
 YansErrorRateModel::GetChunkSuccessRate (WifiMode mode, WifiTxVector txVector, double snr, uint32_t nbits) const
 {
+  NS_LOG_FUNCTION (this << mode << txVector.GetMode () << snr << nbits);
   if (mode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM
       || mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM
       || mode.GetModulationClass () == WIFI_MOD_CLASS_HT
       || mode.GetModulationClass () == WIFI_MOD_CLASS_VHT)
     {
-      if (mode.GetConstellationSize (1) == 2)
+      if (mode.GetConstellationSize () == 2)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFecBpskBer (snr,
                                     nbits,
                                     txVector.GetChannelWidth () * 1000000, //signal spread
-                                    mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                    mode.GetPhyRate (txVector), //phy rate
                                     10, //dFree
                                     11); //adFree
             }
@@ -203,19 +209,19 @@
               return GetFecBpskBer (snr,
                                     nbits,
                                     txVector.GetChannelWidth () * 1000000, //signal spread
-                                    mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                    mode.GetPhyRate (txVector), //phy rate
                                     5, //dFree
                                     8); //adFree
             }
         }
-      else if (mode.GetConstellationSize (1) == 4)
+      else if (mode.GetConstellationSize () == 4)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    4, //m
                                    10, //dFree
                                    11, //adFree
@@ -226,21 +232,21 @@
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    4, //m
                                    5, //dFree
                                    8, //adFree
                                    31); //adFreePlusOne
             }
         }
-      else if (mode.GetConstellationSize (1) == 16)
+      else if (mode.GetConstellationSize () == 16)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_1_2)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
             {
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    16, //m
                                    10, //dFree
                                    11, //adFree
@@ -251,33 +257,33 @@
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    16, //m
                                    5, //dFree
                                    8, //adFree
                                    31); //adFreePlusOne
             }
         }
-      else if (mode.GetConstellationSize (1) == 64)
+      else if (mode.GetConstellationSize () == 64)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_2_3)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_2_3)
             {
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    64, //m
                                    6, //dFree
                                    1, //adFree
                                    16); //adFreePlusOne
             }
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_5_6)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
             {
               //Table B.32  in Pâl Frenger et al., "Multi-rate Convolutional Codes".
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    64, //m
                                    4, //dFree
                                    14, //adFree
@@ -288,21 +294,21 @@
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, //signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), //phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    64, //m
                                    5, //dFree
                                    8, //adFree
                                    31); //adFreePlusOne
             }
         }
-      else if (mode.GetConstellationSize (1) == 256)
+      else if (mode.GetConstellationSize () == 256)
         {
-          if (mode.GetCodeRate (1) == WIFI_CODE_RATE_5_6)
+          if (mode.GetCodeRate () == WIFI_CODE_RATE_5_6)
             {
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, // signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), // phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    256, // m
                                    4,  // dFree
                                    14,  // adFree
@@ -314,7 +320,7 @@
               return GetFecQamBer (snr,
                                    nbits,
                                    txVector.GetChannelWidth () * 1000000, // signal spread
-                                   mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1), // phy rate
+                                   mode.GetPhyRate (txVector), //phy rate
                                    256, // m
                                    5,  // dFree
                                    8,  // adFree
diff -Naur ns-3.24.1/src/wifi/model/yans-error-rate-model.h ns-3.25/src/wifi/model/yans-error-rate-model.h
--- ns-3.24.1/src/wifi/model/yans-error-rate-model.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-error-rate-model.h	2016-03-23 21:36:53.000000000 -0700
@@ -75,7 +75,7 @@
   /**
    * Return BER of BPSK with the given parameters.
    *
-   * \param snr snr value
+   * \param snr SNR ratio (not dB)
    * \param signalSpread
    * \param phyRate
    *
@@ -85,7 +85,7 @@
   /**
    * Return BER of QAM-m with the given parameters.
    *
-   * \param snr snr value
+   * \param snr SNR ratio (not dB)
    * \param m
    * \param signalSpread
    * \param phyRate
@@ -133,7 +133,7 @@
    */
   double CalculatePd (double ber, unsigned int d) const;
   /**
-   * \param snr
+   * \param snr SNR ratio (not dB)
    * \param nbits
    * \param signalSpread
    * \param phyRate
@@ -146,7 +146,7 @@
                         uint32_t signalSpread, uint32_t phyRate,
                         uint32_t dFree, uint32_t adFree) const;
   /**
-   * \param snr
+   * \param snr SNR ratio (not dB)
    * \param nbits
    * \param signalSpread
    * \param phyRate
diff -Naur ns-3.24.1/src/wifi/model/yans-wifi-channel.cc ns-3.25/src/wifi/model/yans-wifi-channel.cc
--- ns-3.24.1/src/wifi/model/yans-wifi-channel.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-wifi-channel.cc	2016-03-23 21:36:53.000000000 -0700
@@ -79,7 +79,7 @@
 
 void
 YansWifiChannel::Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-                       WifiTxVector txVector, WifiPreamble preamble, struct mpduInfo aMpdu, Time duration) const
+                       WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype, Time duration) const
 {
   Ptr<MobilityModel> senderMobility = sender->GetMobility ()->GetObject<MobilityModel> ();
   NS_ASSERT (senderMobility != 0);
@@ -113,7 +113,7 @@
 
           struct Parameters parameters;
           parameters.rxPowerDbm = rxPowerDbm;
-          parameters.aMpdu = aMpdu;
+          parameters.type = mpdutype;
           parameters.duration = duration;
           parameters.txVector = txVector;
           parameters.preamble = preamble;
@@ -128,7 +128,7 @@
 void
 YansWifiChannel::Receive (uint32_t i, Ptr<Packet> packet, struct Parameters parameters) const
 {
-  m_phyList[i]->StartReceivePreambleAndHeader (packet, parameters.rxPowerDbm, parameters.txVector, parameters.preamble, parameters.aMpdu, parameters.duration);
+  m_phyList[i]->StartReceivePreambleAndHeader (packet, parameters.rxPowerDbm, parameters.txVector, parameters.preamble, parameters.type, parameters.duration);
 }
 
 uint32_t
diff -Naur ns-3.24.1/src/wifi/model/yans-wifi-channel.h ns-3.25/src/wifi/model/yans-wifi-channel.h
--- ns-3.24.1/src/wifi/model/yans-wifi-channel.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-wifi-channel.h	2016-03-23 21:36:53.000000000 -0700
@@ -40,7 +40,7 @@
 struct Parameters
 {
   double rxPowerDbm;
-  struct mpduInfo aMpdu;
+  enum mpduType type;
   Time duration;
   WifiTxVector txVector;
   WifiPreamble preamble;
@@ -92,8 +92,7 @@
    * \param txPowerDbm the tx power associated to the packet
    * \param txVector the TXVECTOR associated to the packet
    * \param preamble the preamble associated to the packet
-   * \param aMpdu the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU)
-   *        and the A-MPDU reference number (must be a different value for each A-MPDU but the same for each subframe within one A-MPDU)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param duration the transmission duration associated to the packet
    *
    * This method should not be invoked by normal users. It is
@@ -102,7 +101,7 @@
    * e.g. PHYs that are operating on the same channel.
    */
   void Send (Ptr<YansWifiPhy> sender, Ptr<const Packet> packet, double txPowerDbm,
-             WifiTxVector txVector, WifiPreamble preamble, struct mpduInfo aMpdu, Time duration) const;
+             WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype, Time duration) const;
 
   /**
    * Assign a fixed random variable stream number to the random variables
diff -Naur ns-3.24.1/src/wifi/model/yans-wifi-phy.cc ns-3.25/src/wifi/model/yans-wifi-phy.cc
--- ns-3.24.1/src/wifi/model/yans-wifi-phy.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-wifi-phy.cc	2016-03-23 21:36:53.000000000 -0700
@@ -131,20 +131,21 @@
                    MakeUintegerAccessor (&YansWifiPhy::GetFrequency,
                                          &YansWifiPhy::SetFrequency),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Transmitters",
-                   "The number of transmitters.",
+    .AddAttribute ("TxAntennas",
+                   "The number of supported Tx antennas.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&YansWifiPhy::GetNumberOfTransmitAntennas,
                                          &YansWifiPhy::SetNumberOfTransmitAntennas),
                    MakeUintegerChecker<uint32_t> ())
-    .AddAttribute ("Receivers",
-                   "The number of receivers.",
+    .AddAttribute ("RxAntennas",
+                   "The number of supported Rx antennas.",
                    UintegerValue (1),
                    MakeUintegerAccessor (&YansWifiPhy::GetNumberOfReceiveAntennas,
                                          &YansWifiPhy::SetNumberOfReceiveAntennas),
                    MakeUintegerChecker<uint32_t> ())
     .AddAttribute ("ShortGuardEnabled",
-                   "Whether or not short guard interval is enabled.",
+                   "Whether or not short guard interval is enabled."
+                   "This parameter is only valuable for 802.11n/ac STAs and APs.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&YansWifiPhy::GetGuardInterval,
                                         &YansWifiPhy::SetGuardInterval),
@@ -162,11 +163,20 @@
                                         &YansWifiPhy::SetStbc),
                    MakeBooleanChecker ())
     .AddAttribute ("GreenfieldEnabled",
-                   "Whether or not Greenfield is enabled.",
+                   "Whether or not Greenfield is enabled."
+                   "This parameter is only valuable for 802.11n STAs and APs.",
                    BooleanValue (false),
                    MakeBooleanAccessor (&YansWifiPhy::GetGreenfield,
                                         &YansWifiPhy::SetGreenfield),
                    MakeBooleanChecker ())
+    .AddAttribute ("ShortPlcpPreambleSupported",
+                   "Whether or not short PLCP preamble is supported."
+                   "This parameter is only valuable for 802.11b STAs and APs."
+                   "Note: 802.11g APs and STAs always support short PLCP preamble.",
+                   BooleanValue (false),
+                   MakeBooleanAccessor (&YansWifiPhy::GetShortPlcpPreambleSupported,
+                                        &YansWifiPhy::SetShortPlcpPreambleSupported),
+                   MakeBooleanChecker ())
     .AddAttribute ("ChannelWidth",
                    "Whether 5MHz, 10MHz, 20MHz, 22MHz, 40MHz, 80 MHz or 160 MHz.",
                    UintegerValue (20),
@@ -184,7 +194,9 @@
     m_endPlcpRxEvent (),
     m_channelStartingFrequency (0),
     m_mpdusNum (0),
-    m_plcpSuccess (false)
+    m_plcpSuccess (false),
+    m_txMpduReferenceNumber (0xffffffff),
+    m_rxMpduReferenceNumber (0xffffffff)
 {
   NS_LOG_FUNCTION (this);
   m_random = CreateObject<UniformRandomVariable> ();
@@ -398,9 +410,9 @@
 }
 
 double
-YansWifiPhy::CalculateSnr (WifiMode txMode, double ber) const
+YansWifiPhy::CalculateSnr (WifiTxVector txVector, double ber) const
 {
-  return m_interference.GetErrorRateModel ()->CalculateSnr (txMode, ber);
+  return m_interference.GetErrorRateModel ()->CalculateSnr (txVector, ber);
 }
 
 Ptr<WifiChannel>
@@ -566,11 +578,12 @@
                                             double rxPowerDbm,
                                             WifiTxVector txVector,
                                             enum WifiPreamble preamble,
-                                            struct mpduInfo aMpdu, Time rxDuration)
+                                            enum mpduType mpdutype,
+                                            Time rxDuration)
 {
   //This function should be later split to check separately whether plcp preamble and plcp header can be successfully received.
   //Note: plcp preamble reception is not yet modeled.
-  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode () << preamble << (uint32_t)aMpdu.packetType);
+  NS_LOG_FUNCTION (this << packet << rxPowerDbm << txVector.GetMode () << preamble << (uint32_t)mpdutype);
   AmpduTag ampduTag;
   rxPowerDbm += m_rxGainDb;
   double rxPowerW = DbmToW (rxPowerDbm);
@@ -647,6 +660,7 @@
             {
               //received the first MPDU in an MPDU
               m_mpdusNum = ampduTag.GetNoOfMpdus () - 1;
+              m_rxMpduReferenceNumber++;
             }
           else if (preamble == WIFI_PREAMBLE_NONE && packet->PeekPacketTag (ampduTag) && m_mpdusNum > 0)
             {
@@ -678,12 +692,12 @@
             {
               NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
               m_endPlcpRxEvent = Simulator::Schedule (preambleAndHeaderDuration, &YansWifiPhy::StartReceivePacket, this,
-                                                      packet, txVector, preamble, aMpdu, event);
+                                                      packet, txVector, preamble, mpdutype, event);
             }
 
           NS_ASSERT (m_endRxEvent.IsExpired ());
           m_endRxEvent = Simulator::Schedule (rxDuration, &YansWifiPhy::EndReceive, this,
-                                              packet, preamble, aMpdu, event);
+                                              packet, preamble, mpdutype, event);
         }
       else
         {
@@ -720,10 +734,10 @@
 YansWifiPhy::StartReceivePacket (Ptr<Packet> packet,
                                  WifiTxVector txVector,
                                  enum WifiPreamble preamble,
-                                 struct mpduInfo aMpdu,
+                                 enum mpduType mpdutype,
                                  Ptr<InterferenceHelper::Event> event)
 {
-  NS_LOG_FUNCTION (this << packet << txVector.GetMode () << preamble << (uint32_t)aMpdu.packetType);
+  NS_LOG_FUNCTION (this << packet << txVector.GetMode () << preamble << (uint32_t)mpdutype);
   NS_ASSERT (IsStateRx ());
   NS_ASSERT (m_endPlcpRxEvent.IsExpired ());
   AmpduTag ampduTag;
@@ -757,9 +771,17 @@
 }
 
 void
-YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber)
+YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble)
+{
+  SendPacket (packet, txVector, preamble, NORMAL_MPDU);
+}
+
+void
+YansWifiPhy::SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype)
 {
-  NS_LOG_FUNCTION (this << packet << txVector.GetMode () << txVector.GetMode ().GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1) << preamble << (uint32_t)txVector.GetTxPowerLevel () << (uint32_t)packetType);
+  NS_LOG_FUNCTION (this << packet << txVector.GetMode () 
+    << txVector.GetMode ().GetDataRate (txVector)
+    << preamble << (uint32_t)txVector.GetTxPowerLevel () << (uint32_t)mpdutype);
   /* Transmission can happen if:
    *  - we are syncing on a packet. It is the responsability of the
    *    MAC layer to avoid doing this but the PHY does nothing to
@@ -775,7 +797,7 @@
       return;
     }
 
-  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble, GetFrequency (), packetType, 1);
+  Time txDuration = CalculateTxDuration (packet->GetSize (), txVector, preamble, GetFrequency (), mpdutype, 1);
   NS_ASSERT (txDuration > NanoSeconds (0));
 
   if (m_state->IsStateRx ())
@@ -794,12 +816,17 @@
     {
       dataRate500KbpsUnits = txVector.GetMode ().GetDataRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1) * txVector.GetNss () / 500000;
     }
+  if (mpdutype == MPDU_IN_AGGREGATE && preamble != WIFI_PREAMBLE_NONE)
+    {
+      //send the first MPDU in an MPDU
+      m_txMpduReferenceNumber++;
+    }
   struct mpduInfo aMpdu;
-  aMpdu.packetType = packetType;
-  aMpdu.referenceNumber = mpduReferenceNumber;
+  aMpdu.type = mpdutype;
+  aMpdu.mpduRefNumber = m_txMpduReferenceNumber;
   NotifyMonitorSniffTx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, preamble, txVector, aMpdu);
   m_state->SwitchToTx (txDuration, packet, GetPowerDbm (txVector.GetTxPowerLevel ()), txVector, preamble);
-  m_channel->Send (this, packet, GetPowerDbm (txVector.GetTxPowerLevel ()) + m_txGainDb, txVector, preamble, aMpdu, txDuration);
+  m_channel->Send (this, packet, GetPowerDbm (txVector.GetTxPowerLevel ()) + m_txGainDb, txVector, preamble, mpdutype, txDuration);
 }
 
 uint32_t
@@ -879,15 +906,11 @@
 YansWifiPhy::Configure80211g (void)
 {
   NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 2407; //2.407 GHz
+  Configure80211b ();
   SetChannelWidth (20); //20 MHz
 
-  m_deviceRateSet.push_back (WifiPhy::GetDsssRate1Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetDsssRate2Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetDsssRate5_5Mbps ());
   m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate6Mbps ());
   m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate9Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetDsssRate11Mbps ());
   m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate12Mbps ());
   m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate18Mbps ());
   m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate24Mbps ());
@@ -945,59 +968,100 @@
 }
 
 void
+YansWifiPhy::ConfigureHtDeviceMcsSet (void)
+{
+  NS_LOG_FUNCTION (this);
+
+  bool htFound = false;
+  for (std::vector<uint32_t>::size_type i = 0; i < m_bssMembershipSelectorSet.size (); i++)
+    {
+      if (m_bssMembershipSelectorSet[i] == HT_PHY)
+        {
+          htFound = true;
+          break;
+        }
+    }
+  if (htFound)
+    {
+      // erase all HtMcs modes from deviceMcsSet
+      size_t index = m_deviceMcsSet.size () - 1;
+      for (std::vector<WifiMode>::reverse_iterator rit = m_deviceMcsSet.rbegin (); rit != m_deviceMcsSet.rend(); ++rit, --index)
+        {
+          if (m_deviceMcsSet[index].GetModulationClass ()== WIFI_MOD_CLASS_HT)
+            {
+              m_deviceMcsSet.erase (m_deviceMcsSet.begin () + index);
+            }
+        }
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs0 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs1 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs2 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs3 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs4 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
+      m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
+      if (GetSupportedTxSpatialStreams () > 1)
+        {
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs8 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs9 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs10 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs11 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs12 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs13 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs14 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs15 ());
+        }
+      if (GetSupportedTxSpatialStreams () > 2)
+        {
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs16 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs17 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs18 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs19 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs20 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs21 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs22 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs23 ());
+        }
+      if (GetSupportedTxSpatialStreams () > 3)
+        {
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs24 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs25 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs26 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs27 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs28 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs29 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs30 ());
+          m_deviceMcsSet.push_back (WifiPhy::GetHtMcs31 ());
+        }
+    }
+}
+
+void
 YansWifiPhy::Configure80211n (void)
 {
   NS_LOG_FUNCTION (this);
-  SetChannelWidth (20); //20 MHz
   if (m_channelStartingFrequency >= 2400 && m_channelStartingFrequency <= 2500) //at 2.4 GHz
     {
-      m_deviceRateSet.push_back (WifiPhy::GetDsssRate1Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetDsssRate2Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetDsssRate5_5Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate6Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetDsssRate11Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate12Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetErpOfdmRate24Mbps ());
+      Configure80211b ();
+      Configure80211g ();
     }
   if (m_channelStartingFrequency >= 5000 && m_channelStartingFrequency <= 6000) //at 5 GHz
     {
-      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
-      m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24Mbps ());
+      Configure80211a ();
     }
-
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs0 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs1 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs2 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs3 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs4 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
-
+  SetChannelWidth (20); //20 MHz
   m_bssMembershipSelectorSet.push_back (HT_PHY);
+  ConfigureHtDeviceMcsSet ();
 }
 
 void
 YansWifiPhy::Configure80211ac (void)
 {
   NS_LOG_FUNCTION (this);
-  m_channelStartingFrequency = 5e3;   //5.000 GHz
+  m_channelStartingFrequency = 5e3; //5.000 GHz
+  Configure80211n ();
   SetChannelWidth (80); //80 MHz
 
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate6Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate12Mbps ());
-  m_deviceRateSet.push_back (WifiPhy::GetOfdmRate24Mbps ());
-
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs0 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs1 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs2 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs3 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs4 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs5 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs6 ());
-  m_deviceMcsSet.push_back (WifiPhy::GetHtMcs7 ());
-
   m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs0 ());
   m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs1 ());
   m_deviceMcsSet.push_back (WifiPhy::GetVhtMcs2 ());
@@ -1135,7 +1199,7 @@
 }
 
 void
-YansWifiPhy::EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, struct mpduInfo aMpdu, Ptr<InterferenceHelper::Event> event)
+YansWifiPhy::EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, enum mpduType mpdutype, Ptr<InterferenceHelper::Event> event)
 {
   NS_LOG_FUNCTION (this << packet << event);
   NS_ASSERT (IsStateRx ());
@@ -1147,7 +1211,7 @@
 
   if (m_plcpSuccess == true)
     {
-      NS_LOG_DEBUG ("mode=" << (event->GetPayloadMode ().GetDataRate (event->GetTxVector ().GetChannelWidth (), event->GetTxVector ().IsShortGuardInterval (), 1)) <<
+      NS_LOG_DEBUG ("mode=" << (event->GetPayloadMode ().GetDataRate (event->GetTxVector ())) <<
                     ", snr(dB)=" << RatioToDb (snrPer.snr) << ", per=" << snrPer.per << ", size=" << packet->GetSize ());
 
       if (m_random->GetValue () > snrPer.per)
@@ -1165,6 +1229,9 @@
           struct signalNoiseDbm signalNoise;
           signalNoise.signal = RatioToDb (event->GetRxPowerW ()) + 30;
           signalNoise.noise = RatioToDb (event->GetRxPowerW () / snrPer.snr) - GetRxNoiseFigure () + 30;
+          struct mpduInfo aMpdu;
+          aMpdu.type = mpdutype;
+          aMpdu.mpduRefNumber = m_rxMpduReferenceNumber;
           NotifyMonitorSniffRx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, event->GetPreambleType (), event->GetTxVector (), aMpdu, signalNoise);
           m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetTxVector (), event->GetPreambleType ());
         }
@@ -1172,15 +1239,17 @@
         {
           /* failure. */
           NotifyRxDrop (packet);
-          m_state->SwitchFromRxEndError (packet, snrPer.snr);
+          bool isEndOfFrame = ((mpdutype == NORMAL_MPDU && preamble != WIFI_PREAMBLE_NONE) || (mpdutype == LAST_MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE));
+          m_state->SwitchFromRxEndError (packet, snrPer.snr, isEndOfFrame);
         }
     }
   else
     {
-      m_state->SwitchFromRxEndError (packet, snrPer.snr);
+      bool isEndOfFrame = ((mpdutype == NORMAL_MPDU && preamble != WIFI_PREAMBLE_NONE) || (mpdutype == LAST_MPDU_IN_AGGREGATE && preamble == WIFI_PREAMBLE_NONE));
+      m_state->SwitchFromRxEndError (packet, snrPer.snr, isEndOfFrame);
     }
 
-  if (preamble == WIFI_PREAMBLE_NONE && aMpdu.packetType == 2)
+  if (preamble == WIFI_PREAMBLE_NONE && mpdutype == LAST_MPDU_IN_AGGREGATE)
     {
       m_plcpSuccess = false;
     }
@@ -1204,6 +1273,7 @@
 YansWifiPhy::SetNumberOfTransmitAntennas (uint32_t tx)
 {
   m_numberOfTransmitters = tx;
+  ConfigureHtDeviceMcsSet ();
 }
 
 void
@@ -1278,11 +1348,24 @@
   return m_greenfield;
 }
 
+bool
+YansWifiPhy::GetShortPlcpPreambleSupported (void) const
+{
+  return m_shortPreamble;
+}
+
+void
+YansWifiPhy::SetShortPlcpPreambleSupported (bool enable)
+{
+  m_shortPreamble = enable;
+}
+
 void
 YansWifiPhy::SetChannelWidth (uint32_t channelwidth)
 {
   NS_ASSERT_MSG (channelwidth == 5 || channelwidth == 10 || channelwidth == 20 || channelwidth == 22 || channelwidth == 40 || channelwidth == 80 || channelwidth == 160, "wrong channel width value");
   m_channelWidth = channelwidth;
+  AddSupportedChannelWidth (channelwidth);
 }
 
 uint32_t
@@ -1291,6 +1374,38 @@
   return m_channelWidth;
 }
 
+uint8_t 
+YansWifiPhy::GetSupportedRxSpatialStreams (void) const
+{
+  return (static_cast<uint8_t> (GetNumberOfReceiveAntennas ()));
+}
+
+uint8_t 
+YansWifiPhy::GetSupportedTxSpatialStreams (void) const
+{
+  return (static_cast<uint8_t> (GetNumberOfTransmitAntennas ()));
+}
+
+void
+YansWifiPhy::AddSupportedChannelWidth (uint32_t width)
+{
+  NS_LOG_FUNCTION (this << width);
+  for (std::vector<uint32_t>::size_type i = 0; i != m_supportedChannelWidthSet.size (); i++)
+    {
+      if (m_supportedChannelWidthSet[i] == width)
+        {
+          return;
+        }
+    }
+  m_supportedChannelWidthSet.push_back (width);
+}
+
+std::vector<uint32_t> 
+YansWifiPhy::GetSupportedChannelWidthSet (void) const
+{
+  return m_supportedChannelWidthSet;
+}
+
 uint32_t
 YansWifiPhy::GetNBssMembershipSelectors (void) const
 {
diff -Naur ns-3.24.1/src/wifi/model/yans-wifi-phy.h ns-3.25/src/wifi/model/yans-wifi-phy.h
--- ns-3.24.1/src/wifi/model/yans-wifi-phy.h	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/model/yans-wifi-phy.h	2016-03-23 21:36:53.000000000 -0700
@@ -107,15 +107,14 @@
    * \param rxPowerDbm the receive power in dBm
    * \param txVector the TXVECTOR of the arriving packet
    * \param preamble the preamble of the arriving packet
-   * \param aMpdu the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU)
-   *        and the A-MPDU reference number (must be a different value for each A-MPDU but the same for each subframe within one A-MPDU)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param rxDuration the duration needed for the reception of the packet
    */
   void StartReceivePreambleAndHeader (Ptr<Packet> packet,
                                       double rxPowerDbm,
                                       WifiTxVector txVector,
                                       WifiPreamble preamble,
-                                      struct mpduInfo aMpdu,
+                                      enum mpduType mpdutype,
                                       Time rxDuration);
   /**
    * Starting receiving the payload of a packet (i.e. the first bit of the packet has arrived).
@@ -123,14 +122,13 @@
    * \param packet the arriving packet
    * \param txVector the TXVECTOR of the arriving packet
    * \param preamble the preamble of the arriving packet
-   * \param aMpdu the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU)
-   *        and the A-MPDU reference number (must be a different value for each A-MPDU but the same for each subframe within one A-MPDU)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param event the corresponding event of the first time the packet arrives
    */
   void StartReceivePacket (Ptr<Packet> packet,
                            WifiTxVector txVector,
                            WifiPreamble preamble,
-                           struct mpduInfo aMpdu,
+                           enum mpduType mpdutype,
                            Ptr<InterferenceHelper::Event> event);
 
   /**
@@ -281,7 +279,8 @@
 
   virtual void SetReceiveOkCallback (WifiPhy::RxOkCallback callback);
   virtual void SetReceiveErrorCallback (WifiPhy::RxErrorCallback callback);
-  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble, uint8_t packetType, uint32_t mpduReferenceNumber);
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble);
+  virtual void SendPacket (Ptr<const Packet> packet, WifiTxVector txVector, enum WifiPreamble preamble, enum mpduType mpdutype);
   virtual void RegisterListener (WifiPhyListener *listener);
   virtual void UnregisterListener (WifiPhyListener *listener);
   virtual void SetSleepMode (void);
@@ -300,7 +299,7 @@
   virtual WifiMode GetMode (uint32_t mode) const;
   virtual bool IsModeSupported (WifiMode mode) const;
   virtual bool IsMcsSupported (WifiMode mcs);
-  virtual double CalculateSnr (WifiMode txMode, double ber) const;
+  virtual double CalculateSnr (WifiTxVector txVector, double ber) const;
   virtual Ptr<WifiChannel> GetChannel (void) const;
 
   virtual void ConfigureStandard (enum WifiPhyStandard standard);
@@ -387,6 +386,18 @@
    */
   virtual bool GetGreenfield (void) const;
   /**
+   * Enable or disable short PLCP preamble.
+   *
+   * \param preamble sets whether short PLCP preamble is supported or not
+   */
+  virtual void SetShortPlcpPreambleSupported (bool preamble);
+  /**
+   * Return whether short PLCP preamble is supported.
+   *
+   * \returns if short PLCP preamble is supported or not
+   */
+  virtual bool GetShortPlcpPreambleSupported (void) const;
+  /**
    * Return channel width.
    *
    * \return channel width
@@ -399,6 +410,10 @@
    */
   virtual void SetChannelWidth (uint32_t channelwidth);
 
+  virtual uint8_t GetSupportedRxSpatialStreams (void) const;
+  virtual uint8_t GetSupportedTxSpatialStreams (void) const;
+  virtual void AddSupportedChannelWidth (uint32_t width);
+  virtual std::vector<uint32_t> GetSupportedChannelWidthSet (void) const;
   virtual uint32_t GetNBssMembershipSelectors (void) const;
   virtual uint32_t GetBssMembershipSelector (uint32_t selector) const;
   virtual WifiModeList GetMembershipSelectorModes (uint32_t selector);
@@ -450,6 +465,11 @@
    */
   void Configure80211ac (void);
   /**
+   * Configure the device Mcs set with the appropriate HtMcs modes for
+   * the number of available transmit spatial streams
+   */
+  void ConfigureHtDeviceMcsSet (void);
+  /**
    * Return the energy detection threshold.
    *
    * \return the energy detection threshold.
@@ -501,11 +521,10 @@
    *
    * \param packet the packet that the last bit has arrived
    * \param preamble the preamble of the arriving packet
-   * \param aMpdu the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU and 2 is the last MPDU in an A-MPDU)
-   *        and the A-MPDU reference number (must be a different value for each A-MPDU but the same for each subframe within one A-MPDU)
+   * \param mpdutype the type of the MPDU as defined in WifiPhy::mpduType.
    * \param event the corresponding event of the first time the packet arrives
    */
-  void EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, struct mpduInfo aMpdu, Ptr<InterferenceHelper::Event> event);
+  void EndReceive (Ptr<Packet> packet, enum WifiPreamble preamble, enum mpduType mpdutype, Ptr<InterferenceHelper::Event> event);
 
   bool     m_initialized;         //!< Flag for runtime initialization
   double   m_edThresholdW;        //!< Energy detection threshold in watts
@@ -528,7 +547,8 @@
   bool     m_greenfield;            //!< Flag if GreenField format is supported
   bool     m_guardInterval;         //!< Flag if short guard interval is used
   uint32_t m_channelWidth;          //!< Channel width
-
+  std::vector<uint32_t> m_supportedChannelWidthSet; //!< Supported channel width
+  bool     m_shortPreamble;         //!< Flag if short PLCP preamble is supported
 
   /**
    * This vector holds the set of transmission modes that this
@@ -580,6 +600,8 @@
   Time m_channelSwitchDelay;            //!< Time required to switch between channel
   uint16_t m_mpdusNum;                  //!< carries the number of expected mpdus that are part of an A-MPDU
   bool m_plcpSuccess;                   //!< Flag if the PLCP of the packet or the first MPDU in an A-MPDU has been received
+  uint32_t m_txMpduReferenceNumber;     //!< A-MPDU reference number to identify all transmitted subframes belonging to the same received A-MPDU
+  uint32_t m_rxMpduReferenceNumber;     //!< A-MPDU reference number to identify all received subframes belonging to the same received A-MPDU
 };
 
 } //namespace ns3
diff -Naur ns-3.24.1/src/wifi/test/80211b.c ns-3.25/src/wifi/test/80211b.c
--- ns-3.24.1/src/wifi/test/80211b.c	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/test/80211b.c	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,256 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 The Boeing Company
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Gary Pei <guangyu.pei@boeing.com>
+ */
+
+/*
+ * This program is used to generate plots found in the paper
+ * G. Pei and Tom Henderson, "Validation of ns-3 802.11b PHY model", 
+ * available online at http://www.nsnam.org/~pei/80211b.pdf
+ * 
+ * It can be compiled as a C program and relies on a library installation of
+ * the GNU Scientific Library (gsl).  To compile:  
+ *   gcc 80211b.c -o 80211b -lm -lgsl -lgslcblas
+ *
+ * The executable output should be redirected into a text file 80211b.txt
+ *   ./80211b > 80211b.txt 
+ *
+ * Then gnuplot can load the associated plot file which references 80211b.txt:
+ *   gnuplot 80211b.plt
+ */
+
+#include "math.h"
+#include "stdlib.h"
+#include "stdio.h"
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_integration.h>
+#include <gsl/gsl_cdf.h>
+#include <gsl/gsl_sf_bessel.h>
+#define min(a,b) ((a) < (b) ? (a) : (b))
+#define max(a,b) ((a) > (b) ? (a) : (b))
+#define WLAN_SIR_perfect 10.0 // if SIR > 10dB, perfect reception
+#define WLAN_SIR_impossible 0.1 // if SIR < -10dB, impossible to receive
+
+typedef struct fn_parameter_t
+{
+  double beta;
+  double n;
+} fn_parameters;
+
+double QFunction (double x)
+{
+  return 0.5 * erfc (x / sqrt (2.0));
+}
+
+double f (double x, void * params)
+{
+  double beta = ((fn_parameters *) params)->beta;
+  double n = ((fn_parameters *) params)->n;
+  double f = pow ( 2 * gsl_cdf_ugaussian_P (x + beta) - 1, n - 1) * exp (-x * x / 2.0) / sqrt (2.0 * M_PI);
+  return f;
+}
+
+double p_e2 (double e2)
+{
+  double sep;
+  double error;
+  fn_parameters params;
+  params.beta = sqrt (2.0 * e2);
+  params.n = 8.0;
+  gsl_integration_workspace* w = gsl_integration_workspace_alloc (1000);
+  gsl_function F;
+  F.function = &f;
+  F.params = &params;
+  gsl_integration_qagiu (&F, -params.beta, 0, 1e-7, 1000, w, &sep, &error);
+  gsl_integration_workspace_free (w);
+  if (error == 0.0)
+    {
+      sep = 1.0;
+    }
+  return 1.0 - sep;
+}
+
+double p_e1 (double e1)
+{
+  return 1.0 - pow ( 1.0 - p_e2 (e1 / 2.0), 2.0);
+}
+
+double DbToNoneDb (double x)
+{
+  return pow (10.0, x / 10.0);
+}
+
+double NoneDbToDb (double x)
+{
+  return 10.0 * log10 (x);
+}
+
+double DQPSKFunction (double x)
+{
+  double pi = acos (-1.0);
+  return ( (sqrt (2.0) + 1.0) / sqrt (8.0 * pi * sqrt (2.0))) * (1.0 / sqrt (x)) * exp ( -(2.0 - sqrt (2.0)) * x);
+}
+
+double Get80211bDsssDbpskBerIeee (double EcNc)
+{
+  double ber;
+  if (EcNc > WLAN_SIR_perfect)
+    {
+      ber = 0;
+    }
+  else if (EcNc < WLAN_SIR_impossible)
+    {
+      ber =  0.5;
+    }
+  else
+    {
+      ber = min (QFunction (sqrt (11.0 * EcNc)),0.5);
+    }
+  return ber;
+}
+
+double Get80211bDsssDbpskBer (double sinr)
+{
+  double EbN0 = sinr * 22000000.0 / 1000000.0;
+  double ber = 0.5 * exp (-EbN0);
+  return ber;
+}
+
+double Get80211bDsssDqpskBerIeee (double EcNc)
+{
+  double ber;
+  if (EcNc > WLAN_SIR_perfect)
+    {
+      ber = 0;
+    }
+  else if (EcNc < WLAN_SIR_impossible)
+    {
+      ber = 0.5;
+    }
+  else
+    {
+      ber = min (QFunction (sqrt (5.5 * EcNc)),0.5);
+    }
+  return ber;
+}
+
+double Get80211bDsssDqpskBer (double sinr)
+{
+// 2 bits per symbol, 1 MSPS
+  double EbN0 = sinr * 22000000.0 / 1000000.0 / 2.0;
+  double ber = DQPSKFunction (EbN0);
+  return ber;
+}
+
+double Get80211bDsssDqpskCCK5_5BerIeee (double EcNc)
+{
+  double ber;
+  if (EcNc > WLAN_SIR_perfect)
+    {
+      ber = 0.0;
+    }
+  else if (EcNc < WLAN_SIR_impossible)
+    {
+      ber = 0.5;
+    }
+  else
+    {
+      double pew = 14.0 * QFunction (sqrt (EcNc * 8.0)) + QFunction (sqrt (EcNc * 16.0));
+      pew = min (pew, 0.99999);
+      ber = 8.0 / 15.0 * pew;
+    }
+  return ber;
+}
+
+double Get80211bDsssDqpskCCK11BerIeee (double EcNc)
+{
+  double ber;
+  if (EcNc > WLAN_SIR_perfect)
+    {
+      ber = 0.0;
+    }
+  else if (EcNc < WLAN_SIR_impossible)
+    {
+      ber = 0.5;
+    }
+  else
+    {
+      double pew = 24.0 * QFunction (sqrt (EcNc * 4.0))  + 16.0 * QFunction (sqrt (EcNc * 6.0))  + 174.0 * QFunction (sqrt (EcNc * 8.0)) + 16.0 * QFunction (sqrt (EcNc * 10.0)) + 24.0 * QFunction (sqrt (EcNc * 12.0)) + QFunction (sqrt (EcNc * 16.0));
+      pew = min (pew, 0.99999);
+      ber = 128.0 / 255.0 * pew;
+    }
+  return ber;
+}
+
+int main (int argc, char * argv[])
+{
+  double rss, sinr;
+  double totalPkt = 200.0;
+//double noise = 1.552058;  // (dB) this noise figure value corresponds to 
+                            // -99 dBm noise floor reported in CMU paper
+  double noise = 7;  // (dB) this noise figure value corresponds to the 
+                     // default in YansWifiPhy, and matches CMU testbed results
+  double EcNc, EbN01, EbN02, EbN05, EbN011;
+  double ieee1,ieee2,ieee5,ieee11;
+  double numBits = (1024. + 40. + 14.) * 8.;
+  double dbpsk,dqpsk,cck16,cck256,sepcck16,sepcck256;
+  noise = DbToNoneDb (noise) * 1.3803e-23 * 290.0 * 22000000;
+  for (rss = -102.0; rss <= -80.0; rss += 0.1)
+    {
+      sinr   = DbToNoneDb (rss) / 1000.0 / noise;
+      EcNc   = sinr * 22000000.0 / 11000000.0; // IEEE sir
+      EbN01  = sinr * 22000000.0 / 1000000.0;
+      // 2 bits per symbol, 1 MSPS
+      EbN02  = sinr * 22000000.0 / 1000000.0 / 2.0;
+      EbN05  = sinr * 22000000.0 / 1375000.0 / 4.0;
+      EbN011 = sinr * 22000000.0 / 1375000.0 / 8.0;
+      // 1=rss, 2=EcNc, 3=EbN01, 4=EbN02, 5=EBN05, 6=EbN011
+      printf ("%g %g %g %g %g %g ", rss, NoneDbToDb (EcNc),
+              NoneDbToDb (EbN01),NoneDbToDb (EbN02),
+              NoneDbToDb (EbN05),NoneDbToDb (EbN011));
+      ieee1  = Get80211bDsssDbpskBerIeee (EcNc);
+      ieee2  = Get80211bDsssDqpskBerIeee (EcNc);
+      ieee5  = Get80211bDsssDqpskCCK5_5BerIeee (EcNc);
+      ieee11 = Get80211bDsssDqpskCCK11BerIeee (EcNc);
+      // 7=ber_ieee1, 8=ber_ieee2, 9=ber_ieee5, 10=ber_ieee11
+      printf (" %g %g %g %g ", ieee1, ieee2,ieee5,ieee11);
+      ieee1  = totalPkt * pow (1 - ieee1,  numBits);
+      ieee2  = totalPkt * pow (1 - ieee2,  numBits);
+      ieee5  = totalPkt * pow (1 - ieee5,  numBits);
+      ieee11 = totalPkt * pow (1 - ieee11, numBits);
+      // 11=pkt_ieee1, 12=pkt_ieee2, 13=pkt_ieee5, 14=pkt_ieee11
+      printf (" %g %g %g %g ", ieee1, ieee2,ieee5,ieee11);
+      dbpsk  = Get80211bDsssDbpskBer (sinr);
+      dqpsk  = Get80211bDsssDqpskBer (sinr);
+      cck16  = max (0, 8.0 / 15.0 * p_e2 (4.0 * EbN05 / 2.0));
+      cck256 = max (0, 128.0 / 255.0 * p_e1 (8.0 * EbN011 / 2.0));
+      // 15=ber_dbpsk, 16=ber_dqpsk, 17=ber_cck16, 18=ber_cck256
+      printf (" %g %g %g %g ", dbpsk, dqpsk,cck16,cck256);
+      dbpsk     = totalPkt * pow (1 - dbpsk,numBits);
+      dqpsk     = totalPkt * pow (1 - dqpsk,numBits);
+      sepcck16  = p_e2 (4.0 * EbN05 / 2.0);
+      sepcck256 = p_e1 (8.0 * EbN011 / 2.0);
+      cck16     = totalPkt * pow (1.0 - sepcck16,numBits / 4.0);
+      cck256    = totalPkt * pow (1.0 - sepcck256,numBits / 8.0);
+      // 19=pkt_dbpsk, 20=pkt_dqpsk, 21=pkt_cck16, 22=pkt_cck256
+      printf (" %g %g %g %g ", dbpsk, dqpsk,cck16,cck256);
+      // 23=sinr
+      printf (" %g \n",NoneDbToDb (sinr));
+    }
+  return 0;
+}
diff -Naur ns-3.24.1/src/wifi/test/80211b.plt ns-3.25/src/wifi/test/80211b.plt
--- ns-3.24.1/src/wifi/test/80211b.plt	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/test/80211b.plt	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,48 @@
+# Copyright (c) 2010 The Boeing Company
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# Author: Gary Pei <guangyu.pei@boeing.com>
+
+set term postscript eps color enh "Times-BoldItalic"
+set output '80211b.ieee.pkt.eps'
+set xlabel "RSS (dBm)"
+set ylabel "Packet Received"
+set yrange [0:200]
+set xrange [-102:-83]
+plot "80211b.txt" using 1:11 title '1M IEEE', \
+"80211b.txt" using 1:12 title '2M IEEE', \
+"80211b.txt" using 1:13 title '5.5M IEEE', \
+"80211b.txt" using 1:14 title '11M IEEE'
+set term postscript eps color enh "Times-BoldItalic"
+set output '80211b.ns3.pkt.eps'
+set xlabel "RSS (dBm)"
+set ylabel "Packet Received"
+set yrange [0:200]
+set xrange [-102:-83]
+plot "80211b.txt" using 1:19 title '1M DBPSK', \
+"80211b.txt" using 1:20 title '2M DQPSK', \
+"80211b.txt" using 1:21 title '5.5M CCK16', \
+"80211b.txt" using 1:22 title '11M CCK256'
+set term postscript eps color enh "Times-BoldItalic"
+set output '80211b.ieee.sir.eps'
+set xlabel "SIR"
+set ylabel "BER"
+set yrange [10e-9:1]
+set xrange [-2:10]
+set logscale y
+plot "80211b.txt" using 2:7 title '1M IEEE', \
+"80211b.txt" using 2:8 title '2M IEEE', \
+"80211b.txt" using 2:9 title '5.5M IEEE', \
+"80211b.txt" using 2:10 title '11M IEEE'
diff -Naur ns-3.24.1/src/wifi/test/block-ack-test-suite.cc ns-3.25/src/wifi/test/block-ack-test-suite.cc
--- ns-3.24.1/src/wifi/test/block-ack-test-suite.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/block-ack-test-suite.cc	2016-03-23 21:36:53.000000000 -0700
@@ -97,21 +97,29 @@
 
   uint16_t receivedSeq = 4001 * 16;
   uint32_t mappedSeq = QosUtilsMapSeqControlToUniqueInteger (receivedSeq, endSeq);
-  for (i = m_buffer.begin (); i != m_buffer.end () && QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) < mappedSeq; i++)
+  /* cycle to right position for this packet */
+  for (i = m_buffer.begin (); i != m_buffer.end (); i++)
     {
+      if (QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) >= mappedSeq)
+        {
+          //position found
+          break;
+        }
     }
-  {
-    m_buffer.insert (i, receivedSeq);
-  }
+  m_buffer.insert (i, receivedSeq);
 
   receivedSeq = 3999 * 16;
   mappedSeq = QosUtilsMapSeqControlToUniqueInteger (receivedSeq, endSeq);
-  for (i = m_buffer.begin (); i != m_buffer.end () && QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) < mappedSeq; i++)
+  /* cycle to right position for this packet */
+  for (i = m_buffer.begin (); i != m_buffer.end (); i++)
     {
+      if (QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) >= mappedSeq)
+        {
+          //position found
+          break;
+        }
     }
-  {
-    m_buffer.insert (i, receivedSeq);
-  }
+  m_buffer.insert (i, receivedSeq);
 
   for (i = m_buffer.begin (), j = m_expectedBuffer.begin (); i != m_buffer.end (); i++, j++)
     {
@@ -181,30 +189,42 @@
 
   uint16_t receivedSeq = 15 * 16;
   uint32_t mappedSeq = QosUtilsMapSeqControlToUniqueInteger (receivedSeq, endSeq);
-  for (i = m_buffer.begin (); i != m_buffer.end () && QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) < mappedSeq; i++)
+  /* cycle to right position for this packet */
+  for (i = m_buffer.begin (); i != m_buffer.end (); i++)
     {
+      if (QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) >= mappedSeq)
+        {
+          //position found
+          break;
+        }
     }
-  {
-    m_buffer.insert (i, receivedSeq);
-  }
+  m_buffer.insert (i, receivedSeq);
 
   receivedSeq = 15 * 16 + 1;
   mappedSeq = QosUtilsMapSeqControlToUniqueInteger (receivedSeq, endSeq);
-  for (i = m_buffer.begin (); i != m_buffer.end () && QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) < mappedSeq; i++)
+  /* cycle to right position for this packet */
+  for (i = m_buffer.begin (); i != m_buffer.end (); i++)
     {
+      if (QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) >= mappedSeq)
+        {
+          //position found
+          break;
+        }
     }
-  {
-    m_buffer.insert (i, receivedSeq);
-  }
+  m_buffer.insert (i, receivedSeq);
 
   receivedSeq = 4050 * 16;
   mappedSeq = QosUtilsMapSeqControlToUniqueInteger (receivedSeq, endSeq);
-  for (i = m_buffer.begin (); i != m_buffer.end () && QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) < mappedSeq; i++)
+  /* cycle to right position for this packet */
+  for (i = m_buffer.begin (); i != m_buffer.end (); i++)
     {
+      if (QosUtilsMapSeqControlToUniqueInteger ((*i), endSeq) >= mappedSeq)
+        {
+          //position found
+          break;
+        }
     }
-  {
-    m_buffer.insert (i, receivedSeq);
-  }
+  m_buffer.insert (i, receivedSeq);
 
   for (i = m_buffer.begin (), j = m_expectedBuffer.begin (); i != m_buffer.end (); i++, j++)
     {
diff -Naur ns-3.24.1/src/wifi/test/dcf-manager-test.cc ns-3.25/src/wifi/test/dcf-manager-test.cc
--- ns-3.24.1/src/wifi/test/dcf-manager-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/dcf-manager-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -31,6 +31,7 @@
 public:
   DcfStateTest (DcfManagerTest *test, uint32_t i);
   void QueueTx (uint64_t txTime, uint64_t expectedGrantTime);
+  bool IsEdca (void) const;
 
 
 private:
@@ -113,6 +114,12 @@
 {
 }
 
+bool
+DcfStateTest::IsEdca (void) const
+{
+  return false;
+}
+
 void
 DcfStateTest::QueueTx (uint64_t txTime, uint64_t expectedGrantTime)
 {
diff -Naur ns-3.24.1/src/wifi/test/power-rate-adaptation-test.cc ns-3.25/src/wifi/test/power-rate-adaptation-test.cc
--- ns-3.24.1/src/wifi/test/power-rate-adaptation-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/power-rate-adaptation-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -150,7 +150,7 @@
   /*
    * Parf initiates with maximal rate and power.
    */
-  WifiTxVector txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  WifiTxVector txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   WifiMode mode = txVector.GetMode ();
   int power = (int) txVector.GetTxPowerLevel ();
 
@@ -168,7 +168,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -181,9 +181,9 @@
    * As we are using recovery power, one failure make power increase.
    *
    */
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -199,11 +199,11 @@
   for (int i = 0; i < 7; i++)
     {
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
-      manager->ReportDataFailed (remoteAddress,&packetHeader);
+      manager->ReportDataFailed (remoteAddress, &packetHeader);
     }
   manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -216,9 +216,9 @@
    * As we are using recovery power, one failure make power increase. recoveryPower=false.
    */
 
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -231,10 +231,10 @@
    * After two consecutive fails the rate is decreased or the power increased.
    * As we are at maximal power, the rate should be decreased.
    */
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -252,7 +252,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -265,9 +265,9 @@
    * As we are using recovery rate, one failure make rate decrease. recoveryRate=false.
    */
 
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -285,7 +285,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -303,7 +303,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -323,7 +323,7 @@
       manager->ReportDataFailed (remoteAddress,&packetHeader);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -374,7 +374,7 @@
   /*
    * Aparf initiates with maximal rate and power.
    */
-  WifiTxVector txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  WifiTxVector txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   WifiMode mode = txVector.GetMode ();
   int power = (int) txVector.GetTxPowerLevel ();
 
@@ -393,7 +393,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -406,9 +406,9 @@
    * One failure make the power to be increased again.
    * Change to state Low.
    */
-  manager->ReportDataFailed (remoteAddress,&packetHeader);
+  manager->ReportDataFailed (remoteAddress, &packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -427,7 +427,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -446,7 +446,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -464,7 +464,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -479,7 +479,7 @@
    */
   manager->ReportDataFailed (remoteAddress,&packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -497,7 +497,7 @@
       manager->ReportDataFailed (remoteAddress,&packetHeader);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -513,7 +513,7 @@
    */
   manager->ReportDataFailed (remoteAddress,&packetHeader);
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -531,7 +531,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -551,7 +551,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
@@ -563,7 +563,7 @@
       manager->ReportDataOk (remoteAddress, &packetHeader, 0, ackMode, 0);
     }
 
-  txVector = manager->GetDataTxVector (remoteAddress,&packetHeader,packet,packet->GetSize ());
+  txVector = manager->GetDataTxVector (remoteAddress, &packetHeader, packet);
   mode = txVector.GetMode ();
   power = (int) txVector.GetTxPowerLevel ();
 
diff -Naur ns-3.24.1/src/wifi/test/tx-duration-test.cc ns-3.25/src/wifi/test/tx-duration-test.cc
--- ns-3.24.1/src/wifi/test/tx-duration-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/tx-duration-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -100,7 +100,7 @@
     {
       testedFrequency = CHANNEL_36_MHZ;
     }
-  double calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency, 0, 0).GetMicroSeconds  ();
+  double calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency).GetMicroSeconds  ();
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -115,7 +115,7 @@
     {
       //Durations vary depending on frequency; test also 2.4 GHz (bug 1971)
       testedFrequency = CHANNEL_1_MHZ;
-      calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency, 0, 0).GetMicroSeconds ();
+      calculatedDurationMicroSeconds = (double)phy->GetPayloadDuration (size, txVector, preamble, testedFrequency).GetMicroSeconds ();
       if (calculatedDurationMicroSeconds != knownDurationMicroSeconds + 6)
         {
           std::cerr << " size=" << size
@@ -148,7 +148,7 @@
     {
       testedFrequency = CHANNEL_36_MHZ;
     }
-  double calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency, 0, 0).GetNanoSeconds ()) / 1000;
+  double calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency).GetNanoSeconds ()) / 1000;
   if (calculatedDurationMicroSeconds != knownDurationMicroSeconds)
     {
       std::cerr << " size=" << size
@@ -164,7 +164,7 @@
     {
       //Durations vary depending on frequency; test also 2.4 GHz (bug 1971)
       testedFrequency = CHANNEL_1_MHZ;
-      calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency, 0, 0).GetNanoSeconds ()) / 1000;
+      calculatedDurationMicroSeconds = ((double)phy->CalculateTxDuration (size, txVector, preamble, testedFrequency).GetNanoSeconds ()) / 1000;
       if (calculatedDurationMicroSeconds != knownDurationMicroSeconds + 6)
         {
           std::cerr << " size=" << size
@@ -223,10 +223,10 @@
     && CheckTxDuration (1024, WifiPhy::GetDsssRate2Mbps (), 22, false, WIFI_PREAMBLE_LONG, 4096 + 192)
     && CheckTxDuration (1025, WifiPhy::GetDsssRate2Mbps (), 22, false, WIFI_PREAMBLE_LONG, 4100 + 192)
     && CheckTxDuration (1026, WifiPhy::GetDsssRate2Mbps (), 22, false, WIFI_PREAMBLE_LONG, 4104 + 192)
-    && CheckTxDuration (1023, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8184 + 96)
-    && CheckTxDuration (1024, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8192 + 96)
-    && CheckTxDuration (1025, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8200 + 96)
-    && CheckTxDuration (1026, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8208 + 96)
+    && CheckTxDuration (1023, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8184 + 192)
+    && CheckTxDuration (1024, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8192 + 192)
+    && CheckTxDuration (1025, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8200 + 192)
+    && CheckTxDuration (1026, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_SHORT, 8208 + 192)
     && CheckTxDuration (1023, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_LONG, 8184 + 192)
     && CheckTxDuration (1024, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_LONG, 8192 + 192)
     && CheckTxDuration (1025, WifiPhy::GetDsssRate1Mbps (), 22, false, WIFI_PREAMBLE_LONG, 8200 + 192)
diff -Naur ns-3.24.1/src/wifi/test/wifi-aggregation-test.cc ns-3.25/src/wifi/test/wifi-aggregation-test.cc
--- ns-3.24.1/src/wifi/test/wifi-aggregation-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/wifi-aggregation-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -26,9 +26,219 @@
 #include "ns3/mac-low.h"
 #include "ns3/edca-txop-n.h"
 #include "ns3/yans-wifi-phy.h"
+#include "ns3/mac-tx-middle.h"
+#include "ns3/dcf-manager.h"
+#include "ns3/ampdu-tag.h"
+#include "ns3/wifi-mac-trailer.h"
+#include "ns3/msdu-standard-aggregator.h"
+#include "ns3/mpdu-standard-aggregator.h"
+#include "ns3/log.h"
 
 using namespace ns3;
 
+class AmpduAggregationTest : public TestCase
+{
+public:
+  AmpduAggregationTest ();
+
+private:
+  virtual void DoRun (void);
+  Ptr<MacLow> m_low;
+  Ptr<YansWifiPhy> m_phy;
+  Ptr<EdcaTxopN> m_edca;
+  MacTxMiddle *m_txMiddle;
+  Ptr<WifiRemoteStationManager> m_manager;
+  ObjectFactory m_factory;
+  Ptr<MpduAggregator> m_mpduAggregator;
+  DcfManager *m_dcfManager;
+};
+
+AmpduAggregationTest::AmpduAggregationTest ()
+  : TestCase ("Check the correctness of MPDU aggregation operations")
+{
+}
+
+void
+AmpduAggregationTest::DoRun (void)
+{
+  /*
+   * Create and configure phy layer.
+   */
+  m_phy = CreateObject<YansWifiPhy> ();
+  m_phy->ConfigureStandard (WIFI_PHY_STANDARD_80211n_5GHZ);
+
+  /*
+   * Create and configure manager.
+   */
+  m_factory = ObjectFactory ();
+  m_factory.SetTypeId ("ns3::ConstantRateWifiManager");
+  m_factory.Set ("DataMode", StringValue ("HtMcs7"));
+  m_manager = m_factory.Create<WifiRemoteStationManager> ();
+  m_manager->SetupPhy (m_phy);
+  m_manager->SetHtSupported (true);
+
+  /*
+   * Create and configure mac layer.
+   */
+  m_low = CreateObject<MacLow> ();
+  m_low->SetPhy (m_phy);
+  m_low->SetWifiRemoteStationManager (m_manager);
+  m_low->SetAddress (Mac48Address ("00:00:00:00:00:01"));
+
+  m_dcfManager = new DcfManager ();
+  m_dcfManager->SetupLowListener (m_low);
+  m_dcfManager->SetupPhyListener (m_phy);
+  m_dcfManager->SetSlot (MicroSeconds (9));
+
+  m_edca = CreateObject<EdcaTxopN> ();
+  m_edca->SetLow (m_low);
+  m_edca->SetAccessCategory (AC_BE);
+  m_edca->SetWifiRemoteStationManager (m_manager);
+  m_edca->SetManager (m_dcfManager);
+  
+  m_txMiddle = new MacTxMiddle ();
+  m_edca->SetTxMiddle (m_txMiddle);
+  m_edca->CompleteConfig ();
+
+  /*
+   * Configure MPDU aggregation.
+   */
+  m_factory = ObjectFactory ();
+  m_factory.SetTypeId ("ns3::MpduStandardAggregator");
+  m_factory.Set ("MaxAmpduSize", UintegerValue (65535));
+  m_mpduAggregator = m_factory.Create<MpduAggregator> ();
+  m_edca->SetMpduAggregator (m_mpduAggregator);
+
+  /*
+   * Create a dummy packet of 1500 bytes and fill mac header fields.
+   */
+  Ptr<const Packet> pkt = Create<Packet> (1500);
+  Ptr<Packet> currentAggregatedPacket = Create<Packet> ();
+  WifiMacHeader hdr;
+  hdr.SetAddr1 (Mac48Address ("00:00:00:00:00:02"));
+  hdr.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr.SetType (WIFI_MAC_QOSDATA);
+  hdr.SetQosTid (0);
+  uint16_t sequence = m_txMiddle->GetNextSequenceNumberfor (&hdr);
+  hdr.SetSequenceNumber (sequence);
+  hdr.SetFragmentNumber (0);
+  hdr.SetNoMoreFragments ();
+  hdr.SetNoRetry ();
+
+  /*
+   * Establish agreement.
+   */
+  MgtAddBaRequestHeader reqHdr;
+  reqHdr.SetImmediateBlockAck ();
+  reqHdr.SetTid (0);
+  reqHdr.SetBufferSize (0);
+  reqHdr.SetTimeout (0);
+  reqHdr.SetStartingSequence (0);
+  m_edca->m_baManager->CreateAgreement (&reqHdr, hdr.GetAddr1 ());
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * Test behavior when no other packets are in the queue
+   */
+  m_low->m_currentHdr = hdr;
+  m_low->m_currentPacket = pkt->Copy();
+  m_low->m_currentTxVector = m_low->GetDataTxVector (m_low->m_currentPacket, &m_low->m_currentHdr);
+
+  bool isAmpdu = m_low->IsAmpdu (pkt, hdr);
+  NS_TEST_EXPECT_MSG_EQ (isAmpdu, false, "a single packet should not result in an A-MPDU");
+  NS_TEST_EXPECT_MSG_EQ (m_low->m_aggregateQueue->GetSize (), 0, "aggregation queue is not flushed");
+
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * Test behavior when 2 more packets are in the queue
+   */
+  Ptr<const Packet> pkt1 = Create<Packet> (1500);
+  Ptr<const Packet> pkt2 = Create<Packet> (1500);
+  WifiMacHeader hdr1, hdr2;
+
+  hdr1.SetAddr1 (Mac48Address ("00:00:00:00:00:02"));
+  hdr1.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr1.SetType (WIFI_MAC_QOSDATA);
+  hdr1.SetQosTid (0);
+
+  hdr2.SetAddr1 (Mac48Address ("00:00:00:00:00:02"));
+  hdr2.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr2.SetType (WIFI_MAC_QOSDATA);
+  hdr2.SetQosTid (0);
+
+  m_edca->GetEdcaQueue ()->Enqueue (pkt1, hdr1);
+  m_edca->GetEdcaQueue ()->Enqueue (pkt2, hdr2);
+
+  isAmpdu = m_low->IsAmpdu (pkt, hdr);
+  uint32_t aggregationQueueSize = m_low->m_aggregateQueue->GetSize ();
+  NS_TEST_EXPECT_MSG_EQ (isAmpdu, true, "MPDU aggregation failed");
+  NS_TEST_EXPECT_MSG_EQ (m_low->m_currentPacket->GetSize (), 4606, "A-MPDU size is not correct");
+  NS_TEST_EXPECT_MSG_EQ (aggregationQueueSize, 3, "aggregation queue should not be empty");
+  NS_TEST_EXPECT_MSG_EQ (m_edca->GetEdcaQueue ()->GetSize (), 0, "queue should be empty");
+
+  Ptr <const Packet> dequeuedPacket;
+  WifiMacHeader dequeuedHdr;
+  uint32_t i = 0;
+  for (; aggregationQueueSize > 0; aggregationQueueSize--, i++)
+  {
+    dequeuedPacket = m_low->m_aggregateQueue->Dequeue (&dequeuedHdr);
+    NS_TEST_EXPECT_MSG_EQ (dequeuedHdr.GetSequenceNumber (), i, "wrong sequence number");
+  }
+  NS_TEST_EXPECT_MSG_EQ (aggregationQueueSize, 0, "aggregation queue should be empty");
+  
+  //-----------------------------------------------------------------------------------------------------
+
+  /*
+   * Test behavior when the 802.11n station and another non-QoS station are associated to the AP.
+   * The AP sends an A-MPDU to the 802.11n station followed by the last retransmission of a non-QoS data frame to the non-QoS station.
+   * This is used to reproduce bug 2224.
+   */
+  pkt1 = Create<Packet> (1500);
+  pkt2 = Create<Packet> (1500);
+  hdr1.SetAddr1 (Mac48Address ("00:00:00:00:00:02"));
+  hdr1.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr1.SetType (WIFI_MAC_QOSDATA);
+  hdr1.SetQosTid (0);
+  hdr1.SetSequenceNumber (3);
+  hdr2.SetAddr1 (Mac48Address ("00:00:00:00:00:03"));
+  hdr2.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr2.SetType (WIFI_MAC_DATA);
+  hdr2.SetQosTid (0);
+
+  Ptr<const Packet> pkt3 = Create<Packet> (1500);
+  WifiMacHeader hdr3;
+  hdr3.SetSequenceNumber (0);
+  hdr3.SetAddr1 (Mac48Address ("00:00:00:00:00:03"));
+  hdr3.SetAddr2 (Mac48Address ("00:00:00:00:00:01"));
+  hdr3.SetType (WIFI_MAC_DATA);
+  hdr3.SetQosTid (0);
+
+  m_edca->GetEdcaQueue ()->Enqueue (pkt3, hdr3);
+  
+  isAmpdu = m_low->IsAmpdu (pkt1, hdr1);
+  NS_TEST_EXPECT_MSG_EQ (isAmpdu, false, "a single packet for this destination should not result in an A-MPDU");
+  NS_TEST_EXPECT_MSG_EQ (m_low->m_aggregateQueue->GetSize (), 0, "aggregation queue is not flushed");
+  
+  m_edca->m_currentHdr = hdr2;
+  m_edca->m_currentPacket = pkt2->Copy ();
+  isAmpdu = m_low->IsAmpdu (pkt2, hdr2);
+  NS_TEST_EXPECT_MSG_EQ (isAmpdu, false, "no MPDU aggregation should be performed if there is no agreement");
+  NS_TEST_EXPECT_MSG_EQ (m_low->m_aggregateQueue->GetSize (), 0, "aggregation queue is not flushed");
+  
+  m_manager->SetMaxSlrc (0); //set to 0 in order to fake that the maximum number of retries has been reached
+  m_edca->MissedAck();
+  
+  NS_TEST_EXPECT_MSG_EQ (m_edca->m_currentPacket, 0, "packet should be discarded");
+  m_edca->GetEdcaQueue ()->Remove (pkt3);
+
+  Simulator::Destroy ();
+  delete m_txMiddle;
+  delete m_dcfManager;
+}
+
+
 class TwoLevelAggregationTest : public TestCase
 {
 public:
@@ -41,8 +251,8 @@
   Ptr<EdcaTxopN> m_edca;
   Ptr<WifiRemoteStationManager> m_manager;
   ObjectFactory m_factory;
-  Ptr<MpduAggregator> m_mpduAggregator;
   Ptr<MsduAggregator> m_msduAggregator;
+  Ptr<MpduAggregator> m_mpduAggregator;
 };
 
 TwoLevelAggregationTest::TwoLevelAggregationTest ()
@@ -84,17 +294,14 @@
   /*
    * Configure aggregation.
    */
-  m_factory = ObjectFactory ();
-  m_factory.SetTypeId ("ns3::MsduStandardAggregator");
-  m_factory.Set ("MaxAmsduSize", UintegerValue (4095));
-  m_msduAggregator = m_factory.Create<MsduAggregator> ();
-  m_edca->SetMsduAggregator (m_msduAggregator);
+  m_msduAggregator = CreateObject<MsduStandardAggregator> ();
+  m_mpduAggregator = CreateObject<MpduStandardAggregator> ();
+  
+  m_msduAggregator->SetMaxAmsduSize (4095);
+  m_mpduAggregator->SetMaxAmpduSize (65535);
 
-  m_factory = ObjectFactory ();
-  m_factory.SetTypeId ("ns3::MpduStandardAggregator");
-  m_factory.Set ("MaxAmpduSize", UintegerValue (65535));
-  m_mpduAggregator = m_factory.Create<MpduAggregator> ();
-  m_low->SetMpduAggregator (m_mpduAggregator);
+  m_edca->SetMsduAggregator (m_msduAggregator);
+  m_edca->SetMpduAggregator (m_mpduAggregator);
 
   /*
    * Create dummy packets of 1500 bytes and fill mac header fields that will be used for the tests.
@@ -126,6 +333,7 @@
                                                                                  &tstamp);
   m_low->m_currentPacket = peekedPacket->Copy ();
   m_low->m_currentHdr = peekedHdr;
+  m_low->m_currentTxVector = m_low->GetDataTxVector (m_low->m_currentPacket, &m_low->m_currentHdr);
 
   Ptr<Packet> packet = m_low->PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, 0);
 
@@ -145,7 +353,7 @@
   m_factory.SetTypeId ("ns3::MpduStandardAggregator");
   m_factory.Set ("MaxAmpduSize", UintegerValue (0));
   m_mpduAggregator = m_factory.Create<MpduAggregator> ();
-  m_low->SetMpduAggregator (m_mpduAggregator);
+  m_edca->SetMpduAggregator (m_mpduAggregator);
 
   m_edca->GetEdcaQueue ()->Enqueue (pkt, hdr);
   packet = m_low->PerformMsduAggregation (peekedPacket, &peekedHdr, &tstamp, currentAggregatedPacket, 0);
@@ -160,11 +368,7 @@
    * It checks whether MSDU aggregation has been rejected because there is no packets ready in the queue (returned packet should be equal to 0).
    * This test is needed to ensure that there is no issue when the queue is empty.
    */
-  m_factory = ObjectFactory ();
-  m_factory.SetTypeId ("ns3::MpduStandardAggregator");
-  m_factory.Set ("MaxAmpduSize", UintegerValue (4095));
-  m_mpduAggregator = m_factory.Create<MpduAggregator> ();
-  m_low->SetMpduAggregator (m_mpduAggregator);
+  m_mpduAggregator->SetMaxAmpduSize (4095);
 
   m_edca->GetEdcaQueue ()->Remove (pkt);
   m_edca->GetEdcaQueue ()->Remove (pkt);
@@ -186,6 +390,7 @@
 WifiAggregationTestSuite::WifiAggregationTestSuite ()
   : TestSuite ("aggregation-wifi", UNIT)
 {
+  AddTestCase (new AmpduAggregationTest, TestCase::QUICK);
   AddTestCase (new TwoLevelAggregationTest, TestCase::QUICK);
 }
 
diff -Naur ns-3.24.1/src/wifi/test/wifi-error-rate-models-test.cc ns-3.25/src/wifi/test/wifi-error-rate-models-test.cc
--- ns-3.24.1/src/wifi/test/wifi-error-rate-models-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.25/src/wifi/test/wifi-error-rate-models-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -0,0 +1,296 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 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
+ *
+ * Author: Tom Henderson (tomhend@u.washington.edu)
+ */
+
+#include <cmath>
+#include "ns3/test.h"
+#include "ns3/dsss-error-rate-model.h"
+#include "ns3/yans-error-rate-model.h"
+#include "ns3/nist-error-rate-model.h"
+
+using namespace ns3;
+
+double
+FromRss (double rssDbw)
+{
+  // SINR is based on receiver noise figure of 7 dB and thermal noise
+  // of -100.5522786 dBm in this 22 MHz bandwidth at 290K
+  double noisePowerDbw = -100.5522786 + 7;
+
+  double sinrDb = rssDbw - noisePowerDbw;
+  // return SINR expressed as ratio
+  return pow (10.0, sinrDb / 10.0);
+}
+
+class WifiErrorRateModelsTestCaseDsss : public TestCase
+{
+public:
+  WifiErrorRateModelsTestCaseDsss ();
+  virtual ~WifiErrorRateModelsTestCaseDsss ();
+
+private:
+  virtual void DoRun (void);
+};
+
+WifiErrorRateModelsTestCaseDsss::WifiErrorRateModelsTestCaseDsss ()
+  : TestCase ("WifiErrorRateModel test case DSSS")
+{
+}
+
+WifiErrorRateModelsTestCaseDsss::~WifiErrorRateModelsTestCaseDsss ()
+{
+}
+
+void
+WifiErrorRateModelsTestCaseDsss::DoRun (void)
+{
+
+  // 1024 bytes plus headers
+  uint32_t size = (1024 + 40 + 14) * 8;
+  // Spot test some values returned from DsssErrorRateModel
+  // Values taken from sample 80211b.c program used in validation paper
+  double value;
+  // DBPSK
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-105.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0, 1e-13, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-100.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 1.5e-13, 1e-13, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-99.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.0003, 0.0001, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-98.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.202, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-97.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.813, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-96.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.984, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-95.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.999, 0.001, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDbpskSuccessRate (FromRss (-90.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 1, 0.001, "Not equal within tolerance");
+
+  // DQPSK
+  //
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-96.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0, 1e-13, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-95.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 4.5e-6, 1e-6, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-94.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.036, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-93.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.519, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-92.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.915, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-91.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.993, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-90.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.999, 0.001, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskSuccessRate (FromRss (-89.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 1, 0.001, "Not equal within tolerance");
+
+#ifdef HAVE_GSL
+  // DQPSK_CCK5.5
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-94.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0, 1e-13, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-93.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 6.6e-14, 5e-14, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-92.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.0001, 0.00005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-91.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.132, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-90.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.744, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-89.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.974, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-88.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.999, 0.001, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (FromRss (-87.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 1, 0.001, "Not equal within tolerance");
+
+  // DQPSK_CCK11
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-91.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0, 1e-14, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-90.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 4.7e-14, 1e-14, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-89.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 8.85e-5, 1e-5, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-88.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.128, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-87.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.739, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-86.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.973, 0.005, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-85.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 0.999, 0.001, "Not equal within tolerance");
+  value = DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (FromRss (-84.0), size);
+  NS_TEST_ASSERT_MSG_EQ_TOL (value, 1, 0.001, "Not equal within tolerance");
+#endif
+}
+
+class WifiErrorRateModelsTestCaseNist : public TestCase
+{
+public:
+  WifiErrorRateModelsTestCaseNist ();
+  virtual ~WifiErrorRateModelsTestCaseNist ();
+
+private:
+  virtual void DoRun (void);
+};
+
+WifiErrorRateModelsTestCaseNist::WifiErrorRateModelsTestCaseNist ()
+  : TestCase ("WifiErrorRateModel test case NIST")
+{
+}
+
+WifiErrorRateModelsTestCaseNist::~WifiErrorRateModelsTestCaseNist ()
+{
+}
+
+void
+WifiErrorRateModelsTestCaseNist::DoRun (void)
+{
+
+  uint32_t FrameSize = 2000;
+  WifiTxVector txVector;
+  Ptr<NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
+
+  double ps; // probability of success
+  double snr; // dB
+
+  // Spot test some values returned from NistErrorRateModel
+  // values can be generated by the example program ofdm-validation.cc
+  snr = 2.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate6Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 2.04e-10, 1e-10, "Not equal within tolerance");
+  snr = 3.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate6Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.020, 0.001, "Not equal within tolerance");
+  snr = 4.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate6Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.885, 0.001, "Not equal within tolerance");
+  snr = 5.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate6Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.997, 0.001, "Not equal within tolerance");
+
+  snr = 6.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate9Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.097, 0.001, "Not equal within tolerance");
+  snr = 7.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate9Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.918, 0.001, "Not equal within tolerance");
+  snr = 8.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate9Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.998, 0.001, "Not equal within tolerance");
+  snr = 9.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate9Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 6.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate12Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.0174, 0.001, "Not equal within tolerance");
+  snr = 7.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate12Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.881, 0.001, "Not equal within tolerance");
+  snr = 8.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate12Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.997, 0.001, "Not equal within tolerance");
+  snr = 9.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate12Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 8.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate18Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 2.85e-6, 1e-6, "Not equal within tolerance");
+  snr = 9.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate18Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.623, 0.001, "Not equal within tolerance");
+  snr = 10.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate18Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.985, 0.001, "Not equal within tolerance");
+  snr = 11.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate18Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 12.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate24Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 2.22e-7, 1e-7, "Not equal within tolerance");
+  snr = 13.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate24Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.495, 0.001, "Not equal within tolerance");
+  snr = 14.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate24Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.974, 0.001, "Not equal within tolerance");
+  snr = 15.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate24Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 15.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate36Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.012, 0.001, "Not equal within tolerance");
+  snr = 16.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate36Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.818, 0.001, "Not equal within tolerance");
+  snr = 17.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate36Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.993, 0.001, "Not equal within tolerance");
+  snr = 18.5;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate36Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 20.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate48Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 1.3e-4, 1e-4, "Not equal within tolerance");
+  snr = 21.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate48Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.649, 0.001, "Not equal within tolerance");
+  snr = 22.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate48Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.983, 0.001, "Not equal within tolerance");
+  snr = 23.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate48Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+
+  snr = 21.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate54Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 5.44e-8, 1e-8, "Not equal within tolerance");
+  snr = 22.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate54Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.410, 0.001, "Not equal within tolerance");
+  snr = 23.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate54Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.958, 0.001, "Not equal within tolerance");
+  snr = 24.0;
+  ps = nist->GetChunkSuccessRate (WifiMode ("OfdmRate54Mbps"), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
+  NS_TEST_ASSERT_MSG_EQ_TOL (ps, 0.999, 0.001, "Not equal within tolerance");
+}
+
+class WifiErrorRateModelsTestSuite : public TestSuite
+{
+public:
+  WifiErrorRateModelsTestSuite ();
+};
+
+WifiErrorRateModelsTestSuite::WifiErrorRateModelsTestSuite ()
+  : TestSuite ("wifi-error-rate-models", UNIT)
+{
+  AddTestCase (new WifiErrorRateModelsTestCaseDsss, TestCase::QUICK);
+  AddTestCase (new WifiErrorRateModelsTestCaseNist, TestCase::QUICK);
+}
+
+static WifiErrorRateModelsTestSuite wifiErrorRateModelsTestSuite;
+
diff -Naur ns-3.24.1/src/wifi/test/wifi-test.cc ns-3.25/src/wifi/test/wifi-test.cc
--- ns-3.24.1/src/wifi/test/wifi-test.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/test/wifi-test.cc	2016-03-23 21:36:53.000000000 -0700
@@ -21,12 +21,7 @@
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (Case for bug 730)
  */
 
-#include "ns3/nqos-wifi-mac-helper.h"
 #include "ns3/yans-wifi-helper.h"
-#include "ns3/internet-stack-helper.h"
-#include "ns3/ipv4-address-helper.h"
-#include "ns3/packet-sink-helper.h"
-#include "ns3/on-off-helper.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/adhoc-wifi-mac.h"
@@ -40,6 +35,10 @@
 #include "ns3/config.h"
 #include "ns3/boolean.h"
 #include "ns3/string.h"
+#include "ns3/packet-socket-address.h"
+#include "ns3/packet-socket-server.h"
+#include "ns3/packet-socket-client.h"
+#include "ns3/packet-socket-helper.h"
 
 using namespace ns3;
 
@@ -504,9 +503,10 @@
 
 
 private:
+  uint32_t m_received;
+
   void Receive (std::string context, Ptr<const Packet> p, const Address &adr);
 
-  uint32_t m_received;
 };
 
 Bug730TestCase::Bug730TestCase ()
@@ -528,14 +528,13 @@
     }
 }
 
+
 void
 Bug730TestCase::DoRun (void)
 {
   m_received = 0;
 
   Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2304"));
-  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (2));
-  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
 
   NodeContainer wifiStaNode;
   wifiStaNode.Create (1);
@@ -547,13 +546,13 @@
   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();
   phy.SetChannel (channel.Create ());
 
-  WifiHelper wifi = WifiHelper::Default ();
+  WifiHelper wifi;
   wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
                                 "DataMode", StringValue ("DsssRate1Mbps"),
                                 "ControlMode", StringValue ("DsssRate1Mbps"));
 
-  NqosWifiMacHelper mac = NqosWifiMacHelper::Default ();
+  WifiMacHelper mac;
   Ssid ssid = Ssid ("ns-3-ssid");
   mac.SetType ("ns3::StaWifiMac",
                "Ssid", SsidValue (ssid),
@@ -580,48 +579,45 @@
   mobility.Install (wifiApNode);
   mobility.Install (wifiStaNode);
 
-  InternetStackHelper stack;
-  stack.Install (wifiApNode);
-  stack.Install (wifiStaNode);
-
-  Ipv4AddressHelper address;
-  address.SetBase ("10.1.1.0", "255.255.255.0");
-  Ipv4InterfaceContainer StaInterface;
-  StaInterface = address.Assign (staDevices);
-  Ipv4InterfaceContainer ApInterface;
-  ApInterface = address.Assign (apDevices);
-
-  Address sinkLocalAddress (InetSocketAddress (Ipv4Address::GetAny (), 21));
-  PacketSinkHelper sinkHelper ("ns3::TcpSocketFactory", sinkLocalAddress);
-  ApplicationContainer sinkApp = sinkHelper.Install (wifiApNode.Get (0));
-  sinkApp.Start (Seconds (1.0));
-  sinkApp.Stop (Seconds (51.0));
-
-  OnOffHelper sourceHelper ("ns3::TcpSocketFactory", Address ());
-  sourceHelper.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
-  sourceHelper.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
-  AddressValue remoteAddress (InetSocketAddress (ApInterface.GetAddress (0), 21));
-  sourceHelper.SetAttribute ("Remote", remoteAddress);
-  sourceHelper.SetAttribute ("PacketSize", UintegerValue (1460));
-  sourceHelper.SetAttribute ("DataRate", StringValue ("10Mb/s"));
-  ApplicationContainer sourceApp;
-  sourceApp.Add (sourceHelper.Install (wifiStaNode.Get (0)));
-  sourceApp.Start (Seconds (1.0));
-  sourceApp.Stop (Seconds (51.0));
+  Ptr<WifiNetDevice> ap_device = DynamicCast<WifiNetDevice> (apDevices.Get (0));
+  Ptr<WifiNetDevice> sta_device = DynamicCast<WifiNetDevice> (staDevices.Get (0));
 
-  Config::Connect ("/NodeList/*/ApplicationList/0/$ns3::PacketSink/Rx", MakeCallback (&Bug730TestCase::Receive, this));
+  PacketSocketAddress socket;
+  socket.SetSingleDevice (sta_device->GetIfIndex ());
+  socket.SetPhysicalAddress (ap_device->GetAddress ());
+  socket.SetProtocol (1);
+
+  // give packet socket powers to nodes.
+  PacketSocketHelper packetSocket;
+  packetSocket.Install (wifiStaNode);
+  packetSocket.Install (wifiApNode);
+
+  Ptr<PacketSocketClient> client = CreateObject<PacketSocketClient> ();
+  client->SetAttribute ("PacketSize", UintegerValue (1460));
+  client->SetRemote (socket);
+  wifiStaNode.Get(0)->AddApplication (client);
+  client->SetStartTime (Seconds (1));
+  client->SetStopTime (Seconds (51.0));
+
+  Ptr<PacketSocketServer> server = CreateObject<PacketSocketServer> ();
+  server->SetLocal (socket);
+  wifiApNode.Get(0)->AddApplication (server);
+  server->SetStartTime (Seconds (0.0));
+  server->SetStopTime (Seconds (52.0));
+
+  Config::Connect ("/NodeList/*/ApplicationList/0/$ns3::PacketSocketServer/Rx", MakeCallback (&Bug730TestCase::Receive, this));
 
   Simulator::Schedule (Seconds (10.0), Config::Set, "/NodeList/0/DeviceList/0/RemoteStationManager/FragmentationThreshold", StringValue ("800"));
 
   Simulator::Stop (Seconds (55));
   Simulator::Run ();
+
   Simulator::Destroy ();
 
   bool result = (m_received > 0);
   NS_TEST_ASSERT_MSG_EQ (result, true, "packet reception unexpectedly stopped after adapting fragmentation threshold!");
 }
 
-
 //-----------------------------------------------------------------------------
 class WifiTestSuite : public TestSuite
 {
diff -Naur ns-3.24.1/src/wifi/wscript ns-3.25/src/wifi/wscript
--- ns-3.24.1/src/wifi/wscript	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wifi/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -1,7 +1,7 @@
 ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
 def build(bld):
-    obj = bld.create_ns3_module('wifi', ['network', 'internet', 'applications', 'propagation', 'energy'])
+    obj = bld.create_ns3_module('wifi', ['network', 'propagation', 'energy'])
     obj.source = [
         'model/wifi-information-element.cc',
         'model/wifi-information-element-vector.cc',
@@ -47,6 +47,7 @@
         'model/aarfcd-wifi-manager.cc',
         'model/cara-wifi-manager.cc',
         'model/minstrel-wifi-manager.cc',
+        'model/minstrel-ht-wifi-manager.cc',
         'model/qos-tag.cc',
         'model/qos-utils.cc',
         'model/edca-txop-n.cc',
@@ -71,7 +72,9 @@
         'model/ampdu-tag.cc',
         'model/wifi-radio-energy-model.cc',
         'model/wifi-tx-current-model.cc',
-	'model/vht-capabilities.cc',
+        'model/vht-capabilities.cc',
+        'model/erp-information.cc',
+        'model/ht-operations.cc',
         'helper/wifi-radio-energy-model-helper.cc',
         'helper/vht-wifi-mac-helper.cc',
         'helper/ht-wifi-mac-helper.cc',
@@ -80,6 +83,7 @@
         'helper/yans-wifi-helper.cc',
         'helper/nqos-wifi-mac-helper.cc',
         'helper/qos-wifi-mac-helper.cc',
+        'helper/wifi-mac-helper.cc',
         ]
 
     obj_test = bld.create_ns3_module_test_library('wifi')
@@ -90,6 +94,7 @@
         'test/power-rate-adaptation-test.cc',
         'test/wifi-test.cc',
         'test/wifi-aggregation-test.cc',
+        'test/wifi-error-rate-models-test.cc',
         ]
 
     headers = bld(features='ns3header')
@@ -121,6 +126,7 @@
         'model/aarfcd-wifi-manager.h',
         'model/cara-wifi-manager.h',
         'model/minstrel-wifi-manager.h',
+        'model/minstrel-ht-wifi-manager.h',
         'model/wifi-mac.h',
         'model/regular-wifi-mac.h',
         'model/supported-rates.h',
@@ -137,6 +143,7 @@
         'model/edca-txop-n.h',
         'model/msdu-aggregator.h',
         'model/amsdu-subframe-header.h',
+        'model/msdu-standard-aggregator.h',
         'model/qos-tag.h',
         'model/mgt-headers.h',
         'model/status-code.h',
@@ -162,7 +169,9 @@
         'model/ampdu-tag.h',
         'model/wifi-radio-energy-model.h',
         'model/wifi-tx-current-model.h',
-	'model/vht-capabilities.h',
+        'model/vht-capabilities.h',
+        'model/erp-information.h',
+        'model/ht-operations.h',
         'helper/wifi-radio-energy-model-helper.h',
         'helper/vht-wifi-mac-helper.h',
         'helper/ht-wifi-mac-helper.h',
@@ -171,6 +180,7 @@
         'helper/yans-wifi-helper.h',
         'helper/nqos-wifi-mac-helper.h',
         'helper/qos-wifi-mac-helper.h',
+        'helper/wifi-mac-helper.h',
         ]
 
     if bld.env['ENABLE_GSL']:
diff -Naur ns-3.24.1/src/wimax/bindings/callbacks_list.py ns-3.25/src/wimax/bindings/callbacks_list.py
--- ns-3.24.1/src/wimax/bindings/callbacks_list.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wimax/bindings/callbacks_list.py	2016-03-23 21:36:53.000000000 -0700
@@ -5,4 +5,5 @@
     ['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', 'bool', 'unsigned long', '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/wimax/bindings/modulegen__gcc_ILP32.py ns-3.25/src/wimax/bindings/modulegen__gcc_ILP32.py
--- ns-3.24.1/src/wimax/bindings/modulegen__gcc_ILP32.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wimax/bindings/modulegen__gcc_ILP32.py	2016-03-23 21:36:53.000000000 -0700
@@ -139,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')
     ## snr-to-block-error-rate-manager.h (module 'wimax'): ns3::SNRToBlockErrorRateManager [class]
@@ -294,12 +294,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'))
     ## ss-service-flow-manager.h (module 'wimax'): ns3::SsServiceFlowManager [class]
@@ -466,6 +470,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]
@@ -482,6 +490,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> >'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy [class]
     module.add_class('SimpleOfdmWimaxPhy', parent=root_module['ns3::WimaxPhy'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::FrameDurationCode [enumeration]
@@ -726,9 +736,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_Ns3SsServiceFlowManager_methods(root_module, root_module['ns3::SsServiceFlowManager'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
@@ -801,6 +813,8 @@
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     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_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'])
@@ -809,6 +823,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_Ns3SimpleOfdmWimaxPhy_methods(root_module, root_module['ns3::SimpleOfdmWimaxPhy'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1873,6 +1888,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', 
@@ -1888,6 +1908,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', 
@@ -2064,7 +2089,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', 
@@ -3160,10 +3185,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', 
@@ -5555,6 +5584,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', 
@@ -6314,6 +6347,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([])
@@ -6350,6 +6395,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([])
@@ -10325,6 +10382,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]
@@ -10404,6 +10547,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', 
@@ -10778,6 +10926,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_Ns3SimpleOfdmWimaxPhy_methods(root_module, cls):
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::SimpleOfdmWimaxPhy(ns3::SimpleOfdmWimaxPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimpleOfdmWimaxPhy const &', 'arg0')])
diff -Naur ns-3.24.1/src/wimax/bindings/modulegen__gcc_LP64.py ns-3.25/src/wimax/bindings/modulegen__gcc_LP64.py
--- ns-3.24.1/src/wimax/bindings/modulegen__gcc_LP64.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/src/wimax/bindings/modulegen__gcc_LP64.py	2016-03-23 21:36:53.000000000 -0700
@@ -139,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')
     ## snr-to-block-error-rate-manager.h (module 'wimax'): ns3::SNRToBlockErrorRateManager [class]
@@ -294,12 +294,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'))
     ## ss-service-flow-manager.h (module 'wimax'): ns3::SsServiceFlowManager [class]
@@ -466,6 +470,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]
@@ -482,6 +490,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> >'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy [class]
     module.add_class('SimpleOfdmWimaxPhy', parent=root_module['ns3::WimaxPhy'])
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::FrameDurationCode [enumeration]
@@ -726,9 +736,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_Ns3SsServiceFlowManager_methods(root_module, root_module['ns3::SsServiceFlowManager'])
     register_Ns3ThreeLogDistancePropagationLossModel_methods(root_module, root_module['ns3::ThreeLogDistancePropagationLossModel'])
@@ -801,6 +813,8 @@
     register_Ns3MatrixPropagationLossModel_methods(root_module, root_module['ns3::MatrixPropagationLossModel'])
     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_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'])
@@ -809,6 +823,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_Ns3SimpleOfdmWimaxPhy_methods(root_module, root_module['ns3::SimpleOfdmWimaxPhy'])
     register_Ns3TimeValue_methods(root_module, root_module['ns3::TimeValue'])
     register_Ns3TypeIdChecker_methods(root_module, root_module['ns3::TypeIdChecker'])
@@ -1873,6 +1888,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', 
@@ -1888,6 +1908,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', 
@@ -2064,7 +2089,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', 
@@ -3160,10 +3185,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', 
@@ -5555,6 +5584,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', 
@@ -6314,6 +6347,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([])
@@ -6350,6 +6395,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([])
@@ -10325,6 +10382,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]
@@ -10404,6 +10547,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', 
@@ -10778,6 +10926,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_Ns3SimpleOfdmWimaxPhy_methods(root_module, cls):
     ## simple-ofdm-wimax-phy.h (module 'wimax'): ns3::SimpleOfdmWimaxPhy::SimpleOfdmWimaxPhy(ns3::SimpleOfdmWimaxPhy const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::SimpleOfdmWimaxPhy const &', 'arg0')])
diff -Naur ns-3.24.1/test.py ns-3.25/test.py
--- ns-3.24.1/test.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/test.py	2016-03-23 21:36:53.000000000 -0700
@@ -54,7 +54,7 @@
     "ENABLE_TESTS",
     "EXAMPLE_DIRECTORIES",
     "ENABLE_PYTHON_BINDINGS",
-    "ENABLE_CLICK",
+    "NSCLICK",
     "ENABLE_BRITE",
     "ENABLE_OPENFLOW",
     "APPNAME",
@@ -69,7 +69,7 @@
 ENABLE_THREADING = False
 ENABLE_EXAMPLES = True
 ENABLE_TESTS = True
-ENABLE_CLICK = False
+NSCLICK = False
 ENABLE_BRITE = False
 ENABLE_OPENFLOW = False
 EXAMPLE_DIRECTORIES = []
@@ -767,6 +767,18 @@
     elapsed_time = time.time() - start_time
 
     retval = proc.returncode
+    try:
+        stdout_results = stdout_results.decode()
+    except UnicodeDecodeError:
+        print("Non-decodable character in stdout output of %s" % cmd)
+        print(stdout_results)
+        retval = 1
+    try:
+        stderr_results = stderr_results.decode()
+    except UnicodeDecodeError:
+        print("Non-decodable character in stderr output of %s" % cmd)
+        print(stderr_results)
+        retval = 1
 
     #
     # valgrind sometimes has its own idea about what kind of memory management
@@ -1324,6 +1336,8 @@
         else:
             proc = subprocess.Popen("sysctl -n hw.ncpu", shell = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
             stdout_results, stderr_results = proc.communicate()
+            stdout_results = stdout_results.decode()
+            stderr_results = stderr_results.decode()
             if len(stderr_results) == 0:
                 processors = int(stdout_results)
 
diff -Naur ns-3.24.1/utils/check-style.py ns-3.25/utils/check-style.py
--- ns-3.24.1/utils/check-style.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/utils/check-style.py	2016-03-23 21:36:53.000000000 -0700
@@ -363,9 +363,9 @@
             failed.append([src, dst])
     if len(failed) > 0:
         if not diff:
-            print 'Found %u badly indented files:' % len(failed)
+            print('Found %u badly indented files:' % len(failed))
             for src,dst in failed:
-                print '  ' + src
+                print('  ' + src)
         else:
             for src,dst in failed:
                 s = open(src, 'r').readlines()
@@ -422,7 +422,7 @@
         file = options.file
         if not os.path.exists(file) or \
                 not os.path.isfile(file):
-            print 'file %s does not exist' % file
+            print('file %s does not exist' % file)
             sys.exit(1)
         indent_files([file], diff=options.diff, 
                      debug=options.debug,
diff -Naur ns-3.24.1/utils/print-introspected-doxygen.cc ns-3.25/utils/print-introspected-doxygen.cc
--- ns-3.24.1/utils/print-introspected-doxygen.cc	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/utils/print-introspected-doxygen.cc	2016-03-23 21:36:53.000000000 -0700
@@ -879,7 +879,7 @@
       { "Box",            "Box",            true,  "box.h"              },
       { "DataRate",       "DataRate",       true,  "data-rate.h"        },
       { "HtCapabilities", "HtCapabilities", true,  "ht-capabilities.h"  },
-      { "IeMeshId",       "IeMeshId",       true,  "id-dot11s-id.h"     },
+      { "IeMeshId",       "IeMeshId",       true,  "ie-dot11s-id.h"     },
       { "Ipv4Address",    "Ipv4Address",    true,  "ipv4-address.h"     },
       { "Ipv4Mask",       "Ipv4Mask",       true,  "ipv4-address.h"     },
       { "Ipv6Address",    "Ipv6Address",    true,  "ipv6-address.h"     },
@@ -908,7 +908,7 @@
       { "Enum",           "int",            false, "enum.h"             },
       { "Integer",        "int64_t",        false, "integer.h"          },
       { "Pointer",        "Pointer",        false, "pointer.h"          },
-      { "RandomVariable", "RandomVariable", true,  "random-variable.h"  },
+      { "RandomVariable", "RandomVariable", true,  "random-variable-stream.h"  },
       { "String",         "std::string",    false, "string.h"           },
       { "Time",           "Time",           true,  "nstime.h"           },
       { "Uinteger",       "uint64_t",       false, "uinteger.h"         },
@@ -1262,7 +1262,6 @@
   info.RecordAggregationInfo ("ns3::Node", "ns3::TcpSocketFactory");
   info.RecordAggregationInfo ("ns3::Node", "ns3::UdpSocketFactory");
   info.RecordAggregationInfo ("ns3::Node", "ns3::PacketSocketFactory");
-  info.RecordAggregationInfo ("ns3::Node", "ns3::olsr::RoutingProtocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::MobilityModel");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Ipv4L3Protocol");
   info.RecordAggregationInfo ("ns3::Node", "ns3::Ipv4NixVectorRouting");
diff -Naur ns-3.24.1/VERSION ns-3.25/VERSION
--- ns-3.24.1/VERSION	2015-09-30 12:12:04.000000000 -0700
+++ ns-3.25/VERSION	2016-03-23 21:36:52.000000000 -0700
@@ -1 +1 @@
-3.24.1
+3.25
diff -Naur ns-3.24.1/waf ns-3.25/waf
--- ns-3.24.1/waf	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/waf	2016-03-23 21:36:53.000000000 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # encoding: ISO8859-1
-# Thomas Nagy, 2005-2015
+# Thomas Nagy, 2005-2016
 
 """
 Redistribution and use in source and binary forms, with or without
@@ -32,13 +32,13 @@
 
 import os, sys, inspect
 
-VERSION="1.8.12"
-REVISION="f00e5b53f6bbeab1384a38c9cc5d51f7"
-GIT="1427497785a594dedeaac09013db635791f068c4"
+VERSION="1.8.19"
+REVISION="b1fc8f7baef51bd2db4c2971909a568d"
+GIT="22213cd8abbd141bda40667f7ca2a48f2d6ad785"
 INSTALL=''
-C1='#+'
-C2='#)'
-C3='#%'
+C1='#5'
+C2='#/'
+C3='#,'
 cwd = os.getcwd()
 join = os.path.join
 
@@ -165,6 +165,6 @@
 	Scripting.waf_entry_point(cwd, VERSION, wafdir)
 
 #==>
-#BZh91AY&SYO)RAF`@Ɔ"@l 8a<_}#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%y:Xzr{U\hkнwٯa;s_{^{9|_pYon$%COGzΝuom==(}ljnzO}{mۭ}wݍy#%#%#%3```hz<#%y=/0vݕͪ:58#)#%ޞz#%bv-khv""]۔:4%J#%%Q]d;N}a>:{/nzKM΀9mm:Wro}[U޶f̗6mmݷv9w۵y{_xu|T{sTv#%(P(n2#%yU@>̐K}w=w#%#%#)$`4]^{#)i]}}݁fKfhγǣ|w^n[@o;yJ);`w{݇cQ>9tW:m7|;9ڽլqۻw}{ӰNv-josg*|MNV}TUx^wۮmT}axz^]뗭wŬ#%n񷧽y{#+#)ѭQl)FR}0#%sж[ǯA}{9wp#%p#%m׻};绵{^{w}cn:xC;r"ګop>ڟ*{n#))kɯG>ZW{^nv˦]Y}}ѯw<vM#)lP<vtZ^9{NC[uw;z{Sýcѹ8Ҳ={^}|{ջo#)׾ocol%Oth`esׯ{<;Azhk=:=y3gž]#+#%%T+cݵ`nۛr%uw8iy|v۫N]jH[Jw26͞u=}{a7^2imsٙ1o>wu˺{}4û]^^%4#%4#% d@M4h44dBja#OH#%#)#%A)A !2h&*~CJoHS #%#%#%#%#%	#%"S)IdOShhFmD2C@`@#%E$Й#)MSLC& #%#%#)#%#%#%#%!#%#%	@C#+y&M6zj4@hڍ=@#%LA"=)m*~jj=M!#%#%#%Omw&)HOWr	e1V1bbnB DR	WQ5(Ka󖼽ضs:N*%6 n|Ã#+BHe*jKe>73f((o*"JOWx2&H	弣@bQ!]6ښQmjkPB#%2BEx#J#%A	(zBʂT2#)QmUګURA bX"1FSR)c"d6T52Iba4mJADI&ɌAfcBi(,i"b-)%*S#lH0K-$$`Hme5#i06-jjI-Dɒdb)jVa2jK&SmSlLl$YI5̍Hhlf%#+KI2C610BFfb&	R#%Sf !S$ȔD,R@Kɡ"d!"RR&H6c%)6*-6ECIR0"dM"LbAe6IHYH*QE3#)i#+EbBH؍I`lI)QQlIHS6 MIH	3Fa+2̃BTb$"HJa	I4de)fihE$4DY`EHd6ih#)Kdlh3H$*$ʂfmi%٢Jki&ii5&JL i%*6(AE%AdA%()c@02CL#)&5EaC)dY2)%$$(P-F02e6I6k35)P)Hl*d,bMLɉ(SdQS"L#h1IJIl&#+$L6ɲRI,FB)$e2#Sf(&D6ƒf(i1	!eF5+-&DIdDRQc(!j#+-dZJ#)2S$5f#Le3M6JRS#6ģB24]B	R*XThLʈbj%b(lXYJBi#Y	j,k&Cc(-&cRdņfR4iՑ*aX$)Ujm!Y4¬#+dEhRKLDefa*-m	6F#+4jQHmbY!Dme1%hԢSjUMZd͵ڴF#)MdL٬33SJE$j֕JU4cm*e)6ZM#)lfd5%Cbҍ%D"!BP`Sj6ILRiQ&IL2(RH-,M4S%2cYM!(TZ,bcl&c)d"aJQ&,BM5RQ,6cf!IX	&ٖSE	#)Jm3hFh%L,IbIHl-RjQIRJҩJi6Fei-b		(2lԙ42͋AYM(MM5$dS*2e-%%"IA,DƌihɲR&"jHHj#l&ŢEb+M&&hHS#%X[-)$ԆY3%,ihѰѨF#+DE*c()5JQ5cXfhCQIYRQ%d4EUF12Z)(TiIMTJJQkb#)REJ,FFcY45T)(Kd5bE&ņB"ŋLC4`L3DQa)Kf"Z+E$@Elj6IEHRaj҂JjMElkF+%[&1JHlЉ(J6J`у5Dmhқm%AXdTHVeQmKjQ6CK+ŢbjM6e)DE6-VJlmV)6̣IhR5h[mFT4"MEchP-٫&21b֊"+F-FmlEjVmDH6cQdEElII"!jMfZ>w?&s~Ƽ^+*kI4La?."RS"U"bb̧bU4ȟ9e?t|sx1V#)5!,1gF"ȓOʯl wA-~kmI2hFփHYhyDCD훸/ݩL#=lX!]ӎv+GG=ޢCneaIR}qn@d!cA'$TbZefJpB75TƂnM#%lށij5%;/vwu#%r#)jI6eU=te,dY}ToT'(CPS:r@\iZIhT#3`peYvOQnfUqT:+]{l%qhpPDrPa]΋\ɤ)5H/$tI"ePSAA,JPc |Q˕SSUӎpa)5LAUWo|tQ",.FU#)4XM@n##ԗc;7Ыy}Wy:uMG;]ʼXñ{OaIPTR!M$c;f`iu%VQkr􋟻Ǧf+U_bLPYN5=vEkTVlЃ	w?okKHe'k4#+;d !#œТ4]nʎ쪖,-]&yaK^okzTNfAc]L7obMnUʱb3PdDAb,#̐m&ƻRO<\HKU#ͭUJ.XoE?q.mcExex\ji5~'g_q2T-$،hcԞRu$$"Ѐ:&/WK-X^OE)|ܨ*o/FC0:|,kJ]xJm}D=o8#.>:4Ny*Db+mfB``*Kyu7]H\XPd-7,hJKr$(A;jWZ7aUN۸#)|`#)^-;{*ȂdFˆ^JR<jݣ<!}l6ӌL5|U)Ѣ8WЬy#%\1ȳ#Shkw3C:`[<xZpݤ{jz]2T9ЪEk\?m,<R9%)l`Y2(~dژÍ);1]\w+#)ﵓ8Va{N@#)#9__>0{quyd#+ԧ4rt݈ʠdAY5=dM2#)&Z5g?De\?Tr$*{LՕeQw$vX+Ϣ?->#%a}ZHJWސ퉡:ԣ@H틤@{zE|xRczM<%|<wc'nj+OWߎ^P2j<3۟jOt$|k@µS7v2bwT}ZT-CA$$sj^DvN+<CkKJލFp\dFz;.(UTVvin3ΏavєVcMc ޻UmeJj8U``֩V#dϕMX{Uu;m2QڭLX1+tsڝvpem0S	ljxσ]^{;b,d~p[4&Hy7tbM#%4߻F8)#+.G.Yd/fI#+Cy-ظ4&q~j]1#)*nSvU/u4$k't]~yd6E@nr~pfiFytF21]XGM,)^Qh["Lį/ޞ?uo|;J7=--%,36.ݱQHSJ(za̭I/zWg%#)Y#8cmu}}Y?\&}'wуjBS48s~ߜ4RFȏŞvpݘk֮4d@ G(s:3,P80)J^1v.X(20`#)OSF[n9z퉯ƶ=+>jQ#=zF.TNuT((T%"xqlS*C?hT4{:ըmw8fىQS@UTbcQto9Qӫt!ɹOǤ"_^6,"9MyBԈ]xc:88هv7Z=_?sÃPwFe/=7#+/ysHneE! BIpE߼B`{R-: uvcCcc#)]Lª*o~!$֡Fȓ[^w5qhQr<k\T5Åq}wNMޓ|zNfq*X$Ge;װy5zwo\꽍!F6w]orT#!)Db3V(aBfzK~8Lޖ#+(&ǐFef"~de[$US$x*∭;gvdg5s_ފY<:Ls]p'Om2/In,9KjBo3-d'ps7}X^iJޡL$Oe]#+'Ϗ9>N,>NKJ%R+m-{^"G9	h7<jlPbz6@LxW(uE{*fk	A=?tRzEq9#a5eQM٧k',Hmz,/*	'γ%FU-\=rr3oY	$:Ajӭʪ.3@43Dmw3`	ιV}RsswQ[VYR>#4DFIm/jHs<r#K7i6Խ[K3S[|M&e\xwHVOLh%4O|ޏW:QQGUұEQ5#+e5T_V}%43F0V'v60FޭI <0%N&!ȭRn]>CL!~mHr<Z!\|v)o3]-CtDVQGQԨ%9׆Ĵ3lll~:`0<(+|.8AYCO,yzF}\aY:Ԑ΢4AᖯaifmY4(ORcƃK8QijfwgFSʷ.|,Nƻ0/,TdtGM&19w\T'r8{jEJM.psn&nMWR2dhώywPC(QyAlahC]5מ0:!GeJUM&?+`!{=S#)g#۴+qQyU>q-k:9,*MQrfo"_Vf·{,O]7<$5z+jPVd">|bmh!Y+JDLH@tj2'2AZ¯VMt]<R)YR<\Kh&	kLjV4t>g6w64æMۮ;#)k!FmT6*"_oyd(f}Uo.s٩-1#+Ĵ(icTqLV8szOií%CzٰQKe"Pt.#NMDdYdoM_=~n`KҰBl_z]j[OMf-#+=F/,%{Fn:kq{qpU#zwTWEK|u!ʨNPS1u&KE!JV|ss5/d@Pc~߷>ZUTy2#)Su/st~*YNiK_"Sl	MOsn"4 5+6iz}osIBob̽Z{EC^Y&wP9R8e2Jb.m>Vp98^E}*rIwMXo{ֲaƊwC}Hs˩k͹Q}t=51s'?Tȳ.}Uw{`㱙\W&;A|[B?L+z6麊YVv&<LoDS66R:NlSķfmD/Oq9ZR0I7v4 4Pάe]fߍx+R6P,LVQ`$Ieë>%dJl,LJfO#+Rb	@QNl~IUxiKR\Ձ\SLVU筿<g~	#%Ƞ=*e#)i;:gaYo">/Ա#+滯\HpU*˲	SCoCU:ʫLn6wmPIg&a{EyT3yyn(Si-Gsh"PE_#+1*,y<+W'ی}qVϨ/v&WBw3.A˸뮓ϟ8Ϋݾeb3曯psFu{|Z(T_a&za2I\[[,J[I#>{_glbȒ6?f>:\a#+U5)\oDX5(#d9Ʊ&MnɅoF9`mR'V@>;aB)vVs%\Z}e?C5#LG?*:ic^o_b&!	dڈ]o(~x<Sպ+d^'ǆ||={꡷U#)|ۀ	C,'ON6Myl]>	ϸDSG6OkeE!8u4eO^`3#)K#ܛծ&do7FG;[^aT,XI#%p7x'W\qhlLjȷ  #)#)~H~S%)<pgvm݈#)n4b}ߍ~{i[pBPtgzW`PHTmˣ:E]ΙJ?U[r*Lj&,*ZPTN>y6ڊWнV%>XffM!&N9&lO:Kk_?4>$D#)aG^&U#Y9k.g#+ŌRV0~ɮejooWѨG۫xBCن/EƷ䪧iږ~>.Vl?j4S˲6guě$lȫ=Eݼ*j@qaôf#+q#+W:1AEc5O޼Y׊{`sɃ:NVʹS}']AP"ês/yew"a =j0C\2oWWާuQ鸪\	AI$CM4CCW0azsMG]/6gxk}̳7΀nUklesbBӎzL!#W)GG.S>ìENҒ7+#)-|b]-#+!ͨ{cßKS>v[L	H0\%SւbaGpoPYHc0~MC3秷|?8l_V3'IGI׬rѡ^	]6&۰EDK1db{w2Y?AMOb<L5i8zSr8Fgώ]uPT&eTV_^}Dю>vk]'9{{W0m}r\׼GǬvYsV) 62&sBq~	,MRjXgv]Au&:9mԥTl#%1"f:?#)~Ƀ :op7!	|c3#+xÍO_Ǿ	\t7pJWowp2ÍJi(DsrmّXLoe}5,9݄)6:i$B	G-TMQhY(!#MɗXStò)&|绱_TlÍNQE*.&0{ϟ=9,Vuv}9Q43ik:S?:2ɧVZ؅bd(W:e1#)lDIlncR8-mq:wA.C`lwP%#)1BD=fw8q%5}T7̄vQ`>\#) byd&9VXa1Yg=˓`!}YeM#{)Y臿y|kǉ:Muܒrg/_EԺSD)VG:/!KbdjFZ-Q'jM/ݱsqs.ng+dbݩ^^.f)нWTLGs\#Jfah%7JtZzY呿vKxkLy78&:u	#L((kʚ56'6ehEفCNʣcNL|yK	$&܌sS%X=V]g9T_?>7Ҿr8tpt~V~u-=$>K{cm2GANJ*io}]FW^ˣ`QQAH2m-Wn!K>Efg>C7npEj~ioQ?bbba )0Ev;$rܨ !">>E}/J S}rW!{/d=te-E[yJ=sX7|챤hL$qC#+}*2=BNI?Q[0;qUrYStG4DcH[.P|Q6׬1!D6m-լ薂Y>8IE+NqN:-"0O}{Q1q3$/>z6NpG~?SϷ!-;3]hj}̑]H(NOR֟*c0p`8jLLFHsf&/j#)x5RƘ	gjA5nW][W6%ުKAZICd\#+{C)L)AaWuW㈾`$Q,BC%JԪ\h7,A" MTHEPa5X*y{u9mB$;贖vBӎϵJ)#+[W]kIOSY]J\*܂/w041fԫv{[vCdIj!bwc0YTC/іhIdxڏ*4\7-Vwķ.SDםux&eYd=g&1Z5Q)wJ˴ae'L52ZT-I'8Pj8˖~8C?٬},}Ϫ9l;?X}jB%0h'#70agf#)iS0V9?>/j[w5ff#+>RH<}.0@;XHj-8%6ipJCoI+r&%@:%EAvc0) =(<0D}_7jaU" &&_,z5y!z>@%`?Țjqou1/BlH2 Jv桉ibaE+V{kIj8#)O|e=z cH dҴDH/]*-/W/	E3DAW,*+)Y"Ae3X9bi$4)H]Y9UYPIi7Dis%z8H'lZ1N&$B1g:n9ÐB꽱L:dl51y5-kt,CE/U6xp7yjߧ*<Qr!:	'ytébGbZaOw/RdOƪ*(d];c|DFxA}e[}Q^CwJiK~7L}@2l*:~Z&C^	o2HLq#%0"ٶ{Mگ̢ad*QzlABK=1R$EHR1>y=?vbC4Ʋ$@-s#>i[Tfۗ&UeP"lKP*Asy5ӃO?>JWJOُ6A#ܳ/yKc/_="#("'؛ˌlʴ}985Ж;K`crꆄX" -msi"6[siA#)4H`AlH@h@q݃0uq'0m0%'5a;>zgXRs}_~lnGG/ȑK'nN:sfbr5wcZ5V(?NT9=:;{Envw^5SWϬծuF]yGXܩ0h8	&Y@NȘ}q8C	JVgIޠNd,'W'%EIP#)F]ȌĽ4}~{`#+"f󚌭uy-Q#)RI8emtaItٳ;_Jã݀w^__TalݿݜOyo|z/;>Efh|7Rgj0czWe	J-2#)SI>]H,O^:1*&V5rk5tq80QǦRXT\sOzɾY}M> ACdΜJ#+e^K14Ne7,X2'PM*wZ#+k?oT3J^Bs/~Go#)9t3G}׻mǛaPXS-IdjLHfʖ%If&ңkjJ$PPRUQR-PB>ayl<OΫ#+TPUA8'u-B?$,Co1u+o߯^,~e@ '_.x#%#)(aLFa_L<׼&$Јܯo+FYREQY/ȡ7ح~zۥe]MI\؇|.E\!)($ q_zas*A-KM)aQ#)BѪhyI!dՎ31%|A^;mkY4_?LvlSm-`#+]b)lsșE#ҹ,QMP$ tyV8ۿepw}E$]Vo{#+HNn$PP#dp:R*(l1ԫ/#+\&c;8agIy숪RaIhGn&VOLE	DL.=҇C?w䫦~}1><?;WxZ=>:>i_쿧̽}=1iҵT}@]}}~23t 6-<m8P]"|՝spFx]`%7ܾRV?v.+d4O|6R阫恷=p3}e,vcS]|=LȐ#+4C)QOr0#%pnP$6bؚj~+B}l;VZ\\-ywV@n:y4foty1A~#R {IKRCy7E^7,#+|=WOSG30=sSp"kkݐ4'Ut"7`a6f!9N:Wj`_ıI~O}aS?:r$Lz5&O{S9;`mDz!p5!_}ű6IC$R>')ʓE#)TΡ:3Kpϵ03^P_%5LF! 0wiSt= $sd+63z .;scLH^<;~^u#%-JdC!	$y1ϩN9?[3#,(?J$tԴ[lElyN%oE6HVEfLZc- ?#)T_~<7grϋ}AέKYw_s~[:5*=/tM>N%6g2HkG_#+O_U.[?#ڧb~K~ʮ7Isϝ[{9O_=:k[fA-x%F8?bLߌe~xzӧw"pϿϪ}~Gzwjsj<4>\_N`c>2]ʅvEa#v޷oIT?^_7rT-/dkЪ4շ9<8hl2+!]J۫e7V#)<Ylƻ|s峍[^r]_AcZYQۛ˧諆箞9O)-\ϡdlȺtH<8m1ntyoo{ujJc)y~My.YheC9sjW\tҳn;^ʄW3y*UCOqS/<fsvJpgF6=߂p>h!RZw_J>/ϝpߟz-	+l1Ų	i=߁Aw}:Goi_]y<iL]?[Yш{~6݁W3ҦYJEAUxy__/L~et#):wg*?n.p*冕kyif?}oG.zGv0V1na?ڒW#)ϦY7;[^8ۘw[6^eN=w߿p|K!쫫G'[7t|GwJ,^$deQ&ɜWܶAP,S&qOG䄕SAdZ5h#Y{COoN]GN'{'-=>MiT<"n{5ճ}Rw?LuuOm]v~͢kZem,t[6׫5Mݟ:O&#)5nQ)`vGj]Mjۯ|~!qt6Bm=!|Tdf5 XfC#ɇ}=|y'rWPO!bz#kmiT]T񶶩NW|t1)u]y[=v0Z#+	Lf&l-VWj*BYPT/KWRڞ/ݭueͮuLK߲/:%VTS{vl2)s	Qnm)HdIZHn~ZA/ۿ?~#+n>wS#)NCO媢U8Ot!˷OtWG9heoYWg3O;P(܅["sjb=[Åo:#+\'>4dn#+L6h+\4k2/̷-[9c\̶~sD촾E9B(Ϻalkح\5LҸXq`.8C2ui[7F#)U/vksL%	Bq9Hf<S93tڳ);l:7?yv%V|~3Hu%\!."~Sɷro!SZ^ͰҷGm|UO9|껕ŵ<ky4#1~e}(F.2IKgX&>Y#Ӈ6q9jWW2V"Y}Az`_¸H32FnB"TvikZK9EhRLq4h	UPqTETԉm5ַkVaIeM&t!HZĴԑ#v1O=,P)PRo?18f#o"S&Ӭ_gY޳!AI3MKyg4ItsQF&jaeF#+2'۷F<4H({L"eAR-pylQJM%&p_wS>>#)ׅFļ^LKgM#+٨S-z.Gg_㲌D׋u8#+.Z''2YD4[ig(}#)ingկ֙d!shjV_ztgn==}Xәl!lRyJP^5/ ypy'U.o$8y{8#Kz>G诫j3vw쬘TzHJ>9pf<;5;AB#%z{8Vvla1taXxeBJ`6Wuԣ@]ۦjfׯW\]S;WTmnS6"+#+1h MLRn5h(UZ%`ȥĈ¥biq`𬵥:b4!9^ԛ)in#%4X:mУ:8o;ӍQlpQG!D@b!XM6u1ث{qWƢ9)Rٍd>&:EJDQxS"0,6-B)]"#+%F#+0 (VlἋ@i(oapdD̺T{1٤ȑeQӕD:X`-	edBg&w#+Sӂl83MjJ(3#+EEc|>^~#+SU}z=kμǳGO^&2\;tyg_Fߟ~([}U|#)U#)W.\S[C35cow5_6~%5m77A2	:)LysBF;yz+]fǏFNtyfMYwwe|ɯ}rѿgwkR}u~iAV[_|gpTz:ThP/aytI;72#X\.>I(Ax9ciĽMzFJe:y}/sxNW4a?5㏪yUgL\u67@~I(yp˔HS(V#%Qxpc(e;?Bk3w*CN5?)#)K4"yS3AoEp=&M=ĂeCéٴ#)ƭG#)vg8bp0#_DqzSal٫bm|h$psmg}j[ѓW9[v>i7Gs8Έ >a2Hڕ4U(0#R"j%k)=F%ea\L@}='ٯզߣë2fŪfQH2'*$[43%v	z&Ft0fZ)-g(y+4#ځXSp##Ǘ9%w-QC(EUDnS#+.{#)W[-;oH#-fֹhʉZDzaL{Dm,6@A_#%c	6clG-ƊŢ4`iQ=`ؠ=eZMGrG#)6Q+16C5LH2tpС)%:qq1Zf{$C-dJVQT+լT2PXGTjۘi(0ex6LҐb!0;EuճTv3[v#+!X%,˳5׹?+u8.(Z~FAQ	~'~gRu[kzӖxA+wȗȎx7xv#+ Q"nǧYPi_"A%-btvr6Qk0wcθvIBn3-B~S19RcXp\Xx!jKFXU"#)uvW-J@JM"#+Ѕi '??ѕU|#xROٕ̿x#)>˶Vmh$\R767m>F;L.Iq6Ai`phh|1ҘH5Д"mT)bVC3JB2W_`:er9qUTМk]խ4B񫷤K̙dQU BXoTMUD:hiSяiW2";A]Mnw#)r2BQrΆ1Xth NKFFU^,Lj_*]Ѩt#+(EM##ԯ#+;業Le"7ѭc;"IB?)Wj63sr.t&NfYx[jy#+O?VCT v-[G|812j!ca\K8	ȽHKJI26lմa_&:A ݤ'em2M7\A2B#+2yASxڱ#f*U2iF#+U8(%;3[,Zc4+5Z;kXzq&Xl63#+H)J.ɦ3I:$AIZ`6aI}7D#A-wJs' v2ᠢg7"%aXo-ٓ$XDay&&5#%ّj;NZ4#)5&Nǉ&iL$$e_9h	5N<ڗSHJo uaK#%e:f<W`[;n p<nݛY]D#)\#+'"#;kSF|oGXO#%Z8K:V3J4Sft01!ͳsT+#)J$!5KM$NԶUv8qqrdTը9(9;34|#+"G>vq4 LVE]g	yւ2c=L=8򖞊2Em22۟',F6htJw,q>&3G"9_"WŕkIO13	ӳ.y%]lm&ܪ|>g0QoS;䚜d(NL4bμ<(1#J:a1eXL΄!ìMgNzv]ynQ`&8"=v먾4:wޛ	Eo3Q!y,]2̈bV'-8v`,VM0~|#8J-g,G+eeZGSGx;JWU{Ro0X8%uHDrokL^1<5Y?ŚFp?}юLsv.l]h#+c=bjwjd(.Y4C9\8F27g6]LY3#\rW\Th8k1wdG5b<w1[TͯK	cT	wycQ?΅T`pǩ{i%Ih*ޟiF֭u'[VԍŋymW:U^NgX.cF	}~#+_ ye$/^_LyC	c(lf_q\!n|[`ڏ]$O/g3D1&g|5	&+1^b{BlHFCӛ&)N-|p@o6ny;YUB:;dVyZU3z5#w.O;\vY}H Ы".L*~-sod%/Klu[}&I|$?ņ!f˷akD%E,@IEQ|8VvP#+[жwŰQq 7||#aa3HH(#)eșՎ&{pv'l6"obխޠ#L&Ւ_GCS)&ЅJSi$OTWGnC@: |o%|ݬ!FЛ	$ދL#)k3C?{7I#ێ=R2~gHzV!E;x̦KM6ݗODQ'Azb>]_JI^,z<Htfdǟ^6cYHu#P\Greߤ;fӐg'/E'B#Ĝсv~.qgE?9}]0$oQD/5AiTo*uH{&XagEGFu@+Bk+ײh#+5闦f!y2ְd#)MN~;m-t:l豱Q-vbFWUheg#J1T҄(rǾS&i	FB1iܭmI@nǛ6cV`\$r4ߞ#+|O&n(gViߌT9r_1#Κup+ ڐ-ΤTR<%WfxGӏqwNN_{KhydiAblzU/vk?"o{q\W'~؋j߶GiR"dq#)|;A-6q~zҋyYJ"q4;PO	"A{4ĜA~cؽ6cEdXD]bۜq6C~ӗl,%Y?-]|a<,W{1=ƫ#)&yx|mU%{v-y͘|8y)#_(l;`?e7gpM1=}'*L(8p9q#)tP]<q1s}}uOӇH]`2![Q/˭_~a"vm7Ȃ.ϚpǔDc+SVuK%=JSoHwvrna]SCq߰TC&&;J9>__kк榐y~ߵ{we#)ĺjb4)f{/g|Zb"o&jPq-z71OXgr4lmK*g۶#+0g0${Gn-B!9[8p5}DF(2X#rGY|r9\Fq{9͝cҀ5(S$aA=GΚaUTK2\!1-4զ#i.Z8k4Yǥ[Qg:),sDS3K#)3l`|3ޫeeL\+*DEDóf:W$IC2ΘKdH/;v薻0vԍ}[Ϛtz]f/;jls49#x#* !]aêfYKx=a	gĕ-]H9fix|hx-LLK6wX]OBL~9!3<Reю)DF~:|ɽeEXnS]Q;:+2A	VaЌؚTxSkf+پ{:FSKwY_ԊE&L8/[دJf]tm!BN2тD^:;P#+h#)i#)>[:j(	ǫ}#)U/AꬿYDßMzvvQQICU#+#+>TU|(dHpG@7Onk·Ü$.#)'E/7R~T-\PNRE+qey=R𝔛Wвْџ9\gT+J.L	EBpg=#|p/9N)ZstWezZXo|1L]y#)a1tsÜ65XR/~YZmX-5Eay-3ЎwBR#?mNc&H؏#+Qbnszk7ΦOZ7㚞`DDO/[#)(~9B)U	D'4ΑJPﮭBW؉]R).2ALOeJ*Y^;V$<i2#+8o7&c#wDHc'_K.<Ys*+NeF@~q9p-%磍׿ˍ0%߄8_T1tkq+JhVۥΡ⤴1ϭfTYEty^O<8m=|KqD} YD3wr{i;R2e7Ph$͖ssnC/0	=LfֈZTy{aJolc_[!oLB{89ƸU^w0*aqǟul|~VBw;9d<3_ӭc<OhngO?4_kSU#):|{Gq2Ge~X88TCeX<9{ZQW=:yj=};z}R5nQ+a7՞'-d;ly*CE:'m$5lLsel>=c[F<Z-:B꜒Bm9TŞ}Y7Nn{N[a~8O>MV_BSG}}^#=GQh'pe{#=6ҭ.9ȦǇ;mۧѺxR'l8pUe8_4^4B<rؑURC7hKTI1U#)cUA``c<䦰6[<R#+(}<qo\i59_h"mjr<爯CTtc^]G1|=+zopvֳS4,oіj/7xm`ߖ)'ȓ7^$|&90y;:1$=o1]g}}O]>s兿F9i&+2/\邸\9BQZwRȠ,CoG{G_T<b[mf=HKc~Q^~X߉.\d\6wJPn۾<nk8p7AK'Md1<bb}:]a/)Hqb3hФR;x̧#+*`d;wpZĘ퇶?YNa򖟅n3!]G.pk"ChO~5ƽ~üYw/}>P@BVGQBHuĻ:a!D;$DP-#lHs3">GkB8q*4(oQ>o>(oD{-锦va@߲\pT%>wkq-*Z唢Q<|%*o}݊.7K+6EW}ZTUrpr`t鎊=wGSfRz%&?mq}9z}wF*Tseuvjouvub`- }>*qMMۅ|s	Ӿ=p#L+s|!Z>JqnjQ<q]?Kwcs9ழ#W\?l}MvjO\\\$yȼ,"9&QPpAȻ@gGW5hF%|OkHz?KƣUؑ+7>k5}kJ?y[ǕN%"u#+]vKD*g(C#)R%$)O\+CL)t&da[zX'^Bݸ>9?vM.ЉբE4W8(+儓9]&y[^WlhǝԸPn[ά#+%<4WaP1]c外z[֎/ts/3n]#뷿ֈ,,f)L\zkv(IHG9WExGtU#%"rvS(D 9y[ڥhGbG,MA2E2<\\C0-.Zo$뿠4va4ppfhiUPKdJ!ٲ,v.9#)'!D5Gt2eWBx'i(at7ខxזECdYTc<7WՋUw=Z0Mm<d9xKQU:**j=NyBk֨ś4#)k0vef2tӳ5. <mM	c}qx|v+I}w->ԪSeynKX}வ/(x@weLG7zV6{p9ˣYyLgpsRS+V=e%>ReHR>N<5b_gnox{PdGuHg振̳_>VJ;	Uv2wķd7*R{8f>ڎ<q5,|l5BݼwRW<pᑜ_8kkiʌFPan$I˄KCF9uso_a/Q#)r4{ӭU͛45bD"##)v0HU"f<1W4UKa#Z}N'yWHuV@B6ǯFV?&z/kⓚ"=x2;ubٵk/lG5ӕ-DL%?^;q=N]m7}jYjG@Ĉ<KVA8:>'_BF4rh'C[hDP>-5%-*C;$|^,Ll4;2oϻv}Gn#`tf d	#%T\9hO45dN$|'Җ*i[q[%Q/hm߮#^cxMyD##촇T,	;ԣbvm[":vȗ]Hz.{.1\,gS,[U<<:=_'Zu=.[j#%3g=Y]1-q~#+"kJh1;׈8{[X[]u&iZ:1RlMBgWaǻgFhS;ɹэ#)M7_Yf%ؐQ)ڻ}ZwHH`9W։Wn3N-F:K߱	?di[db^'w'	o(z{qȓQs$ND8*_[fխۭR5ƣh &T+ϫg(jktNƮ[vj[E, 36Ԙ\O%֚@>?g|<,TJKt`7҆#]	Nx.%8*i}{n$=0_#7d|T8#ID*?ôj&`MXbp92ɦ *pa9ka(S9hXX*diZ!4|ٗ#)*aa8x#)ῑdJJjhgM#)mB8*Tf9sIz~0^7A}(+K#+i_KE*<~YTVpHTV\GnmaqB?8Ю~ZjkEhG׹7t6L1Pks#)\_oψ˓GCkwv3|KMM=Zjn};:;)&|"O7ziU"Z}	>,%>ӕ`yz>L3^-YnñjR*6d=j/쯧6ָ='fXyb9{zOHQI9ú5[ϣL)6<#++!2ūAMWCʤ{#!h~di0`Ϭhx!0j#;X>O>Mens|V!AD㲕\P݅Q=L/y͕:,D	jR_i#%ea`+e(#)Ln\C(%\<vm~0"ocN#`c1>e[TwitX`#5mnYظ,!EDf|#+`TQ&\Tf\.Coۧn6=#˅Vya)B>RqG}f9lU!i#+b(MĠoStdNA*&F#БyC2MB)3w#19S9XBX#GĊ6"#)}:5Lcc1KEի/x_s~ANMGC˧=,5tC8 ,pt6YBdR9qh(b[4w8`؍7F#ɁjY15@6g\gYaTUKW%\6<3hI10OsLMݥ󎺆R.zu!vg_L>	v?.*hG7vH#+<^my0C#)ѳ=BSpAdB#+2sW8yD#3iCBK|hk `E2Ƥ@_; rCD5`#)1"0tv+jNC;1{$"0ǫ[i.偂(M(#+7F<V_o,{l1e	xj\ySߪD48gU&v#+TuQ{1iʇ. c6}9Gd鱆kWA&)ExΧuex:#)9]cfd@4KǙ:Bu]+W=&Db`^ʻ#|;J^#)@FN$Q(&΅"ߙa#+E(M]8u/ur~Mg%.tovfoqKdyWC$d-la,#):F"-#+=yCuU/ƄQ,j&R*PЋCSfv8D/齠f^N%܆pB%toO:f.VI1_p3b}d|;$0ZLF C2;JaxTU"?TSIjd#7Xia3FͲL#)	_,>Wcg]_vuĲޝUU fQ"o}ŁcqeIzX;!]lŭ>S48aᒊO(Zk<)Cc}L_j	Iɠ7&)8JleZe"(s	wvEIfԬ~-έZ#NڤJaV@4`RSPLp7/#%㝱_iQ$S$I9X|u<d-ԣ{ٔf<˾QD(SKtz,9j,:m~]T&o59Ja0h	qxubxa5מDBߞN蒕px{GV]0,'w0^'-Ԋ&	s\E!+ᖂV#&^FҔf3MhL<8Ozl1Aڥ6Hu6NUai䝆N׺o5	l#+8ӵ	Q#+Z1P4TҖTi.%c@g^oyۑRkdx<4>bi+]fC6Fh#)0\"ͺ Ҭ:0ƱwLQU;Vñzm/u>QC{Tե-6x!:ߙܤd	A*7\,"o^F;ՖAm)!~*$^63hDJG~EfR߈a:wEf9~vv,QJ;jOȚ>v&	q$HDJRp?ApsrAY=lkEUUhv!h~R#+DrCG/? _eC}3v:j@QipbM0@vX[3gn^,;΍e9Ĥ<^{p[E*Dܶ[>6:s'ʽ$TX9Ia3ai+D^9[hTR͘:`TEJBO`mfJ;yOU7Q1j}qjԆsk;f0fpi/0dU+0q܃	09r#+]TPQ~)>ݳG*=Ӳ{S"Z4J9_|yzMΉ8!{Hm_Xf*?zc> LCjGI;P."4#%"30SB#)#+ n#%:ԉU.ـ#)a,yJ[iIFLD:^+dP)@4;#Br^T.t24YL$ia0QS#%!*[_#+sv$.61ŗe}.9341F#%FmOeUQBM_ؒИybFp8	LH/GE$%>`$󺖤<ZxWL>GБboL7Z:TH5,q?rUmCG.[Y{qYkdS(,YHJXDoi5`,j:T{;k?o#+GJйR<#)c`<*!]D\ըP7(ˢk\S#)"ޅCvN:UwGѾNgE;&#+wl,݌Ł}ϹG~ӷcUl)|*#3mg!#ėn`L#)ZX(	#)EdYiϣ~ND1#+QU;6dOf696nvtB@k-PwŐ	A`Dђ(E*'F_t\Dك}#%=Gh2##%DHz<#Wqڠ=[I.+P7#7Ws*+#+B#)v"sA(-z\;0ĭmG-#+6Z#<F|7uh\W `X=xS3=P✴<NC8*=)2 B<]7Jx4=Tc@|jr`w1JJjmk[_5Y*#%CJ(4j~dD6Rkm}gMƩJ1 "jİݚ H/fԡtH	Ca4wΚd:rCK\S3wтơLgbsV]Tܨ7)rʿ*3dzNER"({Ŀ!#>|,D׼2M2uCwg#zj.ZXcii	&+~(5Z|N!ɺs'@9{MpCF#+W*8n1P5jH(Hȵ4g2 (u{,[(ۭ+Ƥ'^Qu61aL1LʜÍ_UYB X$)4Ióǟ3mӣ}vGԝvFǁ|:R#)	(Qߛw-9zn$)!FoPUT#+P#+>"HQX`ײO|ƻa:9T̝cg%k̸4Stΐ.F0V-9HBH	cx~O'5{uRR=&I%[$hg:Qz/#44r,";\Dg/|3GH^W(($N`Ay:yGT3.	UCR=q,ko%L$RG#+ ic;xʊ#)6Gx'0{lBGP2<6	#+w>oe7(.DR\ _47 "pj\Y#6mWU6zr29ݱijGK`WfѲE[葋KU"-r.K҇l'#)ۛhĨ uŁHl>lTQI!w #+(%Kw@D**L#)pfݴѤp	ހ5D&y$9	N-X:wJcr}ufCJI#+(`%%LR=0M&1O\lUB0~zJyU+</Ϯkx=(J~_}jܻ=i{1츭NmO(#)(l;U%]p;pl?|Y;t5mh9}/t3m6Lc̞ #+&dB%F6h8{2"XdȍIqe`K&-hb0PZ@DX@H_-<KWb#)Fh{y}-*BjV'Rދ]_}t.GEjϣ#+8ϘA6C]}<5LHXwl&&H&BFpx2\:!F<7Iul/;{38&7tCW3@<Mt6>Cs`'a~1xX玕JtDz0QsFx!04c0e!7mۊleWuZ+"XzU%$3Gk膵Yz)j%6&M"eB"qins~^Mxvmj]o5޽|ND8fVôzRU!t$+9dCRbr!ҋy(I<-CmOtxɦ-"mhm(NnU8&ş+hSdDi`؊0sɈDz3p*&{sNW)y33(lhE.=U|s9V-5#+[30DcTyyj9x,a|-G"IGhBi(3..[o`1I 46 $P(T:?be1Y"#+:AIIbݺ!]Um6w/"r`hMwátY	}KgΞ[Z_v&)+C4n_}pBq`HlPf࿟y(ʔuPUt:kdj?x#n?z"(UV!\Vwɨ"jbkߝMw_kukt[јH%}~JOšii#+~VߞՈpj8//şwW	9j[NfXSfaͅ$'2hخ}M>~_QT"Ǩ@_{g)DadurC#v녎\کaz)ceV#)a+j=&߂mw=Mk̯MtYo~w[J/UyY#%p:φΛyӥI2iy\FaE}:Q*qye;ݡ6ɞyIiϮ$SQK}}>SQTc?d:c'ѡrHV@aƠaxg<sR|OʥL$Oʇ'|F^>=_uc7,b(9ο+_[jX%Zu`T~D^}<ƥɴhfs`&&*LoޮnWz~??YxNxxUx9{?~5$TU' SLI/!޺W;Z?Z%(xN;:#%ǢfoAQ˰/};#+>#~ΟoH[#\;)O\_cH8(jz/]eV'*Bk=ħ<Es}q?n'F~,[?:_ʋe^8 p=oɠG5?^i[O:>yU!IM4ǅ%a[l#odQKςzqp۽30P/|`:y[:TПomjs]&g"7w¯uO?#+r=Z{6#))1_'Vtv;ߪΪ("ߗT494QINvTݙ9W!>5&Q30;g^7ennLYƸIxArM#+2L#+g}	ޖ^ro.P7zcתmlN9 /^p+ZPJ¡ٴXD`s+NXoyǷ繜	 fQ(bh@ΜwK%nwo<Ls^|ۺ~03v,0.#)	{z~NS]M|~c_-VefxQ},MA(/[f~:WyEKly]71 pDZUNB^.#)NA\Ѷyg<Yv5qNtif{գ#)10E6X9E-<ߎzu0ꎓfu3O`8ˆ@?e}II0LƤ#+o|>hQ__|SD_{Zh?$E2jx1tKu^.ꯟ얟ͼHZd?n?6rߡ2-f0-9^#9#31NgX&~"SK$_#)8N,_?]ߔq#)Na=S0I#+=^֗kI4oe~%CT^onDTtXK,+O/2̝</>#+u|Tq|߶uעΉzcS#'ej&?4?賻^Jxo\~_}1ng}aIh2*!S`Znɐq+}\Oxe<>yx4/a.W/W~FCwx/u^&Dp>G|ڀ[&8:=Ozcˣx8|_^|AHhц7LR=l{qx웬B$YwA}sQ^~._<3;19]_2szg;\Qdt,YvN*d^QS#kfFȨTvk,;&"S[C	vwbiǞ%0!C+ox:tz<QC߬:eҤ^V3M0~S\!$F3f˜dTȟQ:XFتB;76]p_m[YO#+H5k)w#)jyey>NU:o$C~qo3X5'_'>z6/%w"ch=`7[/SeӚ*bf\=~]H3dp=|CbQbz\Q9i7G_gqT3"Wl++gW|˯نGZP(=ׇ$#NiWy&yZ_S	N[/){>W?5z}~/[DBgYq<XNɠ̺:>]kiRNmGKC>ipgaby!Aht傭zH6EcF30xnD7n!2}KGgvJ'\<K>:?c}54a__MU3d"pVdދS*Lt-4چp|+m0hlӔ{#)YI"Ω<"R\`訝lGu#NuZm}][o8zdO#)1ghX­ްŇ̚ifW)na#)!EncCֵQlW"a/x_Mq`P"Tqt8{Y`_'0sw*aC<YӏZ]`y>1k']sHU_!m9=n>h#"WVj|d\^v8<%M(Zx)m>c H0]VDgqx|n9J&:>Kw5Cq$F\P$̲K86^#%a#)	I^I#)!8Q9)Ly#+(%8#)\ǇJYzXnkC1j`STl>~~>'VL38:ic$ɴ5LcQTthȚ>t~[@o8#)J2_.B	qhcI&ҟ@S0l0#%IKd9,?lT"VH)/oJNZUs6k"ywsF6Ttgau.QG`Pߵlh\	LS=_yWJ;'h%}Q'G`"aODI#%M&BqN\~ \GE< D-9<7⛷:"))c`_W?"$kZ(yބ1@:ʴ/#)5@Y#+>?qnX#)75QD띗y&nP(̟tbk[$U˰XET㖣#׆UANtgDd,0tG^mlG,slS#)&AD~Bad_~^t3Zi?2Zl;4S(3ecaa	c7		95bw>ɽfdPaoU|;>_G@O.5S㡬)cJ5V@Z?^(wH޵V=?.YB+8qL7>t(vxfJ* =As҉rLi.rSoTzn*+'za#d3#J"OGze'>#pP.ȋ(rq5+tRh;3u"nS*MoZkeI	]6ڢE~׃T#pac[e2.HEdPYi[70֍@$dV&L(?q0b-ٮ8|^4-E?%#%CE<q!ǔ;/F7:K_*y	\ޏ.6[#)H:s5S;>7WdP"@8MV%\7P<VW;ۦBc3b;qb4a6rGDmeB	5µkIluQw=Hw>Rv5)B0Pi-Ƕ\u.	ܮmR`DK~ErvÞ&qӼ @stmi+%z]fYiK_mX]Yצud$%ֽ&.&ڙQovcRh -=QQk'd*'2R6Grf \\]7?JCިy#+Mzٻroؼxu@?l^	$)كld@¶JtM*g}m/?!6婶мr܉PM11qgmzƜoYڻRMqǞxo"zTN2r	p9]2[xPZ)P^8c)MF^67ysCR>,35Wh#+ii2*+ΘB:caӢlkߍD#+XS?׳i;9\W>t>M1P;)NVk#+5HC6VT'̕,U~d]P_F0,ɼ46WT44KD|a*5.<=gxU.o^f^H<t?s?f<jw^f̷yzw6-4*=?*1O׭}oGu&3Uӟ8n_=}S$>ڈ-Uq~-ҦƬl.1*d*rv)Wʚ_?VYmi9șn=}fDJ;t9إ*~Z',n@X0إG1tȓ^S#)f?~KiCt'.'zISt<A:iǷ><q ;m~5)7mpD(h";}۝	&Ys+[MqΒmN;!!Q(svrDjHئ&Ga3tĴ7ނQc*f#)$r|ɸ]W[u` `aS5^)$mF/#+-,^)j4ЭR:+'s@wLO^lfs"ĵ#+/$/ڀQӡ4\HPCfDNuhw;&F`Vx]@:]MB#+%vsTx</#+0d\Dl]#Waf8l@tf*\AA^)ҘoѽAWAr1S靻iu%tˮ[|`NmiU%bCQmf[路CeV!4XQy0:Ir tN{dU,|p)J{G=24G6eJ4#+iv3v<ZDC	CS7fѝ/)\)Z5VNPjQ>uo<o!fk,9o4_hQE0+#m޹QjѶq$H҇ҙ1Hn1P4m=l'`y0R5kcKtlN"aٖ550%rf*#u{FU/u9-fCWL5<'nÒ%4'4,V'*t]J&m<#TUFC%HPI;QFb3u]f-G]wª8]ِ%YOE_c<L[jQĳպ]37NCנNHqtĕ_,!;aծ=G۾n%Q#+2YaN_Ue{->i4XI#+Xdzέ2-+sb\Ņʮ'yCa7W9m/Ο}L}KGI8/C#)ɶCϴ4#uaтcV0!UYm)SYu&1~#TBD,[V6ǅ3C!頳]nRcZh^<zthLT2lKe#+La 'aD%>R)-)vY3uy7:bx[V>q"&2}H-L<-tvh8rܘ?g 7#)LJ8_"i&6Jf=\[kkUe^/7k6ig/\#+UAݽMp{fK}TmU˙`RxV.][aʷnyc;47,.A艵7VeپKRrmp1\ƾ+,컪'F)Ⱦ,*fjs=pqu)[7>wKPeMZ'"LvgEuCP	p^~/!Ltk±م'WXL}}!Zټz`+u"Vjʍ<S9|4ob>x	݃J~~{/q_i|n\N@_oo4co#%%9p*\SVK䬲Y?~\;W_zTwȰ!a`Hh=;\iaQ"E:Bs	>fyI~9g&CTsp$ GR\K#+ wj@a#	%Fq",#%.:#)?cͮoo΋;u,ᾓUGLn]@;ঢ	NEO'P;%zڟI&#)68.jU⍥ma]Ucyʉ8zzv`y?Bt5Sl4|D,.'b%эf,ѮJ# !t~MT^q/OO]NçF=qUX1fw}vfWR4CXɹY'KIw͌F#+Q$:G0(c;We{fr>XT;6}\OvL{&BA`'>`o6AbT7@Dz5 yA@!0o2 ٣YNE)y[6Ds>^)3)X#Yuu>|!!~j.TA!-G9&A#)@؆#%``5ZݠIӱ6vju'#+)U1O.r8^qF6H w~&ᨳjkDW&P]a(vH+P#)>/ٗ̑D@%C6*iHWBH@YO0|4~@- `VT֧PBHHв)5c^)cY#y7ǆ(tC%eLx-kqE<b@	$~=bFs*<:{ND7fo#~55>կ4iq?>vA&4@('[_fM̈7~&ѣi;$Tl2/=mDZ$#+fә\7#+yD!UB3[A5#5#Y֦1?ǅZ:(5fhǂ$u&޲Β$&uZbDuvH݌Y#=}f^#<Csldddftz9yF ~˺aȳb0y6?#^YOa\$4}:;OE-'bOm%)tQ7q-i|*k)a}9ӫض/B&H?)ҵ~2$sy`.vsb&0l#);Kbs?dJEFE|ASNSߍUAJD@ x,ψAx;JL.dC1>J3mD"U$%2	ԦzJ#Gi	%.xda(.#)"4Ͻ,#)!5S|{ilh,BXA4((LIYoq^̛"8!5?UT"'6)vA??{5z242=֜˩*-PGF?$M0@=vnWйJR2AD:~),hoMܲK9kӌW8֜Z3\[V5w++v>)R1Mq&VC<6#zZufǙs-NaN-8R|J7T\{o\(k5BX,"\*g<FT$#%#+y	}Ke`WNGD첃?_cei$HOq#)83_UUV!$/y()؟Z{>8ǈp;#)'Z7fEE/WH\{i3T :LhUvk*"[8)M:ݻ]Am@}luwФL3<BEh$n+׊ۛxsjyHE?MVgՎL4Qó!0VDoܿ\n٣iP9s| _áZO{@<a%*"98]Gi7p:C.|F1͔"rlC.P׺nTf.|Pl;v[#%%(౲Rd{ҹHʨs'?3bLzR#+y1G#+P`f@ha5!iGS"7lW=O@"#)+=Qρ?">=;	L'YgbS}AE.m(z`P/'69%ȉ{A6׋q2d#)Uʧ2M~T=Fݽ88w#N aq{bfm"#%=U8`h|瑦b6 h;A'_Y떖&#)DUz	7Թ!SL#%C=E|:NwhoxZ>#:#Ha#+8B:(^@pb2>CMҕ+Y).1m'ɘI0>U+1}*n@.$5a	'[_ڠZ9*h#%@N{#%07"[Q<|41W-L9v[h|#)X3t<sCoGSξRV}:Fo.ϩU}Gr1O`WVp)!i=V|og&!tnhl(+))8nM!?l(d߅44ʽڪ'Mj@$`a퐄bVbyM,k=Pz(oa:ޓN^n 8#~cg8P!!^/9ƈ@]iV.VU]mq$0}z|#%{#%3{Үg@)#%vCc9L4xQg<!ȷ-rWLuczz䷯	H?(A0ƳN6j@i!<"E#)'Pg*H,կr7%rqшh5kAyjݵUl8mׁ@#+>#N\N?9IEDRT0#+"|D}@\6zSBybdT!VV@"M䉮&&qoe	3bg8^d,3s2GBQD2"HH1G :H^^9/H~M2cEOc`FaN&e1H(!$ĚC֍5婪VhvCSdXiC`]HlI5(j	"xb2R#+"L`fy#+lGAAh;`yĨM#%ÌљF(#c0ޫJQtp5O ShjY((:ZA ~P}PptZت< QVA|l#)WJl$Le5|gvZj@dmkU]rb꫌xf#+itpPW}2>@%{BCT4Gۢ;vLAdD#+#%4`PcR!}M/%,-fx#)Hyї^|F@0sl&^⁕BiѪ0\b46!eS4fl'E-a1|7@4{kaom"4y`#%17tJV*=#+`'k^tH2n}cb	y6ZZfA2I#+9h܅UZZ#)j3@d m$1<pqfEmNi;*Na>ڜѐ!@vʄ	B#%q:WWgE)K.^vt"oL		*CGpIm%!j_	)W2{aZxbD":BmJnSٕE'}'Ћт_tޙa #AH%R#+w}tՃ>E@ D"""%#+QStr6X\Ўz=gE}QxB)KH114;,2rl6W#%~ p`zNQvyhX#9ʴ*RdD0#%~O>o88)c#%Qg]HL9S=t#)t9"Enʘװ#G/M#)N8%u^ޤºQV32Ç>Ňo+K#+\sc<&t?'LZ+qf=8?tK /'xT6+s,Fv&$MϷ\"#)Pгdh"i\.ʹk9	;evrm߱t<8ɚjjj#{ZarniO#%7uX6QIv+[8	r*BIUo"':>$+Pux$hw'/ӎS5ҕ\q![,h77e4uyP"3;Wi/Q0	h"Q!GiWC띈G0{qDU`EU緯ÙtFA(6lSzP<_&pv_2X%{NC%MEY	'#)~4v<|;R).ImylॴOFl5/ =#*y׫Y-[s$??m!0ik`j̖_++_.y1W@?@vݘ#%-L!agƼ@͛pX*ɢBf9R%xB@D#0U㠘#)~"e#$"~΀G:@y/;sv&}Xp&@Zg#)Cgո8u99_ϐp3<ʉ0ONioEj71n`'cspoC<`X\#+c>GqKdX1 *0eWi;'p>j^r!Aa<bm,t玜|M`>q>)-EI!5O׫=$maI#%X#+)4;e=ab_o֎rU]\$TXpP>i`!C}/#3`͋]^!Qp~Tz{GsB<v=#)̊V~y^e]BRhfQxMy;p8d[Wئh7%cYA앶m!ǌH$bԆ5CGhr/rUUU#%]O/͊$>rokDY:g,UuՄA7wp򼟦W&Çj#%~'rԺאb0ush"2=9o>ETv`^';[]sDw#%8CO}Qˋ1RRP*C /|#)K! KvC|PQ? F,E&4$sC>~}4fnkfg֩d[`pzX7=pm`0L5<"6g!//r!W5=S>i'-o.CAmYkLdWa("e`(xE4p7nhhDɌJH`#SHAZ@V@fV1()"%oo;U5%czە+"@3O6>B?IeJI0\tI~0r\$rUDIcA$^YQ#)wraD	o}@ Veɹ+/>OdEq;/?ۏ	k|<Z~&#)g#uW[:n*2}㥪ʧr[=la3όW2o Aa,d-"NMN!PUS}!'e@&g}Śg3H@TĀBTaWgkSM8D#)'1x%dg~7BbaaH̀|})Oqo,b's/<P2BECQ	#+gw}ܹ1DDDFd(;xI3dyb9PƲo39D#)\VO,ٴlW1#+Y)d#ԇ$!P gx~OkF#%v5c۩![	#)!&:ʚ)8p;"Z^o'sߗwqZ~!~MONZ3h>"RtR"u!hR0NK#+qA`)|T?Џo4Sw^.pXy#)-3->96j:Sjs9N>ʛƧ;ZkvBFtЈr*;;1r92'e0[2D||yjq-p*@iӮ?2ѷOen|KMۧl&qqRw:s5.[㊉ԮdHȊl>CX.BA#)"ɇ-ػ~7*lcɭul\pH͌L\0 LMBˍZ)~q֊kqԼ#)|(#)%82#4|0<UD2ܣGy}܉SE`J^#+b*#H"m\	N:(z{*+~cz0JɃnW{9?3~##)HܬASHMV6Wn,5YVwS)@hbNKۛ;rIMCn4]۔ͨ=z_WNWa>α[:{Y9^3>\uDDCOϤFӋ^WlMg{HKLGs4,tGxgX5=crdʖ/|sujMFchаD#N].i<ӎ9:upBP]{:z:璇/شu3UV*_Pdy'ؿ练Fph"㗓SŠK|ynxUl#)FrGtjgF~kz8EwjG/!<Ѧ5[7}O/N𠒿Ӵ>k?qKcH*%pyH<Xv&<	Ū̚ZOP_)728#%rgIzS5uh$xft6#qdƞB-/s>A;.hÚDn'vlHwVDWA,._UنH4"/dո1,Y>ɫVuC(fk#)}cWWw;O/e0Z`ϻk9AǅGܭq:].tq4 	2{,pA#%.>cwUL3#+$6#+PwNfԉZNPa!Hw;NlyqV;L|Eܱ`>^u|lD#%xX.$Z]h6z4A`ɐ߳<E#:4sC;"e.sߛV	mSl3V|ăL?LW#)s("(G2_̎W+ŭde`?}m'v@.Xk14*\*6?CI' RҨC!0du>_0LSxU[G`~ Z5bc߀#+'ۉnl*pQQ*1B5G\xnɽC=P'ɣ&#)5k=SNHAиGq<~	C:X!b1wrw#)sߏu9tzb)H.C@سr;/)w9w\Jy4t(F\aMI#S_4,\YZ73<Si*&d#+[j*36nhτSMT<gG=مL@@a0Т@`CXAJM&;(q"@Za4ߒ˛E FԞU[G/b`\0׮1o7Z.]E!{*Y/77'ӪO>O(x&ƥ)ryS$ʪ+0Qx2Fnd%*T D8UZbs#)!in$HBk}syXuuB>rTDV>B<!ƈعѻ>dʆNop29{yu`k;{K=a0%%̱;(l5#)l)y$UVBG!꽱[jė<>Q`;tO#i9HIg1G82$OmAVzo#)0o!QY8Zi#++.J$FaADɐ&Y٦#+l湘7Wop<MfJ`6&vvkZԁ]PD;gL@	v&=8ꏧȓ$5$3,z	\NQ!0#%fXbi+AT8r5J*&TЫ&鸃CW-	_/׻(;TwYq:4Ν:W˓o8$xOn'Λ4A#)YnpF׽mfw5Sa(F@1V:01``](ATG-iMX3f`yxۗeQ(˂Q!2j┻#%|MjӼ5z8&$;Me{nR	&D.3֝M K]	YzG`F_ D47d4bivF-	PeѤ5nK죑d{B8װ=>r@l67s#skxJ\̋(/M6aX}ZAIz>H9riQ~g9;t`L#),Hr!bah!llvL9HO-As68KnDv͋Ͱ 0g=σus,;E$ǄPG88!؍Aݛ?q{U	!-9q)=&3nlg|^nWPF$QS|@7#e|jT۔K'"	ؘhȁ:#%Y #XD,=̕)@h&2,fhNE+bWDTq 8m-/ѹnn+eQK#+jQ3׶24L(iO3s&\f\\n<̾	woU3ݝ (f.rDX, @C@7]hwYnL\9S#%Th=q[￦h~\*1݄K6"ꫧ[i;+VL3#)֦V <be2ALt[cgQin b^ЁP7Β3w7v̦)vP];$%>ɫ"i4Ŵ+sR1x#)ZZ%繞UQU,i#eL54ۋtd3"I7[B:Z"u+N[I!ƨR7ĦŀX#%V:[Ѣ@CE0t\H7w%<xz%ug?`=g g2cO{z8h}I̈́*̘{XtIAݣ[DWv&#%р:XYaȉ횱(ܤ&QD^j1-Jgv6WR ^6Ty 6#+2!*kLFXv;+BG-D#)>de	`8Ya7i:`6/b-r50I4cXB" ̱B.#%ԚñWrNm*qC&Z:/7MtuL@g`)ϬGx#тc1@5Ɛ2dLQ+"h@:lr	ebx./>Ia#+fR6H!C⚶ڙ+M#+ԥaO2j[*`&Dy83.*YP͍ZKwL,3#%7_s:hnfRXy%stRm#)Fy[*.ig(,}:RoT)Ogq#|d#){ڪ~ӳBGt3Aj(Ism]\Mc9bۭAd[b[BaNi"bFgPm	P@ibך2dp(3*536tĄpT=oyCC8&dS?TONnҷ3LXH!"?xVY":*pH6gB:WJKcr,XZsW#)fppga`h~>Dp|#+&&"2 ,F"d<ԇ>	D( w[uy^RNb:4,:<c#%AU2l5ʷ? #+,ZoUf\S#+AhK=}~~NRCowQЩN! io<IX$4o&PZE.@,b>md$AAUUQV<WRl8@HJI.3Q`>?|04=۩UCxKG=:W]h!:Ta 4 )?#)EdL|,~ PM@ާXsGA=R6#%  #%bde9i[Zxt6f"@RjTQDH_\\&5F!̀se:ydeG_? /ذ*',CSRD1Wftu>أue:.]8@uo(î:>f#+*G[<H@d	H@!N#%TEQXEF1Ph#%A^&>!pO7$,TK\ۅDmBO--U%:#)a)a@,<`I5*2;)w@`E<o#)(E뷏U^˜\I/95y;Jb>ו]uџF$ڷ[e&dחzu*7.,E=3\LRQ	'Ov}kEC=c#)nq2!0?"+YPb.9%*&Ӡmm08"+FUovr d8]c1R)4fsPxnP?{u׳!/oCHiNR<N@م94$2𔰡3J;ۑذ(0{3"q7R˹-ҏ0Dg֪?JD	0w7kc&=nlIq<Wc?n/Yfcf}XH^ԋ2Lm̵I?>>Da#+*Tv؞4RFaFHٙ !ziTg*'(j:	'^]e R!R3irֆFv,8#)oݧu͖UDFEG	;ԑJ]m61MTdTKlk#)j̅6SmdQBRN39[I;P|#%d2 #+p0d?ng/Sc	!7/J5W821зHxe ۲(Aɋ)!<˜YB*:	#)Qqgid+VN `As#$Wol*<]ۄ(UEM/(۝B$Ui,V28dH3Ѥ}$|FA@UPE6tN$};r$# 1"1ͱS**咹kDI;EB(2~*I;93Pއ&#+d#%`z9}P۽wM4oËMWRz^'5xe>^ C1nsB3#<6{}wmDI/	)2X-	PCӊ@Iu!E0*,E|Cmac7dѠRIDѰ~w [nfb	t	n_dz'G{8!#+TPj|=dnoݐNݢT#)p9=R[CCpm#%i#)%͎clLih9@jj0hcfX4]yFTSZ	$+wGj{V;(ݰp:D/:͕0@+T؍߽BA9<oPf7%u:jjsxt5z_숦ޮ*ԇzA`r7|N!1}VX UeJ҅5\[xq[#$m` U 6cL=9(;f#%T$-++q¥5`0ŒmV#+w$UARTT<T:h+`{O\ENzoB,~nh9BFSUEJŗtoèGbv줪,(s32#%fhgXy(2Λo*$vB"{wSkC`Xm0t0pGSF#%в	C5b7WoW?khF!2MU-]u%H<28.I,*H?fYsgFe'qK螎-iatŅ!q=c$w*8{q3<Ա0mDsW`._&(fƫB܎3<#ea0w^zU<-`OdΙXlUɪ:t o};~:ѫC?i#ս\=h<jMnRU:5"ektƚۥ<ﻗG#)\^6&#)`!nڮ2zlpYa}l;WBoK"CsXвUۇlեSA\xmI&oq*1PGX*jpÆ	#)T+*[1>ErZb#%V0\#)4UZAS7Fz`EXb\C#%:+#)W#a2sݺQv?& .װ'Hv9g-p½;[6xqjO#)<7$#)O;I-.ÜvIN;Jia'-	3_:F15J(+{~zOR,|H1/W#%gՏ<[RMI]|E3Hȃ\e2&X9܌ƃ!#)#)*.P -;BʁVT}MTԍdyX6㨫ˡw%Wdvp5Y\Yhm92|E$C_YzzFu[72wFV(iWͲide)65tdRwVֻ:nstG(,Ce7ԃloŒ 6	-bIˡ#+EFH1bsbqyAVn:q{῵yy)0'WL`!'"$)JC'B!#)yM~@Pky-C 7;ki<hݖ֊F8(д4f0Y+:k؀K#%ӊavd8baMeqhl#H;:)dB!P,i$VLPPBTm#)R6HNDZ#%IQT*2xACt	PKt-s,PClDa*Όp}ְ.<ol͠Zk%<NT.j<FxSJ4L^XI#+{.Z	 a#)9(-tPD;3;.IdT#)wvngjF,A:bq84h+˝#+#+4I_+3>~O5bߤgww~c\.'QbDZ(TIDy#fxŒF>5=c~νȘ5JKPNsqMB)+2F:N'gUgM|8ilZ<LQ8cCۏ2˟w}u>;UU'=;YgoQ#%nEkpBm.᲋ׅi(l.upC+E#	A<:҂>\ʁ#)"-RP9Y"qysJ(hf/&VDzJQE4ΒAb(7((2#%pa [bLaݬڍ-Tg%W1]XK6 xdX#%CI6VNյh!jA;;/nw>W%>/Y$sʆϗ5	bYBĎT]/kr.zMb\71Ť*0/Wz>fA\8u.l8>@"$bDv&c݌-[G.Ólu'e`YG=HjUF"߇#)GZ!#)(B"잎	$"!#%'Bx;LB/$#)x˶	t*mNqPgg[d#<w>&(~`pS#)ըsEc#%Rl]3-,3TŎ?)Mr \E A͋#%XƞfPilv`4LؑkL^a @X!*5	yA:D[?Է#)1.!nP<vXwu	<#%txh	t5c	PHޟ(ae7X_HC-7,EYKRdPFp!x5URp}ay@;H8	7X}c͇tvKJB8ȣCR9e&`&gB	p41Nx1c4j2":w;;4t6ְd^]KRB5WP#	25FXV#%{4mRvl<}.¯bK%(a0Nmjpd9̃~$]^5۞L;qV'۳<콨ȥ7K"mŐٿ<Ph+wb;c+gWtFbT6Xszۘ6]voVvh9., 3Iҋe\#%UdMD+PAP@N\W0n(`д1I6^g("b%Lc#+iEA(aY$5C-@1dP"wD[n8eoNїtb36kQ1p7Cӧa5$1YM=eQo4;a8F..S"xJa̰ʃ\Q EHDvxB.9DRת m8_qc@=Nc;^KpӋoS3)3ΣAތ gu#){x4$CJi[a,#+ÆL6Kds1>a劰{.x8[f3Vjh OIK0T0X	#+ ՉD`Gxo0wp'`+1+Hgf&[(v}=ϸ66P!Lb#)#h>hY@S#),"XP14$@"aH#%"0c =M-Dv$D1l7*H2HEHqc0[0Nv`a*O{P:QӜyg_h,dM5<Lu4Trm5GfIǆSs$(^ole+h1M3jb4?0!!!D:>u~[[,46ݼmrLkFūƷ5Z6Jbͥ^*[D$(J]c=`E:OZmZ%%{l#)o#D9Qu&vzA9$#ߚJaF AԆdRmI%m!(iP%+2F12VF)k,(FZMXH)%%FddbiMY	h2i,j3A#eT"vkZN)~ТۋL"}ُ͙quATcgw\#JyNיS@]'ׄ,Ŋ1%3Țr6_#%Q?|K7&\(nx>c39Rs[K^ZU84iO-zYt 9$QMz6c"@`l#)}@#)#%;ByP"KJ[4TeeTDQ1;+o[s))j?X64Z;E|FiiM"W=ZI%"ُ?x/iuu/C#zz/D>^_beCj{π`3ݽ7]W5"%܏}lhi4H	0%Lx#)te,5!m]'w;-ںbM-UY9z0NLSC|TY9N/%(a#)	ɪWL6q]t#Xl3[46'z50]I0(1O\w>9gΖ!k#)xލg)lx/YgrqM]]֥ESr;q(Zv`D#퐳羒q]yLfet]Zm$ZnWӑ{bfH#%QJfX?'qFvV]ߤfZ&`Amڱ`@:Fa7 XI~"hi#+=f#)F[ZOCzw4cE'hψPz#)3ra%&Pr>G;-h͊㸱FnhPٺ^bnཏQz$rHV>5Oo.6R[iu""O4kO(hacf'#^5cEl2Cay2^#)Ö]?¬ҥԦKĹt<(KԯJS{)95xe%B';#)f`s9ieDWC%Ծpbf.5<8ŃRSO{SCOkߙ1.Ltw/A#)RfsWLfKڝV-*Mlˍ9TH3o	]VΆ'g4,>3pݺCCp.W#jrF䡇w&.E^n$"&S'x~79'S'lcuynA]-sqeco3!cX	km0!v<QDS+XkA',2cwB?Np{Kn8ptήC^|nq'qJwόGL-MiPs{&Qɛ1ퟑˇ~S*oNgw::_csnC~dlCwLnc{q0nvN߁mn8p1OG<LcV鳋N(ю)t1b(e\Xbh͚&>Ũn1PF~BU#e1QZ&HņCHP曾*9)3HhUDVI#VCe0!aL+^f.+]QYt)xԨL.qnąƆfuzwjb.ɺ.x#).".vVͼʕ˺렎iM70Fn:Yвٍ	cȌ^NJ:o{͚lLY1Qxΐ.ad#1L"kO<& ;b@NhaJ^4trM4c$1,@d!L-3˵BshXX!r%ܩ3TkQueYHٮ2uݬ74Z)#!5ul8vt"dNM?.HD&n,rϞ`՚laҒk*,Zc#)(%h#)EuԆxX^./+f,uSid7kэc2cc>웏h׈NYWRL*Gܐ>C%l/F^{rJڊS&t#)ZBz.Ɂe2%&o5UuhL<qs0}F7w1Z+vd3d.Z2$*073ZZmYQX֧FzFLfG>eՆȈ3i1s#1r>:8ZڐrY[DSD0frQI#f\65reL)ׂ:,\CͣCd&!sLQ$NV3MF,Jfucu0L@%QHS5n:qC8Lnpm3I2#)iJ74jB#)%0yݕ^_^t\`tNxӨ1w}O9hDxplێ8z'1 GsŝWq")(7;8l㬱8#+Hw`I21Q#+i%JyI#+C%iߊP2(\aCǏ#)奠i\αGXأ:Hk*L$RDa`J/j6@MJ`j:VDIl-Yٳ&P7fqG'jȑ$8O3.#gS+`Á7ÊȻ2/v5*I\hJh!BP/OboIDsJpD7"|]cHz!T94]Fl`U#)Xͦ[gaD C`5[գ0d1ON|^T#+AInq:`"GV9(y>,	#,<#)pLo^4n[|Wkmcd8D8nE#)͔s1is#F[HpeD#+I FhA8SnЊ1/Xrx	##%eu<lb4#%Uj:\6EvhBzXBR!̓7W`m^NЉE	6M(2)A[0HkF8w"C.&orh:Q̌2pD04k#)L93bHu(IRc@#+v(tM,`v#+ự(tE4gtݻ)3" Wyˍ;M0#)nr,ZC#bJ,P""B#%@v	@P	5&%M(T`5zWx{rTM)R4IHIEb#Cx|׀`.tR`HH,d##%@V{  KԸL|>qlPkq9"_ADplX=mv{"ʁvK6998bm-,H$,FW4wB!P&zCN7#%n-#%qF).PIw#)nc2kZMP D#%S`^h%#)^LCQ/N:z\59΄,Y-fB_I"ml&P{;@_||wW"ϻ`i,4i+nbIBHlڇ s{ a#۱A77QHDqe"qK5.#r/<,gBQcbMKg3nd}fG{}=X30ZLk5౑"$)[JRcx	efWى̆`]PEяDd#+`Z\#'HbbU#CݚFEl{O.w-A(jx>*id6FҕZƉ*)iH) jRx=Ktܹ&A.flc}{8L`D- =XAQ#"}G'0 iAOb4a#+!*KP~2HI:"kuB#)k*ЛA(GFs$@@bu.h2.D	3Gp%}`dxDH(R&#I_֥˝0Q	yMcQMXM!Ztr5Fԉ؊dU+aY,0PƼWpL%^=(nWdKM+ff2*rX]u}ߗU\k(ic#%mƃmZ,ۥs{ó>h4wnQtLeiJA5LF 2/r!XM?k*@dQ}ClEsB$HIԍ`s(ԣy0YUIbWte#+#)	/NdA3Q1!e6~+KqNP6[O,ge	W#)BVEM#+D7c#)))SKK;HFDO%gHg*PUaa5#)<f6]s0Rʴ<l<5TFs$yoѦ_&&vwn#)lIʠX$͂0#+&D,8jt!,g:g"K`	A=:j4Y%v~g+ӲC0,(Ĳ2BWF	a!p5#%0]B(RIgTpv`3e?sx9x}մZ#R,@?f*R¢Î`ܠ)hs3#%0{d9jX=1<2Ed$FHۭ]m5Z-HQ Hz3CD&UZI'#+ Z5<#:b_a)kwG#)dN1@DATI,-]Uj\ͮ+f{Qb#:*s&%*`ʜqRp1IMW0۸Β҈Ss1jJzvЃdbĎTni.a!ؤ&FM@;#)(Dgt-lYIg)Y8s-s>D<XpC	R1VMR#%ZJŃ93:N(Q4^4(g%3oRK\O	&D1qKH靘t`2GÃkpܧ$1gagH,8!{[(#+,$#%PJ`#+$F'3V֓RCQ<ʓkjˍj)b!V@-@[4GO6LSzuڡ+|\kev9std]UWJJ]nL=yyRDi H6j%"G*뷍-+kSfI6V6fu-]+K4VT͚__||QVf4jHDY"@$Ay<MH:Kj@(M{J`2%HQ9Ѕal#)N^x Gy^zv:,;9j!e4#)=߫'`{B1W+d0i3;}o"P/uPXEP@}s6$gJCzϓ\P:	И`!h#)ԉAo`i(3M#+4iH@Г9TB0]Aa9Q08oP#+"SLi6QݛpkLD|`w@T1dmo6wԣm8qi5hp7_s/OTms"sLwQ#FSr-;yR1GЄ`;(s[,m%ڰg>ZL뒲#%f\в?D,R%j~BGZڪyY7PMm'(PD#%W̅t!x)*_#%Trҍ3>6$EVV'f#YJ%I]TH5P1[14ͩ%dX"0a65$ȩ5[lԱyQSmVDjآթTV*i1RVU"I#+Ԛŭ[$[䮩QaIjǞuᦓ,͖eõQ-*mWO;JW*f75kBUژ`Ϝx_*Jw	e,8?OSψ}4ݚL!xnq~n2r"z=(SEFH^h5k|h+LTM4Ze1m)*K_{[|HDUk᭭jum]*6k(ht&X7QH#%$@-%%N2[)62MY4R6dhU66RJ(m)JH&leSdJJ-I&&L)QԳHkL*5e*D$,I2hT1TLڃ"F&6ljYjiLmYVګB)SlQJ U)jkVUQUUbբMUڤ``&ʎA.<V0$wR=vfa߷n<h[ؼX7`6<I*O@yyxP$>EVe}9I:zБ(")/&&Fe23t*o;pLVɆKsnM\Lt?&666ً{~*<\JEy#%0꟠'?(/&ƴiɂ^O6|@64?)_ndIL.3A7X$Rĩ(:c!Mγ|ҷ!f8uV=Lgj7wqqXE};0yrj]&;%I`Q}YdQDZ]::Лpo$#+#:a'k,1B:J(^)E#)ELUADMQʣftE;4aaKԽ8-E#%uPh+|v"]#%#+m#%}hEҹh'0 M\!08dd"e~O3IUQ=s_1⅔X	CaRhXlN(cG9Mֵ#)~C|D;w{EP=z"3ޚfIƑ&L6 U5gzI@n?;*U\>wDQF?V"Ey:Z<"p4B%arȀ)F D16VM#%dMtl0-eDqRJ'ѓ4\jG!.FYoZ@Ch4Vhu|s&<v<nwra4icI_Ww#%PSxQ DXzr?ø7l|pTh%l&TDŚW;b&Rdz`nDk!L(c66:!f1`@F	1`c?g)%[j}?	pe`N~H5A75J6a->tiy.[JƵj0x#%k]PpUAA}+ovQI_e`iP!uIsk¸u˕&aCU-tѕdH1"LkJՊIH&t/˓X%'Q	$ М!2X5gZX=4b#j &ު**DI20z^϶f	$*C,Py\ (4Cwvl_VCГ(*B&ZM+CM1U^jtԴ7*`TeF5	)kt9A"bXfE2?#`TlZŤk.%[=惑IAɛ_!5ْ@@bTMǱĊ&8\{qx#)ߞ8BNH浨jvDtH@V|&5N7#;tSu˷$\; iiկv{ql'rWE*=^3D,q`Gg[3q=89LQ)JjjfS~^d@8QKAэR[(<$&n)Dy\!F~˖6A//;q+NF*F>:;7|u>7}\ CF-zkqR*mTNrϓ|y)aq&"ޏ]Lt؍<g܄w툔nTQ1CFZajZj1Uŏ<@]9<#+Cb//jmBYjV׮k1k\}b HantŪbad)!D,X!,vW螐w@D+3'{)#%N-;ޠn%d#$傏B,R]SA'#FvJJ(D6I(sTE=w\%xO<ںn|-Ŷ.:Ɣh!ڄ*")P:bf@>%˧=f>ovgbh.$3RMpE:tDZ#F5jb(MlB~hqP,)CXNRIlkW(lE͢guҖk~w5Ėjmn+ȥ\'mdVU-mz4RoLF3޳xNYdIl2"it<@dstjd|18!CiH!f؟i5#)"p}q#+o58<ECE#%b)AU5>81<s3#D6![jV@"D(	dj4Eݶ?f1l"#+ca&uCG*Aa3!o/unNT9$REŋS'߷<`wv.I;C-D'?nJ2ZQ+x̒~7>6iwGuFXo;"]$I!tU{m"fl#Nn/fxѲ}NsoDt_UlftmCUMa`!fD=yoT"szQ8;; PFq/!5FUňiSVӠ6BMkYs2CG=E~ScpRAaD"`TR DDE!AEf#%lY!x%DB@$"P#%>"eiv#[c52`u(򎡦Ɩ4-{˳l;4jyEe8E*	wQ;1jeTU=g©,(<ϓ͆DD4i>=:0G"!:H޼l|<ewԼ.|ďnr\OR}D;y#%^A0F1kp(PЊkz3]|vBLeM2#%RObi_(aDB{ƒ!L))J761']O"Du6l800\$-6HS6ڲ20#)R,:=468qYR)Tci/|ubל֫c[6&KTA+ #Ki2(SV^#)f!"5b	c.a]`TqفW6ōT-:ώD^Nr-ARmnZL}^=k}LbXcAi5i%Z7.ȻYa#Y\8QKhZL8¦ -E&% Vyqh*mD) )&]ᷠk(:#"e6yϝX'.ޚI~q3	S3jQ*7yݯ.u#)ŉ?2Pf'#ъ{4<EpU#)}h!`zT@k "J*Dnk%h[TW\&+F.V۩QV#mk&5򮖖ۀ-bʠ$UX0͊9TJ-	tn7KȰ1ɃO=ڔssj<6"QDV@#+Z!EE5.YtՓSG.oǣ=oϘQM>S{ꁈEDZ=os\JRu#+`ȑ*ZY/Z$Mk6f.P#%SLbT@RZݦyFRM)`XلjQ;#%#+-wQB~\;MCDZ0F&# `bOPS9 @DppLe8*KB)*9> ȒWY'QGDL?uߔ73!&y%HC־"3۾<g0efjR|8X@mڑ|@{'~SRɛm{46碏fc#%r!Г{ۈ[#T&F@ßWMw#%O.yARU#+,LTѶSK4i[M+)ɬ	bDc#)u덦oJ#%ʍ*۳RB!0Lۉ}FmԪLM@;QJqp<∫#)!f39֙Q^#.F@q)Y6T.0Fd6Gڼ=	v0:I&hÇ/췯YVx22!	"#SL8luGN6llj5fRجC	Z'$4TfD'HnJ8֛g 9Ml1&A0nTQ$9rsYa#)s!Ǣk⍟KP?&uT625t#aohhrٞ;ԟL62tOHzjk@峐YVϝB*FjM$%#Im-Iё~݉4%EK?}UͶfU6dEEjC55mek)Q6#hVm#)5feUEb)Q#)O~m'-#)!A#%9(?HT5$TJaQjj5٪+t	@X<oF76AI5&>U~5ɮS7򲾍s(%PZ`wQO\Oo: (ݴ`ܧ?UAxd#%#)EL#%tx>Y3HbR<#+"TZ}.AB@"*W/g;H3;9\4*b:#%OC<E3WxF0gC9-ɓG=psK@DFo>_DN׉J#\M<Mm.Go#%FBVh-3Lq[3#)gq>HS#).]fi$X	Cx:BT`-wrLv{b ӪkF`8pP8"OmFiA#%t\K&5yNT!_[+a{E#%#)\SIYwmra>L_RRV6i@1Gc	χlk>[ەb45!Y\*A#+90cn02#)2;SxYeY&Z`i#"iXA:RRGO!]U'T$P)aFpDi4ow	9 mb裳XAH~0΁	A*BS"HeDHA$4w"mW},!ϛ=lTihB)$$x#+c'`uhAĩ;5xO .N-r̚W=#DAt a#+s,"X(BzN~V;;Ӷ;̔;	RBE	HઈPW)IΟ3ϣx\BsW6g͙吞Pi4a&X1%FrJnv)nt@dD"eHȰΔeҊ7tz1$Wb4@-J<0LEnAPm6-iiJjt.ֶ66]ZnA%$a7L>-3zEa83kGVw{ڭPX#@%CXwd4M,ѐ3e:={A>I7%/MzqPqP{wtk~xf6m-%e:<>.ޔ`^s[>i	8WjM96ՈHQöY`|XQlo!HX#)3	U!K_;뱌H0:ZJo{1JF:Sݶl|50.Xgs#)d3eDfl獁.@ZJxI.Ɗ"BlZ%ņʐ!c#%YPwL؈:xzgW֊1ݼݩ&.Eg,{6GCCpTDTMs!ѹN+0V%k{[\S#%4Ų8߷#%y>3{WV }K4Wnͼ(M)Vם[Λc]㶻ak]mIV	ĔR**ePH|~ð(7uV.Bw&mET	#+}~`QijA=ic+H#Z&֛β	m\Hd+ϧJ/2K&F4rhzcIFBJЂ5HM\&Zb|4ɭS0Ue91pG7&Cn#Md0"B@#)A76#)\K٤nK!epC8O<1NÈnMBBF.֗wWKlDw0p{zEN^6Om[*84S%m<#%}="RX@:3jRѦTmJjJSk~tJӺlQ"H	u0荏5-7t6[E>AZf1eΚiLc%g}AaF`BF6	qaEg8	$KXHUd];fbI#)4I62l#)271]u7mMmq fhR7 r:qA^74[/nbŞ/,;&aS*ٙBTiKWfkhZ$	L#Еu[=9Fގ<v;F0;haa3헾c_aDѧowgT<O#%~kFI¡Pz c4F*ȣr[3L;Juaq˙dRqZ`BOrd`܇!>mG)`'Ʉ/js>~pjϒ=	ncV|^yv;ck[օDEA#%*J; lk~}*/H6Yrg(ad#+1mhTb`8n:<;{S[Z߷SM_uҞD0*<b#)f&2t1$h4M|fp뷝QA*\낶+O_$xnZy砽Vъi7>;YܜO4#)X\Y@GhReul$!b8qp6<[~~-h͐ҍh󝾯Xa${8Ԅ(Qg!FޭEh  bnm4,֦V6[fUUt/$DQȂ=΃$;xkCORaÄb6"`$q[&,(^R#k.}jOqJ7fۑwh:07ZiRJ-E\#)_Chr@ZBEaQXh<Ϫ՝HƟ!;#)=ҵ#+&]S4/gg7+%}`٠x]f#+P5`6ld#)TXԻ0#%͋l*<(w~U42C+et\\SQcΘ1$EZT22[)9_O(usbi#)F(IͶ	HPsBݥA#I#%&IIh.#)e)^H{#%܂8ʚKɄ-p,M87wʦi?GgvwqXLruC"RꊀRI7θ:^Sn<dZsƷé~%rT:CB#)<#)C"n^"0T5ߗuOL-/ex<ZU}5~yk&'=FQt#+L9u\{B9Y#)0lм#(9"?R>7С)6Aɦg,c@-ˠ~TmJ&Sp81&R);.,;_8肭IC[#%[pI-HA(bƭ^6صQjiQ$(]N=oG)TH&.UPͭ#ڜ:zMQzHQC`:dgs(ۺ+}ǞpAΟ5p9ndQ#+ʇ(D(J¶+A=Hvxk)6Phy)y}^A1 E#+!GHBr"8"!&8H*878UУ&gzJn5Pv	>$s2\1vս,Z&۴߳{m0JhHCw$}P5x⥠ѹ#p>h7S E!%Dm_CTk2}DuHIeХY)#+[Jlč̏cYVAJ[@eYabR{attCuWH+AVuwvqweYRdչbb>_R+U4a67}ZY9.#)UQÜCOP$T{}|9ke9tZqIwf3h/v)M8W9zci]rh9d̗a3׭xXIlchJfIVFI ˰KV\}Ih١Fv):Jw6׋u.,mwWlm2bA@WĘ	e=#+Ƙؚxv)+)=[F5#+!F3(1(#)D#+wn|u}sih`k9 H#)6Y+oWe2tκwv]'o{D,R#+pҔVYe1FZKKYbRJ2ci*#+Mh-F&KKu"lQc+#)ey||vhbXVDV\FJȡi1M`j&7YH\.+Th.mRT(ѡ:Eһc0I a}Dh4@SpZaŏ!aLmq?B(SBR%J:pViQVmy)Be XdA"+ 2Nj6hF@k#+lH"#+MK+%BбD46]X44ZKJ#+H#)[qc1цo.lG1!FRc+8a4@cjM&h3߾MikovI0֬iEKIc1m#Ua#)Cbef"zMhX7ATo#+^xA;.[2	~[)#+dþ*Qq#)Ed04ĶG褙AJK|jB^Cu4oJ#)r$1.QDͤ"B/TUr0S!;cJˑXlP'跮7l2?gMivh8dMPHv`iu;cde#+)ߒb0BRi&0j! &"aB& c(Ҥ*F01p#6/NHg=>A6J|i`gu+|T}lb5a>!4~r4m8R#cDɯZڵU*6OaC|H"G#+4y;)Cŧ1M{Y#M!y!=%C^%,)(g54OEfz6fk߅)q#+F^mm(,&h""7rM!D1$9k;j4Uܭ2I{n9#t.#)QZH#+vkpq)\gs#)o3zF'5QӞHypjRK+NLJ#>n<*m8b~TRj\"5Bq'#)_m"7w62xݒ53 _@yvV^L)|hl%RUkj->3BZKd2#%"{$i	5,)rTcJIoZɼmvV-X&x6-F]Ik*܌xڊY,XS\S[+W-smҭ&mۆZi#)%ZI	`VPqctze#yJkaF˔izQ A#%THPLQ`,\ ueȜ#+nJe #BK^߾LXR5 (&Y#%XACxS6{C()űk̴`hhJ̤5l)0S!P#+Gӥݡ<~ذ C`*1I@46Խ#9<\"?ۈLٌ#%D$%2}^)FޭW^+ty+T&nR6-m+%n2e{ZJDMC6c F$%*C(#%$d@$w̛0b֎Ҝξ~!mBy]اUS|ws0d6-ݭOpWie!1a~X5[fbŌcTlcU=0#)#)!Lj՘Rl&0c'az\-[=ˤFpg>\\"[#)	wb"=nUQu3\;vj(ϙغ3A#)7>^3g2]PJu#U؝/9&݅ܚ	h0ȖKiu"IƀV3#+vF3z8FMn/{Dvb3#^A69[R-E9'{.rkmd-F5'$	GH4rouƪ-\uPeNA>Qq>>#%zYFV $J=傢e#%#+ XdD4j#%ҐG#%HS)1*l[W۳c%h 1)Fe$&#)$ö^fR4l	jQfc%@aED*%ZL'Aͅ`0L@.)-WT.eB	ъA`F0DgQ )H^v{!#}vSa7kuČYq'.\OF1V#+]u_&A@#%a1#%ʹ"	2#+OKH;wd=cZ=HD	CB;w0#)fT0x?*|Ӷ~Q3~KijOGj#w}3.14&I'<lQ40oɲi|}ɔ\"@:̬gӸ=At#>}04~ F+/@PRx-#m"D~hP~Vh[l%yaPw{Ѝ{4`"$K#%#%5PK!F@(D#%DhR!#%D*ȣa!Q)#%k}bzJ:#%XU(JV2#)D	B1ːSi3K-ihd%P5u0ʈc)U[5bAot֓huyGK;.mۤWKżm^(榕ֹfX.+ncZݭFTSړ&hyq]u)\9ٱhZH!Q86QK=0	{Gdt~=~-F0AVz.#%'s.?֣#%:ڂr(6#%R#)O#'.MvU5[эmXUVz3Deݽ?'kқlk3{s@dD*g%'"F#%No+	  "*$hԘdI !5B#):TlQYRK<q,TUF>%QTj0Q!#)V@1Z-^U^mI&#U6}MOuշj"iAOӤ65#+!#+%iDĽT@S)T(#+l`MOM`7 iY#%#+1"!T0`[s"QX 0E D!d#%BB ?`<Dڮ}U0SJRUSZ*^DW`jgƹȻP	Nq\#)BB#)Y7#)f2f&`F1_ \ 0pgBE/拮3ed0CPp#)l#)Q٭3&mhzkFQFt@qk0UF	Ǆ"E#%\H!VU	7UY#%<QVӬSf̐j	X`]#)0zw淈mGXU##+L	 0HߑN_#+QVjX;X9#+rd$FࣜE2B岸	uUFsa,d˕c	t|b+y{ZT@PnF%B(d	#%Ԥݻrm<G-KQxQHa(1A@pU5b(B3c#)ȞS$c	 l 9Dz7ADBR$d ޸*"S#+Ȑ4m<m\]/4V۵7!'qE|N>%?D|؟pXgbJ.=4-%E(q|٤\g#r5+*^.wwޠBHF0cKOxn]ڄӀif#+(T<*LۜM幆No:NܵatH#+}A^i#+~}cyPtUA#%vރ /@Tfl[Klk2s:k <\loqo	' {Kk<oΧ>D,RFRͨ߻6	L>*j	_aH&hax\cCҦ7ACDz!X2x+RBxCA>CN[:7XIMnśz:2tVh2J`0Ѽi{]/wR!ÈqD7߸!l2BY#)*Bz)v7oUFsQq/dT;9#)&&%;VBY<Jaw֌#+#ZwrѦai)1X`8֎a޶m-0fQ2ΤDL9*;!לɇ}& 1T80J=9g5=.}Ke"w`qRZ)G\Lyd`=K[S#)<HM^y?yN$Rgc~_ŖY^VGPw3#+[\(09m1+7>5nQARǷCln:BMQ!OE,	a'9ߌw %#+{,JXepïv[=xEyйgI!Dn8HGis1#)U;8+ӾH}*T;"U񝸙dt#+1P#%ݚ"h"cg=H43Ɇn4$DmvPcXt<J<t2sb;]jkߌTTp`MI)	!>zn/h8hm~VhM&;Fy@!}I=_Ԯs'5VMAm.wxCs~;˵uLnX$LT5;Ew%D`dhviiA9^+*T	 qDqu;7F8#)#)^Lb'6yXIhWG"ap(6{ٶidTo:<URq2ċ%˩l|َL=jreXC6U]G	#%Ȍ3tHMJQq˩X݆_PV_#+[@' IZB**~p+0nPRA	FBCqjF}L8 H'0j{OQNt-8 f{Na==h_{G9PY4U3Fګe-KL\#"Hqx#+$#%RmtCf(TߑچaR:.3CfC沄-ͫAޯ@@U#+&@[|+>ZȀ$B'tFB0biۿiחbzT%-#+ǧLQXgBv/ƴ UJ'-KTdsv0dJTUl)s,2h63X[	@ I>KwT	%՟-?RBgo)w&FX,+0,<#U#)âҮbg{o	Z#%:C'aAԤaJQ	B!AN1M_rcw[+2s"/ci>D̈jO=Cdڌ8%W PnPD݆}A<#+HP?YѨOD0} rآF!їuE	Ja%B6j1e̺򵢑Do8TT"$)(1fSJM@B,ݲnxR!v#+(qPȣsDI$322Aa"5!2Q"6Y$%#J	!R4 o}uZw(|G|Nw;qNac"iL 7SX`Irkrҫ|1w,$à1 w.2r!$!|<Ƀd6qEv&tjVQ4ar29EAXacdd9ƌ.%Ţ#+La1hC[;6Ӥٓ}O͸K=cZ7\H_?Y:1[I'(ajVA.k͊^MM"IyA0ibmg%vI+˼Al/YjD,+(] xM#)(C計G&RЍ#)_1#)bmLnI.x_a|(Ba:$kCI~V%3VS6_HG]U4TkFqx*:BvCDiXYc)%56bceEh.mm{l*\A:%#VHRU4RIl!HV&6pdj)"M׾<"W@R9&W#+N<2ef#)IU"9*+꣍X#)6f1ѸPb ꯆޞskw6lzֳyDWy	v4BbmlLYtc鳗0NE[V%IiM 튵Va&A<QCX#%3ԒhHo,킈Ș%3Ԉ1FmdTuCt22WF0yF 5Lcg]jMfk@d0n#E]0R<G%XpADZ'C BeQ@#)16.4upMRTMqkz"ZCxAڭ,ʦ3Aud2P0feH͙֫Uwv6HC(@і3X mh֢g/Cl\`0D)bDrŦnYђz=l30h9vbhUH6Eץ1&Tk`STط7'C0c6;.x6.pc+&Q#)b7U!<VZ; xhLʚZ]]\j:*Ȉ.7b"!gRF0/	3#%ACh*1QAdT0/i,H4Op+k[ܮ[}.t*d?t5<+PaVVC{"ESbZf!@O_h?s^9#%<? 7f@;@׀WS3<{TqƊ6AQFap#)xEXA@H0Sy#%.X6 B'($;WM	ug0ұB"4)#+{	d.#%BiW6'l#+]]6u)-}BMDba`ǐ`ڋi))F楞D:1p:"ҝrLw_jom4ܻ;X	r##)u>Y;#%:)1u/4H#sfF\$_]Z0ȴ#+5g,F>nIu(*B5 5Υ8/4bZuCThOw=kX<B!k@l8S^çgR@gWGz1ڪ|XN'gx7a!Dd?}Vאm$u>Cc&)#dJXzIqˌ.G#%X.v\*m'D**;6n6zsOy݉dbN.v;1#+e%LQ "}YjIеQ;c=l3YrҪ"pb`0Zf#%FPپ&o'\gMf)#+BNbɠEPe*(ʯu#)sFkx*#)xsm^97ʼUb9[-V=	aPbF#)k""44h<LDts!*#%"#%*x[@#%H`r"Hۻߚx(Ws{" |s*#%a5?tB|Do"ȁUE2m4[uv[:-~o{BzEV+QVݭD֮!6i͕&dbDNb($"<>H6MT<Cj):mQOp@Z.G)3/DCڕ/s="=[C6|eS3RlEi!CfZfC-[lZmTjȤb$BV*֡7#+#%ɌDlD	K`aQlt̀а5w %h ,nd(6#)9*u	L%o马cmrT@Ecׄ Q|$B|>vc K@!Neܢ.]zMW6as8-7@dXyS+K:"4#%1#%zccdGQfc>3	3$-YCzbC!3GETub(wIXDмirfoenk#+ȪAZ %\q,Y6gT:Ƶ ("뎆	3hoj>}]O	`?L_Wk}Mǧo=aѽO]3סTYo&i8u9;B	Ɨ:i"!)>ORZםx3-J4ҧ6siʎP0D=nPE+վ/2vwL~(X+ߩaΞ{qɞf|]N)Tdc¥W2%p-'/xj"'@z/>mΎ)8ډfBSycc[A.^侍P!	?K*~rg{\ 1)v>xSnIR`0G@kǋFD$}r) ptT;u<|iҊ{;FIGҺ<a@$Oʂd+l+scjçZM<!`/J7c_oB퍿7G2ExFc\CQ*:QQY*Kss˯n]3=ӻc8eeo0M=\+5gu;٘kn;/s%뗸}00cFI)ne%d݌mٺE<t@+ZVlϗ4Cp&%!^S1mPn8K#+Nl1.эȎ#)&jӪ"oAzwO#)6M	֌F#SLj{V=Ƥ^<$Big5ZJn#)4rYO7@T856~H>=ٱx99M|{ܻdh}9m}흖)ا5n=neRip7;#+FlSlDzdO"Ҵx%Czҫᔙ:z6mҧĻV"#pe#+?#v>T<`ķdatB61jhvcj(3XL	YĆ̗;z=٤lC=-HO]F#)hW;=d2j+pz2ʆQ,l.#%H9tc8C^#+pqX<)xh^߁~ۼcMѩ[`DG40L|f^XAJ@1ӀtaB7#+8lhgmDݾjv^d\s:n] GAfE~)p	 D2tNꠧ4@\"#+(@m	36kL-<;:#+#%YҶT'2:1I:3k1Cf#+L8|{ؐ9@a#g(F_U	S1ZڬC,#)[{D2uÅb4a,J!mplf7ΜTyGJqԞk!.fzJp~e	:xL=qqTC츏s6QD1RYeߘқ,}6z?L%gIW3ڂ4#),e}<.̐S\A:z;FaQ$RmBD {s){pc=9ŝ/nn5żP(qqľpgLW5H>)6d:tZ4kS5A<h*NE`&8[,DB桰Vp8ۃX1ʸ-?TyChv4ĖJ&H^}-~p'8yt~GVoN|XFj='#.nHp%\zhN	b	bbՈ41j*SUI,rҌQJKpUN;zSeha#l3̬yeA+=Oc&9@&ٌ۩)#)BJ;a.ܴN)#+hg3tu{SCM hQkjYaՐ&aBpu,ŞUl=DO(eCqp0q/JU	M8qcNAz6c"h㳛Ki}-f	_Bo3>3=8ebjCO*~.>]%<ǝN;a^9HQ~:#%ӥ6x:.nʣI"?@iaQFdə-*#+cM*;vWTPksk۴E^koV1m~6!ne,*.R`*QUd*P@{No3t%;;#4~Ёxj#))ȶP#m"m_֊5H9Xɔ*[kǎ[$\4׎Ńi;dã0llY2|Ъ61#+RڛkgJ^|my4Pd$TFePQOR;^,f#&D<OWn^͚+x׷,NT!C9Z0cLqBgzYwXɺ@UKDj#2Yj2Z3Czi881lr7q.sR#CI#)p7 Phm2,u59377"nov#mE)ZڤM^Ef{&^b8v+PvCVRS#%j#)A#L\H6Pԁ54T  #)\K:f7˩RlZ!#%oOsB'mJWmҠ4H9	Z:I#ش0kg#%ZfڃT#)LQTP3xI#)+E#+BF狥r#3(Vs1VSVt"6a-)3 v(-w8|]XTE:0qcͨhRfXX+Bc9]N-Svh]5).Z	J0\p4clP(VaXI0rLNX*+qj#)f*#B(#CjҎԣUTڠPfA?U8l:>PD"{UqN鴪.N--91s[uޖ̥08fM/mY%#Lt2#)RhfwEX81[]O"OPQ^)B9Ìa%M}؈1;vpyzBs_ઊ0F"0P.]ѱ{J@*X>#+N	M%@$gPs#+G4bAmN&2(U1܁FH{}OjJkNeeHv-Sm^PzC/ŴX|^hOӰ+@A]l&E	h&^<_c,DVTpxm#CRU(S#)Ѯ1uѬ*."6"z̰=iD~#%vD#):9ԡHQ 6o-A#O׉';	\|O`Ґ-P=$A-%+"6j-$nZ`:kL'~C?!#)IVZQId#)3k,%SMcfbKI2dƖ[4TS(A%l5*Rԋ&XY	*1A^3;!}pmƃ:ͼfumT~l7G?){m&(,mY$G: Ίeƀ=L)]/X_q#+2D~ÙĞOr<ь@-_3F-Q6bߢ dI0DGdf=\g%h%뀀Կ$jŊi5kk#+L#VL;@#%BR>Id,#%˾A	__^ap]-ey7.2PzZj&rb(Ev9IbiX.1L$`.@-Ћ[S5Z%1T#+ƲQ0UԉƱHh'Վ-;ޒK#QđȮR,xw֟͐܈9f11#%0D1DlxI\ykk\˩#n2+#)xP8DKn7It6ԑhm#+,EIa$=ȷ$G*zCi`#JQH*X<ꬡLȜ&7dtpՠ2tJprhDv/o#%m/:Vw޽tHuxr(ۄ)ѳ3vCz{0ǻ<eWqRuoȃ˫^AIUE0Z&t`d,߀M&-z^'-#3>G7%tmXLUә3q"&#+.#%\˭x+i2Ћ:<h;kѯdRT	$_R\nNrCM[Sj-J]82Aq#~6Dhv+S@)3gPxՉAyk4#)PҌv*ڛPTdMLK=KTѩdbMj=,3]kQ#%hTfaAa+P1~(#?Mr+]}Ǵ8'uT<ŻEP]b3W>XѬN߳Aɭl,#[sQͺHlDzR'sw	[.BTU:+\~q5gFԲ4Ð$h#+!FT"6ozaBhH3jҰZALD#+sՔ̶_,|1d`̈IKcObJ6`ܶdMz66d Je,K}7в|#RҪ@]Y6CͰw@KTYTo;ϴp\HQ0QQ4#ţ6%52'"Rٛ\zm&&k#)#)g%#)8		0-;9fQN+|\d38АCҬUjY	Z$"y+R뮤.kHXݲ}+zЦb^7yHr lT!̳΍ًhgb%H&1 TdC(4&AdPLp#+L֑%\u.:J<Ljn<514spd r׊BsSk*m5hʐEqg\=K2aiP#%ur4"0-L:`4]qr:ӢTDDiTdt}<^2}HY85dO4w٢\ԉ3bNua[٘gD؊6@%j$e(rU	Fwj IY!WwxmQ-(&_s,#+k1btMa^(h|=j7bu]-߀#+]"/a4y^q%ql*io#+1n.)98o܌b	,xw8\7_.%M\Jgjq>qE,eb<8jr	FY&73&9kgK4(quc@8t[6<s^}00KU]@zGacbd3@;j!Q#%X:ՕSA&#+-@k{ꘃEtHst`Gcyl24MJ7!̰.ݑ$	 <ssOĂri'`M#%	ԓ=EG8mr^B2gŶEЖFtg|>I7til|Nf-	3M(hFVB3RO~<bp^b2 ˄vat|],\Q|\ib%)Fbtqtl})60L#~AwC$B,ʔCXwGKk~8[ٗD``m#+0bt0l)CLj6otsH0tzPm:N%J%#)T:fHHBv9Z8V5׹8$6qi7к.8^l}[Q Rh2Nc(q8^*:o`nbN0#)m5i#+41uM(IWJSMq[zw#+׬&3#%i<SIl}\Ch=nKIA.LkDcQ%79ADRYu,Lu(_`13j2#+)چ#)#)̆C`R(]`YIIUHU57jJH#+bdj\w4QQ*#H9]cr ja)^CTۨ坎\0DdKI7hS#%uHl:{G꿚IDQL$ߔr?.=C`DUuS`#%5W?ms痯=<t~>y6-qG,bSYOglRl#)iu-&r)G3n>~GLB@bT=E3=ua:(A$|M=ZeG7aF-,ViZC4u*%b.&&iҺJx5BYP@PZeUn^v)tN6DT1#)B@/#+/}~#+ }e$Ns7șW1}vǱtDK)?Sud|4: l&%T"`]A(cd !:{PNMƌY,JC(Q1䖺ם/7v+HB2Q#+J e1	FRf#kFYA:nUEXQ2```*KfTIC|A؞Aw7eZ#%l#)t>#)1DJgTLJ[e4S+Ϥbj¦m}3,%	N#a6C9EZ:#ґw}f! S<p#%&ޤ鮝dNy0CѨv*YT11-q#+nnb1S1NA-Ͳx*PnGAA{'X/n{+'2T,UH6d5Ҍʷ#+vppQP}Q#%@[TYBV%jJ|BD"#+BZ#+cJ[+#%,R!Ɉ$HP#)!F3'd#+A7l;V<驥}mie&QDoA)=81#%@$I]{Jʃ,7|E'}-+^ड2BW1 4a(&E)˙R[gwJ4U\֊5j̼]Bȡ8pH&`4EPLŴ1&@QPq,m!a=ѡXٶ;#)WiK	g>;#)-h)$$uȺ#)AUҀba$(Ld/+fgL(l}F}o@&U%N7^=b7Q‾FyBImGR%tgh׾:Hܡs*,ϗj=.ԁ|j{XD@JJj:Dw8&Ig>O'}ЌR	Q xFTiK52e0D	C-f3Pʆ+-])5kI#+RJydXZ`\qkX:kpчnH>Dln'`@Sv@4ɮhF_2MpP#&&!]a Ņ,Xg#)<P(&#ӝDPhCZZ3M"+G\9i`xkD#+kasvܡ[4-!4X01	c+j#)T"UIiaM㩩ewz"|mP@$&MFQrF7JaΥC#)fXh9,O茈jB^bK o\"ϗGq?WM!4<" 8 +O,'D*Q%a a$c$J){O\bcvŘN]fF?r5E\.̘3(ͺ]JAs̤"v{,'N8/orZy\"ɟް$HE:oѹ|}T<"|`m #+vR'`bk_V^_21""E}sylE+jйhllHlZnQZ)쩶[]aP{HЊq?yi  0aJSk_H)Að$Y	VW浫DRdI%di%67۪,C*5FiJiZ5oyB/^'B&d%-uh7\2i	΢G5TS")Q-fŴZZdZ@O|TTJ"[A6t|QfD_0A6lx?Oմ4$#)vEy !x3c%$O҃1Dk^AIIѧ!,+Ff`o(lHr~9|'4";	PDO`A(&bI[Rj6Ue6kQ+&#%͍&LQ(V`QU4y qߨ$k-s[a=#)Rf6jάܴlN~T*fA6D3Shk1:ɳ7.|H$,A_ʡAR%#)b,TЭx`* >#!0Z%	LXT ,L碚&6XBah>wmDjj5hƩ6#)	m6PZƭ٩~CkVY) is>mL	ށG]恪~ȴMqVXiW#+`֛#CGg#%wu	r=[rMU|O<]ʭ%#+A16"mub+B(.g$9ֵK61*1V&8WBFo%Ԥ?QA@Y\J|'X%l+v͊2+{RѻWy2Ż532JJ\YPm&ЬBe#+#)!z˱.iH#iERl]6[)Dܬ"x\Jǳ^T`0cث#)*,CDI|#)@AwYwo[v>|ii碡R.w;E#)F0U}s*#+kN8L'-U#(4~%'*$$@Co0}jgaembw>i&4dn|QJלi'GphB!ٷaԨoӆ("yǒv7fNފ*B%jȹ(V7L;YxA22.<^hUW3B`k.Qߦe̖2=oGCd&*I=-$"Q2	B\#s|S,)6qBRw=(}ʿ}dR*Lpl{ϑQ<ZR$jzm-)ʭm݈[/OFuk:4Ĝht\8	ΐj#)nql[dv0_#%#+D*$GE3p{kKu"8x<ؓmBGߒ1p39܉5{׵aڋAj>=GI (}2T(YD9<tg*e?&f`~u9$#%0Swfmbc]@!??__?x?ig=7/Wկ~wWߧ;~iXo?qT4?5*JTސ,*RG#%HBDMŉץ?wtɒL5Z <@:f垙	y5]mc>cMfb	l˲H#+3z^J]fRs"biٔ`P#+gv#՗?=SfPE?hKc#)Ab]#)	?I?@Iqi6p$&Bq1R{0B׶֘4#)d(lZ2(w-=O<5w}Yݲ*Ť)8fӄ2پ35Yw7%TCt#Ee6LHCң8cJḫy,%yqzitVHl3q8Avlx]lYLŐK4Dɦ\cYff|qC1y.DdNj͞2md#~jN]NڐYrxʳ[m%`U4'/ FṉaU(Ni5n`ɵׯ.ؔHc>L&h"2H(Rc{hI-H[õ`(p^@B#+IDsFuFQ$b[A}?dpPO#)۠_h9R#3anފ:Ze	MT(TFֲmI2e1]ZkɫYpH4H@0wei#+axȆwT@b({:>*=t쑌	!9'!G2}d'ĖRf-(1ҷm#+MZ52C%+:0sTJql~RpǤqjoXy:'##+LKa|1E2V#+Y0f"Z32FZ5{9R!IvTCFk	$Rܵ귊c׍^6ض5F%Fh2i&7<FG#+Pǉ$RiwpQ7uYKY&J=]v|QUFGADۮ("ȒԈ!Gz9Bxsa +$XHĈr;ι$$	#+AB'#)ںj_bf<BHbvzwe##)藀rՂxĢ_EBl5=0`Zw͊_wGւBv#+	U2>݇:Qwm秇C=|}#l<pLO}%Р]y	|5<ٸ/B'\3$&zN67#)7$97k҄yڡ!7og	&RKxT>yAS>dDc+%9:KpYk#DZ!^/,$	[<r1"mњp>#)Un5dk#gmUc~?21OPH#+#%iw
+#BZh91AY&SYmEKQ#/#,Y#%H4#,`(br}#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,ӭul]Z}i{l4ﱮ_plkLϱdzvݺ{]xԴRq楯y\e hgEm.ǻuw׺]2]yk={[yw@=ggkWe}}}owNz#,#,#,#,y#,x->#,<*{WLaOl5nۧF#,m6PPu(QB#5JJeGc@#,P6bAnׯZ>H'{p#/KvPZ6tj>ޏ{zl_7Z}ۡMZlζˮ83oM<k=bWGӪUrz5O{y뽇z#/o3PKhF;l5#5v꽍٦f{%ՎڻsgR˒}}ށ#/#//Z"i@[sǭ^s +ހ>Bq*KxG5_/=='}>9믽e6mvun{E{6u.#/N»^FM>O}ӈXL|RZu.9.;/nۯ7rj;<Fognjz|`uu-y=g#, J=#@S{0)RO5^^N>3ek|Pܧ;{U)+Kw^|#,=u #,=^|vާvqw{]8tz#Hۘ@^vlλzދg|6%WWݶx};e>&{o=}{ok:{}kL}>>ya۽v֊ﰣqM_^/:5x_-IڝynO@}o+LUS4Z:=ua+W{Sofw[{\7v_|\V:/nR+wц#/_wہ@mg#,#,:;5kGvsɮW"}t@x6wuNVvFH.SyUr^N/FϧOЦq^;N!yNēN{ovkwV]vzskNۮo6So#|w	M @#,ɠ#/iOD=CjAxJhD@i2hj6SD4'#,#,#,4#,#,A!!	Abh'Sh6D='67#,#,#,#,#,'QI4j<iSf=OHz@#/#,#,3I#,#,#,#,$#, i0M#,"{IIO$z4#,#,#,#,j"#, Ѡ#5=SC<zꘀ#,+mbcֹu~S)#5=3&-5VWmV#'#o{Mg5ǜo9̦.n9s-J}B-~ZRkD&T%(xT)U\E<7^I̶XI&>rVL*iH	?#/7R Ye˩jҵZ*1m#,-BIX(Ȃ![*E#,|R  FVmkjL@ı &D4c6QSR%%(ҊmELXXMSQTDJ	4M-J̠I,hM0F)6"JmIJZS"@ %#5`2)lQmT#/A&()%҉YFiUI6d̙4lUZff6mKM5-M2jadS$djFB*M&LZH-h!`3M1lb`4HA31#/I((lR@Kɡ#2f)2Ac%4TZ#/5*ECI4l(Q&ȥ1PlMe2&FR)6T2(EBH6"X5 "J*5D3b	$Ԗ)1Hd3Fa-S J!*M	M%`Ĕ,0l#M#FJ!e$),0ɥjih#/K264ed&bIZHXCeA̠ƣfSKS[M!3HDjL@IK-,QQD#/&$Ȉ4	#$4P!3-EaJ!&B6Qli&I%	EȶF̆L&ʓL1*1	PDTSb(2bJE*I!e2,Jiɲf&ɣ&B`B5$)YIY6J@!%(E3A2H0M*6BeȔbLE#/&60FTi#/*%k,Qe"f&DJ,5JJ256h(0IS@Hb)cIlFe3K*Mjdcal#5(Fhemv4%J2SXEbQITD%KAQV"Ɩ!e)	RF*&,k&Cc)Ebd5-*c$&,32Ye#k*ERX$)dԈɦVD5	[%YYJSL+f(i5KMD%ƱX3hH3`FѶѱQ3L5E!4jQHmbY05Rhe1%h5(ږm$5!bVA,#ei6F&l3)#5I6ԲZRɶmZ4fk32IKYRSJ(C5J4Qb-	3ѵ$JME2iIFL#/%0E,AieHi)e6hbĄTZ,bcl3K1`2FLlBK!IlI&h42S2T4Rma3`#5TX1S6RBlE5433hFhɩ"aK-$L؅3R2I҈Jԙ6lei+#dfMBT)Fj[,شIlbTQfJfdѩH$FY1Қ#@Y6Jhbb&I	F5BTmm1I2&h K#5e$*50ie24´mIkhЙfHA,#/RJQliI&k2*HI"*ƆMEc&&VJQ%4ET*Je)F`$Qdd06KdԛjIEJj&CI3dRTXiH- h#53BFV&#JKEhƲEd6%`1#hTh1E&VZSTj-V1Y-f(#(1B$4lVmhҚHe#5&ѐ66hTZI5f͐Ī1h,UMIH()DF`ƒ-dԖIeMQIFkTeCI$Z66Z[$Il%E$ѭFhڡK&ZeJ2bFL`lMlTȨ1$I2$jMfV?5K&|RZdI-I/E򻴖^|ưTƪ?,S^bObM4d7%č3m5T;%v>zyg̳',uc/eLY]Z1, tu-'e)QjoQmnfN1jqq=c,6r6=)`S5KJ|9WY[#nei-M(@_Q eRFƶh&O9Q 6Y6?݀45ȤU5vZQX?haR^ԛ2*2dXaZ3#,#57AOS(C(`)<sX;ҵTؖQGgbQ0XDl`qR(jah1'lx]]nHo7-E]:.Ess&ՐUR'!!la>UAҼurKe f>Dӧ&9%CE%OUm@QE{zY]J4}]0n(iJn@rpe˒nN銃}K[lU ,D(FR-"MTFzUiz``ΙO-Li6J@`@hԨOV<ՀژD{q`CU}]l]~>ٛVp򅧆o;J0)jeN8TLhj0CfB(t\÷%v3ISʉf009!Κچ{z XZ%l(Oa"O:>0@fPeJ#5WɗRcݿZ6G"_7v$#}_zF:e.W7"^*P$csWLViУ?.]u61^9d5˖ƫ)84mw	{_K幣U\XQd$a됻	(hdSC"ʌ&/_WxoW{J_7*#5yWMu4"1SJBVbcXjOW#k"ȆkP?V"0KElz'<"1Ҷd<!w뼮m9u#EsHsAuBzZŎPwQ&қPTD׾XIraivdF90L"Kv6m-82Q`"#5(@%.}UbdtA30"+it!cE0ꆀ6v,MP$Xb	T}uV HCZ*SHuqf?Nyaڻ:uf/ji80jN	Ho/9`>/,)B)A:+v#W*|u&7DjBQN84K&d#5*mg|͟QNo(|(s_|V'rI3mc+-IEMT}[@0$hJZX|*&dFڐmĎȎ0Ggk;exǜnoqO.w􇞘7p3=FP'HOhhq{2oҿѯ%B҄:?_ͺCGʊo.WwD+:y/"]O{{X*Rpkq*(V1)"Mݴf솘PcM1AīpҤV=A=Fn.=oeH!a$hN|dm]-єL@:<!io h-HAWs2pTj]𫳃-NH#5Ft>;֔?݌v3ܥD#PbӮZ:4@I*h=(<+4|#5B_x>4]GH	|]#5b".x#/.Sθtaaؔ7lDݶ1m,8Hѓr.>y#/A;	o͘HjEAhlWâ(v\v01:e9J0GIܕ[O6{0)JjU׍.agmAg@I#5Bމ`Ga-{_#/[%sO>ѻ5F318	971Fmz(-|4bdj~.QʤX=_oxpU5W,{#ֳ'Ti<P8):YmMbw@ @a=xեd}y+Mub#5n3M6~R-١\x@p8\6irt{PAFhSC1bR`^;4l)WZvEeCL;&#/Fҧt^yyxq.K3ᘝQI:d$Zg7B=0JBJq}>4iD%RRǒ"[Co&#5qE1{~Y>kZ;xZoLhVR9H`Mux7cOrJD2Ǎ: uvOreDe$:3w׈X*B,J⡜^0swÓXF;n^߇\T#5pLt"3t8ǧњMH(1BP0Ajfӻ}s[{C}>7M/e-oe#5#5ּdSR{^{}i#,$ NjGG5IO?˖WgLg]E*; z/o/bwA^?%g%zn|ö.?#}$q<e#^a"XsF{\nj!;CFbJS4JQt:eUG+j:x+fK`-.+͓=h1#5̊SEQsʦBDzcFs?clXH:8wYBL]<CPb_BPzv/qc;+0Ks`!ԈYi+*n㻶Y<{`D)0@eYJ`{r1ub6׹	&F{2'Z28L$M}9	7%LțC#ynr"wg{tȈi7mQp'C]o{+p>=^En Fcvf,#/,gg!#5~Pi::К:䲦QiW9kdUWkB#/IMvg(:0"p8H/F@:JgêUבe;tʙ3۹C~ۏzM,Tw6j)!kv|CP.QGB|r=*D2,Ѯw3J?JwHMS֥XTj,)<'i~Gu>w9w5Lf8$ZLf4.ҜLVsR`YALjg)œBj~oJ4}vZZU):g{u8Px󘳜le:o]<{ǽY/?35_1)4:m˿Cu	(b1#/4c-;2ǣ1T]cFzfY#5FmUSZ6I+dU^S#/4OD=[q1UOֱZ~3"Yc|4oZ0]yQQF#/6#/AAz`eTT,UQPzkLCh%jVMP-R.dNdMd<qY@DfjJ%#5(TuJVTǞvrPJZmƪ/cAKv+NiPI/:t[c%9&SofEv{Y!c߸c30YwK8reLw>J;i]\Q?8Uؖ#/yJRN5Z+H5Z:||jnṽhq֎٘atI#&Zċ# Cm).#/6Git/iP-~Z0:~J+JmM}/sڻ^i@%CAThݰ|Ƌ[4wpUϧ#稺f\bLcBV8q^ &[>ܵk6l<9^K#/Sm/;)tVE,iw-#54&7ߺutdwi#/>Z~ә]wD|}>#uɝMgYYRTYqfб*qojf+?gmK&LC}W$3ӫ4e)ޫbՓ|Ʃڲ>u?#/$i[S߹ԉ̓|Ӡ#/Sw?{F._Y$Fl;timvCO+)~:*xd!4W'߶Q1o؄IfOz6k.&܂ws$D9812ͻs#On6؛*3ל[LhW"#1|#,TMEMqovs6]/q\<$AC}%LSM$V9l{zk;O~)tW\kרUoL|^ӑssٍeݛanʑ	j@zA63W{xa$++o}Z@e]ҡ3T?مSU5an~bPI/;#5 ުR9K8ǣ9ѽ(Kh-Gs(k8Aqj wǔUsǓόUy_'~+~Xg]I#/LxBw3>gGBBq]!w]Ϝ]vgNM4aB9s5xsG	YY$z@3^Gt+%yݽ,|RT$ICY;gX$MC٢vgdK9oIV]JvsȵPRѮa3Q٬C	>B0TUBEe([(hG\IIުKD+QYf_m#/t};x#Zַ>c8K|MPP和Dd!,IK惐eNMbd];>U!yzwgЪP[@?@L$NLjUPX[7ev4PiϛiyЏI'iq vy#/z8Zj	wz{&|IZXDFޏyT,c@#,`>nfkX~8~%ec<Ui۠Go_;#/[Daw	"ŋ>gΤٵ]'nefqUőz='U.a6|vOsӤQɚo$!U,U}Z#W`u80HE[^ۏ`//]#/tP^(wQnV%tb(mݽpL'o5's/@VM^%-baݗb~c	-tP#51UO,P&w̯m?buY뵮9T?M,xgڡF΃ӮݷXGU^eku'TIAHk+~F!Ivs^Qs@M=#/fQL"SL+ܡKSiԣsOǃ:NVʹSsAPT%B'?u'.B驱Ph`1վ@vh7)wy*ޑI$5!e̍r&mCC(W&HLRiBY{Nl͡3)G54n@;7覧͑)uVfe5IDj߄!@hG4hf6DX9FF)ĻnZCDKmIyնa4A?gX<Z3޴Ic#/Hc?XXv[٠*뉣QְƟ{wN4FLdIAۃ3[BwEf찲8pVC #5L5i8.^Tiݬ40\s\ll=lpvM#/>W{l3㢏̶WTxTs+S{EP~n^&¶P.XZ9IѮ=SF9g!8yW4`yt17,/+i'}nߔl#:>s򚧘l;B`idVF8qtyG65#/+oE{fw	pp(&dqӍ|fI˿1	Ucv餑&`q|kL 5XQpj23(!;A|Y#5mJ:!ӷkMV1Ǔ&a/'kòԉ*NuDL3J?g<@dCD#5j3xXTin:2.\	iQccyH,la%Bt0?q.C`B=u"1v b*pe6o!!&[3Fa6?>6L\Auͷ.ӪR|n [#5h;2JASģ6.fJfZ%+|bcNG.g]w$93?5J7*Wkjr {o;XZwwٷn3@\Hfŏ]Zdj!v5n>Os5_FjE[7sn(D㿁㩁۲f}o(}˥/o3M#/*\Sc"]teL(Dv5yCeKyl!8UdI	06`BB[Ce؁x\NX?~ZWxV8gE/ptv61+-Ku!+5D7KaA٦qd=3`QSObYuvL7`_3ldZ+C|9ϻ{}2%\zmoM[	j=4q0HYa8B󺻼4;,iJH,XLֿo?Gߜ=r8Le%0(5aHRP+>{jEDEAa zV	%YbT}~Z9;< 9F*PO~+fcW%0HXf0fd<wTuH6\E0i]*ꂝD\Ll`M6WŶu=&0t"|"nLMov=E'8HSϷ!#N^	Zi[<.6P*#57ePS7bPG戎R֟2T4`@8jLLFK"f	噛#5`g-TbB®]Mt:ˮ^6-Jh?1%0")"GJ.ϯwySICQ(`ak5U4[5-Qaɋ#/XEV\!<rn⯄VVɭQ魰BhDF{IpkN:W9HUغU.Ho>]V"/z(~r#5+jO AK]c٫jv={[vdIj=qFRUxoͥpUswU+nn:.zӖe~<P11gM7*_'0J7(#5H0Q車W2rՓuܹh) OntI	[_ٿ]A8VTP[ԓNq|tK[yVW6NᡗM<u,L:FUhއ1;<u\alh#/WgĒ$AGKd@;PH@v6MMpd6H*U\	,gjcH1?ݦcCtm\(y\T0Bf q?I|ZjOB(=+8I'S\TWVRg(THtLJ3-F4ib*QnJհi2؟jzQ]j=>HƑ	@ dJ/5뱱^j-/Fd"	REH4I#/I.aϳ=u:jc5VRk/Iv޼scˁ#sDOGMF)Hcp"MUoWuuG#){Sd>?rdr6&foٲj[!J!bSB%Mk6{fp#/2ѲgZwʏ/80n\9P$=Xu,[&i/RdOʪ)(d.Z(QET(0QϵL:+wڌgw9!JiKۥsfN~\n6$<>).X! &}b 2zl	vLTd$yD}^gNьRuƖ8Tݮq/}/)$^sfl*rʴ̋U,^;\Mt0se#5k,6EUPq'=q#^D>lF)NBxSqF* Y$/#/2&ܲda=ݭ,\&f*Zj!;19TuCBsU.$ڌr\H͹-inDSU<*.;`X&cf֡ ndLNk8HQr>zehS30gc`L#~m!##ǁ/FTo]ltQ~Pbi걭#/QmaՁ-;ݾҌ[C%߁Ij<yuB?j`?hW,h֎2>r#o"'R PxW+ۓi"#]1BF]ȌĽ4=9xOsz_;DU}></12nG&iLCkbԃu߫/5֓*:rٕ_^+]Z!>*6mc>N+~>ų3f_:ʹؽgDK;#5 EQx4{hyOfEŉb|_'AC9<9ztFBӖP!׭Lk;w鷕#5iY5VGW3a14	QcziIP%4Qhը%BF*hҪB-IWNX0;	]sW{ws"[A!!Bb3vL%LHfʖ%If&ңkvlQY\vq0Ι&1=Ű^[-?MnzMve4.Z)M!t}^Mzߣϻ1DF"wh#52ObS&H'{_LxAN+QdD>{]Lv0Q0$3~rBEXڌxgbdHudY#5gEkK^]JIm\%%Q.?SV%l"eHh#5[*]11CHOџ0xjg/$(o%_#5U0}q_^?3:[46?SL[13N?$y%1@zq 	m"z_׸n"=xM*3IU+N_F,#I@*".N#5èPCdQ.q.CBk݅gbkdE=l|DU)I0	J#·MjjfuW/$㇮C?>Tb-߻񧮿ڸsǞ>8[%hy*M"MyJNm>ֿ*Ei|Xgav1t=H:oR<5{-G"jQ&j(*#,Jo|ezmf~?þ)頬M''V7q,RveSw28/Vd$/@T\cL3cv-EأL>4#,%3#5O=Q[MW9et=c_[*[شE͜ϥzdaB#5L445>KW*Yz=RL?ܲ\*wy~|ά܏N&^	?.T8#/Z5{ąco0Ns:9t "uO|U&;l}I~ޚG-Dǯ,	ooc|HxGDy!&B1d8W_?uٓf!*O@|+N/?ugYny^9̜S:gwiDIM~4	LFڟ{!V4A2IbBpVl#Y.tcHLJ~	z0:*#5|KTR#, TDDEW	LoϗMea%'_\Zn2Sh2P,	A1	Ҍ]oFi31-t1zԿͳff{{>th|tܻXgKzuGqs#/xT{s3Gƚ/P?^tiʼrgQuBU~TrO~Cȷx8OM wkrWD_)u^xͧwD͟<ӻzs˟=m5;z4\5^-m7~}7VGifƜףɻ#/+%B{bq9N+Ž:ނ,9?fg=|Ż#/JGFju~~=vl?0zJOtVyl4S\,ZIp=%>^.S]ZUU:k;9]1Ǝ|vnjgmJyݗIͮ\2+ׯ#5U<8<pm~:~E|ٷԴJC?wŲyvC2ݳD'r.gmQ+ao.]e=WUZeB+Z#5kvPܩQSu&73	>Ig朗ѽSIR$Mx~O6{!׿?y-	+d_v:'=ʢAPe ʝ^luo>änJbۣ̚ڏ՟g՛B\z*zƿW51/U[dXhݹgW=9µYg^Y}O]/n{kv+Mrd܄ZK\68j˝qpGtKװ3fٶaȗ|~lmٺOywXo?[|MB-^]>&>D(hwsZIP؝FFU!d9SqCH"L$⟐_	*l>@EZ25fGi߻_~z<E艻{*Ňak"fmziuW7wޘxwxWy>#9spXo뭼;ϏofolWECT|_~˳s+\~_x~;t~Ia<B(1{5{߻=Wn0<|cMhi{aPA43+ϱЃ5cIncɇ|]>&^<OR庯j1/E?|-*]gs+*I;>7ͫ/=f8|EW.vծ|'ӏi̝S|Rzۻlرu+ZtPgJP9[V1qBT/;WR؞/ݩtT벙^ǮeJKNWfTSsv'k)s	Q)cy#EI'!i!Z9/?#/^k#5>_;*kM;:'Sf<)>8r߄1dsh!r˦~rl}5սwTb<PȏvDNԽv~Uޱ޷!ZPZ\ZgWDKBQx	3dYfHgYpha-f*rϯəlӛ[;haubq&%ɄzV1	V}2+ IWk-{f'o}=uۏ9c{bgצ^cfmv8BP+P[iM>(c9HJYW=K`Բy5|Vr]:vwG/#t5/#/p<l{I_/dnFy!4"6}F8#/ÛՍc4G26tsyJ\Q`d`>p#IȃU^^J.Ew˻/$Wa\qZ̹%`Ϟ*;GA֏utaV$CcE(8#5*"jDF6Ξ[k[	`ҎLXVaHhYSIUX0#@Ӷk,06Y8h$mE=MX޳!uX~1&~Zj]'hkQXغ913S%R(ȝ	t{t/9h#08$øJ:QFk1}KIPc 0i`QVM@4	D	A<wofIxS-gol,)~tgҷ1Q/4Wh?9YlZ%C̷a_#/z~ӮDՋu~-2]%<{nw;mx'=i1i5B}#5>fŮ>_^ZiBB D8%kw?Afowqע}Y?iI)B1x^@?O%>?㪥4N=/gu~>w祑kݸ5z(}spG|?~Ao{8VHm0acb!h22!In0KJإ%IH@H2)#,iuF$ZLڛ&ɮ^ĎS)jr7h(UX`ȣH*V&efeX6<+-iNF<+ړ{̈́f#/IEANivyN=QR29DInB pcKJ	)"%桶2)@lƃ2#/e&:E'(<)LRۊX-7օ̤J#5%F#50 (lR>7MiƗs6B⢷f /ZUV jPX`-	ed?@Q<NabfԕVZ*qPQh\5CB!J|}Xom#kj:e^=<{	+wNnO76̾s뉧mi#/7.\	@QSCvStiç޿&y5m76oԷt]QxvWsغ|2򽓢L5jg]yd޽8P՟kLUۣWPUⓖN(t8XQB*<7!Tn>'Ѹ.j.DGqrhs#/1>=j0}'tP0sM8#/$Ҿ0,.e/~hs7Q8m5_:{dltTmg"vSRivIn7]#/CThb0IDZ^1fe!i?#8^[50!5;<(.#v;)|o2{\nXƖTMڭEU6?SQױfhTU[wBۤ/BBW&/^a6yMRFjnH$ohq#/<ڔ%赵&r;_56UȇV1'}}CnL頀	Dڤldq!b?ӗM608;"·L!O7ztwO_DɋcꀠTH(Qk(VML	]Ƃ^1a[Tu]r2Ifq|(x8V3]*0be#5MxX0g⭖g1@aٲ=h;_FC4Fݣ*%i'eCK9ntlVƑ:iC9*i3b4PK5j&JQ@z+F,#Q6<RGs!iaEpVvxU`.x.8҆Uуz8%iت,T2Dd$~2)(	xZtm\% 0ʕgXP8EuկTg9n$6ʆF4|59?IM0qd"H=g:q[kyӖviFvvvAm4"aQ#/8<]aN>k`bJ.^	)ivr6Qk0wc+z;EAhkZ4!<Xt ywS`:RcXp BF Hns]pjŕVBq>5M)4ܦ &?}ʪ;CS^_kw3^cr*>V)mItҁHlu~&|f7TΘ77lӀDc#5DxS	&21	1l'bF֓qB2,Ter9qUTМjdą9SL̅AZa|C;Ү-jތe]J1@l*Cr[9P@ tДC0]#áfӳAqCI*V&sb-^,\y`tZiAȤGbvHƈ鐔ORkYkӿwTGgǫ{1J6O)Wj63srZ0ɩ4NX#I(9NlGqVdcLprvaGQ#5&Ӌ0ԄL#f#/j̐	;d3,X	nbIQp.6Aal#f*U2es]כW]9wP$$`ݚbVMw+^"7+]](҆R	mdGդtD(4x8)#5Ȓ45lˌH#/ao|!BiNb!8#/oDJ[ˀ%U;3a/8kfA#/;~doa]78:ɰ`BLvP|lkxГZͩu4f}]6ɲ,&M+wn#/8,Fr7QJ--vmktQ6v5#5',jv+z΃+GcvsҴXqW/!X:X1qfn\Hk ƻ\ٜLOpsn\..LҪZ%'frfODHa;#/bL^v\#/<LE#5x^'>7->6WoS-~oFqR2>De^F/K}`sD!!&|=mw%O~kesQ?"0J+Uny\(qUF̳Sls]$:dsu%̧_#5sL3ϋ{7f|2SD錙49i[>&02@rCwf˙YmsDz;A:vY1b]2CDv!Roqb|)ipg'ZlGL#/{Oqg=oX[å@cCY2Kdu}<k4W$|U7[0}D4JH﵁N܊$(k~=3@Rp9o#L3v.\cGę,ZҨf٢#mR[u9ȔNLM3ٛ+Bc!?2$?M6R;bx+\@[c.eb<tp<gAΪxUS#<m1:Ca|UR(8R:!},D}ß}{iFjo7Fԭ.򼛡!ԍ&+sg1ώu ~NNgA(9ѥww(Uw杘z}q:cͪD(Wa^CM=t#	Hx#SAr&cKeghMPyL.u։$#6!}:(4Y*yoՁn8k 7|IMM@<{UPΫg#/*ɝ'թHD&)evE؆~u_aueTsy͵g4-٘"V90GCڟ1ssyڻ}-r&d)kUA>ވk;95[\A|+/wb$-2	ex2f*)ї-q2\3bBb`Eof/\d#/$] PqA;H;3i3ϵ@)DۜsLTHJ&=S^;y3ԞK#/a#J('Zen Zoܲ[^o(5do]h=OhG&{#5dZgHz뺁CZ$VfS%{in˧(0G˫)'|Yxhv!Ƽ1׌sF[Huh劥xZ_)DijL<yc̯EOON4Z&NFCe5$?S?D3ʎN6v.:!H<]27|j$Ӂ0T$=̓,agG>Dމ@'.'_%暷 Ugn=-Mro^bZkI&t:p2-{n}n10cb(_Fձ+V-[}ʲP̍	<P#/^JT/75"L*+xBJBeӵZ 7<z}~3a~vG Nvv`AySܖN9D`u՚{vX4m܋a$y!fPc[}deyҸ\'|stL9(!WZgOHqn.?ooio4FCNȍsyMJ{Y\~B$xOrʯgMG䵁"o#u['[xpaǗJ/wC#/foM>Gv3^1'b/Mфnev;J)lʗqµwv]έjf;ÿQ_'.=Ӌ+~ݑjaߋgXXl#5ya(\Cvw3qf2N"^JH!և˂S'* {\q#/3ӆ_gP]<_篵Y:p"&-P&5*ZLʙᐙET4 ˩:GX_sB;2וZ~gqwFGF"[1jjuI&VڛzClg*]]jPP-~#/Sa[f<ҋr9bvzg\|Q	h!^Mmc۸.Hn%V3ONc3i{=լ{|6RZoc.i.(aU%E;·aQ&-FL4aW*$MV!ɏI9GתbDd:ޤ-WjjW^6U;KWUvQ.*J#,ܑ$s\8' {ǧ̿=s./8<W=Z8l`;1)qZzΨ{QN'{#,߮Fěnh;m1M#ˎq(VUqC%I<͙4sH51$1Ȑ'lLq-wqVa4&n2/Go\\t%*2L$m,<#5S2[s}AR&9rD,(K賨!LFFvP!fyni&aF,=x)Re޹=5"^#?#eO-eQ~,x-L	lgWHח̣}܈Inh{aЌؚTyV驵0avD^f~MQNAWG~ݎQ3])#/l\|H.f|`khd7}ggXVX%AEV}/AFsY~aG6q;J*89Bʏ7oz<}*ɴQmqI88ZTD[CNVFܳk%E^V4[w \3:jRk)rP௼m9e7ƫKpWW>]4v2YsuJ*rO$pzoƼv'fʔ#HUi_}HDƚc1I=RYSeY8=XlY$]|txJeĴN<ck\y!<2זTNzw^PRiK?79{kYX~m'mYo "쮅e5,[Pyo,/m4H"$!L&tWsWf55fHl*;ڮLOt3dcur#5aI<%(GU.xԒqf=boG*0'e{,bDD)	B=QeG9l5aիs*+󧤝̉{öJEidʣoc[>6h_Tvt޿/>J1"U5(n2*KCz׍_[bQA]#fqiׇUyNOS瞝q7u'#5y$	rd53v{-q14Ltpo6Yu"2WΪ9VBc[#5U;elaW[Sk\Vd.an5ĝ$5jwǺ&6Kxkk7qӶd"`|HE3=k}ZǾ3NX^X\$ΞHi%F裣|<DU1{u?o!7t+Կhkq3Wbb-xD:hvU:s?jZQG=y{8o~$F'7	4	WǞkni95#5C59mh3?lMAص`[U5<Ü[Un>3bg\#uNI{w>Y7Nnu6L55ʅvY	nGF9Ն).<9ZYyByjrOpe{#鰞b\A<`STO<A׳cnF<n|ć"R#k	!6}sH#54џkUo9\A~(fvf%|yS`"7l6R"$d\42SJk*#]󾄈JH>JYL.gBVAeUbU2<e爯CTsH<cD֞%{t=6N.lqN8eyV,݌i]X=Iݱw<;BH|&cs'SDfٜ9O|5V(nT碷w#5_!{kp$]1r!	0rK)}4BP1'uI[S:Fο3r[aCW#ʿ2{d=\<ZRti	H\9+_OW7̖HI&K]zƼ3ZR}.HwGW:V!8q/|zOOj"c)s_~)FeuoD Vu#eLT2Kȇz$yoSd43!]G.pv35|}w;jgO,n}_}[i2yfI>no]`D{TwjuD4<梺c.甴}O>kJb~n9FI럿O#YB*4/92W^my$L{7D.ɢ98}Ǘ#:HJka#//w]3mWQUpͦdE^sz0E-+aMk!J7YO+O++^A&	S؞Q#/ԝ2G#5BAhwl*Nn-z!>+5S]S5Ot#5Tt><qbO#H}nmvxi黖h\=wub`-4OuSnI|5URN(CuS4JQs|!Z>ϺSPׅz>74"x0ݍ zЍXn9~]Vro.iG\\\$yȼAw2T܋	NW4fFٿWJﺙafZFz$?CYײew$ |<._a¹XGFdx!+x#5B:&adΓ	RªhR#5DMhDc7,O=P1e0|eɇUlޞ"^UPԛzn=c&˗M%;>^X4}sIڹG{"Bo.ZcJ&Bd[}ά!#5%PVoWA-\c#,1D^뢊nyz_Nn/vtw~rk$cyco`]]~.Ŗ2Ooģ529#/K%yܟZ<ⒾeB;sni[%uՑuDz D]S1 +Fa#1騃4u2#/w@kS.sϞwWCtp/Yk͗xGb;;.;EǴwΡ;a'/[ʩܷBvǑ(c|7㟨]b։CdYTc<7WӋUw=Z0knDqqZ7PlRjsTտI,e51fnM<YdIu[\gWnV$Q>եTbL/b0׈֟O]MznKҿӪܼ	yWAF.#5{/~	mqoG:7R<:ߣ2cAu^N!Cڊ\Ā C	E|HY9(Kʿ%#/'F/;̝j><n?~2NIq6WfnM#J,>`_dG2/^3=͎ڮtìl5JP?HK3O2Y<T	Lc1.Ѥ#/kU򄞗A	ȒG֚d̷Ś3j-17ĊѝhKBqyƍOG|`xOQb(D\d, XWli2뉷OؕrqIzWֻ,DVŶzo]9ZbNoqQlё;}UCܝ-:cTsVCmdGl*:IyH~|,=?n,OGvȖ vH=1x3!>*ݻLl72R o(Lb5~CNw{E.H^:;tBz<&TcK#/vGPfef|zm$爄r{pr>ISyYCd5)cы<xd֛q[)Rԁ'1?2rTgl8Ǥm0ϖ<f&&q̯6e347m+ӍrR }P.ǆ?g@^,嫶c:M:#,pin-camvҙˎ!hJ3m׆o~oA1	[Fy]}g1S;IvQƆ#/~5لTDJv_,pc~Nt"ww__n4N-uF:W|~gbkK#CtJpx}))	A.碐Ȅt3QPu,~;[Mc5)h,onI|\!#h,ǨV47F<Q9Ns_)ls+[-ּ3li26J:nW)C>{R\٭3Dɾd7F?H\ZH\u?5Ud!z!ҘIhN#/$ۘtaql1Vd>C0JDm"+&-X(f#%!D1&H+PiQc7`;sJmbU֭U"@1,>*qp۹'jWZR4?XlFHN/FT	ylW#/2_Db0=KE*<YTVqHTA|eeF\PO7(Y~^ꚽF|[Mh(P7fzf{!PL1ʔ9C59CSU|.fw1'gs+M-=Zqjm}~DkR$IJP|Bm&2Q@Β;dR'~UtbDIsvC٥JEP	hQc6AQO꫞6з='dXY}<a!E'FlZEf|'H4_;!KSNbbAM뮇hAZ-ΰ#,Z[(fPG"#/Tm6H;HuǮ#5ԶqiED͕)2$C7$I@MR:vX#5֏iG!ioŶ,O(O6QFlN:H7>on~3}S*Br{o=tͶa#/J*#4W0SFq߇J6HGmօǕ=#ŀV{y`w_(tbGrX|Ulo,;gxaD,#5Jύ>GwG#$Ѓ-#,x1w@P[wpIM=SRMݡA~q18D7CVKmռN̓a*RhlWfQF=ڦ9.w:3t)IgR FݍpцVLMva5#?3TւqBR7t)mG(eA0 ygDߔ_Y*k~+Q_*KNNJ=L4qRhKnf=`{NV5tr~]O#@<x_"[k5rW&3/h0gJB(ċ!d#5ō2Hv;٬kh/۱-ۘwl_iQid_=_~daD5BL)biSjW~F(?{0ُN]x@uvmamBLw<$1CH\|q({4>tFCP 4	&"Ӣ{tHwaP7v[J/y]TM8L-1>hfkbRMdRsӚmex:#/^,󄑢A{%dyЪ]WY0kNRF9WdoaK|X"	2CɔPQM~㙴a#5bI#5Wcj9e[ncVtSr72A!t~T%IiLY-ٳttiq\;oNN/+#/zTR8)#/#/_#/#/z1/ggsԃ(	l%supIYGA6x=W#" ;MN]ߑ;|K4!/@CCWW|3bі뭈71|16c.<5oOCIf;#)a,~~X3qvXgj3+՜;s1sOu'GNBˬG?Q,]XLI,uH|i8J(M<K#5Ԍwr^)?HBloOGIq`LU9hE,Z;蚐P@Ϫ&x݂&Vfd76=ZEkh/«20hE--Q#,ߦX`˟_Zmo/&ۥT-D)@:dr̐xz4nj1aptƿ͚*.L昌'[ *Ijbj-<(5G|zl)QuTSǜx>}wA/Wl#/s3GJ+M	%L\h婍LU2klg&jiXLPiVq!o8s+#/ZלLVN<EHY(A\.{jَWNvinJӌ)6t5vjvBg$	#/#/` 3vUo#5fvT9afÍ,}k֩e&rnxR0!h,f]>|fñ}/7MA)(c5iEIc#5m99ʉxm4l4jA8MA#5hӷҷp&V &E&u<"Jl	=>M|4"RszH?WXR.O.ZMP0Ja"6._o/<1*I aʪTz36;MX}c!	D&a<d;	nvnk5sǐI7{Yr۠T!O!d3IgadEMzs#/!U\$v-xaohs36zoH:i)7O%!yQq&P"s[rm[-Ɏ܇[a-,[ʨ9s"xYj`75#$6#/BN\:dTEJD̔+^V?EVF&"D]9E}a=֡6=`˱"A '*Ο/4)x^1>kV~tӬ	0|e\gn$#5q:3c|I&D?frd9BMtܿu-}8A^ZO	`xCQV-@F);Hb{cو_c9E#,ZI@EL0*"ï.%%RzG1iEJID*Ζͭ3<6f",`R`Su&gX@'q(&52I|]c/c3|!ٹ<"fD]q?l6%[#/^!j9qL=M(apRjMTZXxe1cHI~({^z-#5?GJ(9ވ?rgCi>.s`?Q;#λcrwyoiV,;mGJl)],x3A##/%i!aHlu#58	sV;8P7(hWPa)/zU#/;he#5O3š 5!#FoտeC[:12 p:D>F͇(wQga(0š{z+BC0QEjun#/,YѠ$d^O39:iHPYET, q<35wmG&#/3pV` I$#5**P!*Y_AD}#/B<XԔ "B(T{#/y#/Pyg0[F	p8mymp΢H]! ?9r':"MP:1H70Nl`;(Άq̣PKD}|U&>ul*4T۬%qk^80<'OH<,u#)<O}FpW|ydLddND83#!4EgE8T#5%WWM7UBD N<dPF-KfP"G꯷/+H5ItD/TmGNGt׼uJn1-Ȫ%ɕ37yzI,jzS&|YNjO!R(όs1>+#ԁH<XILD(7%#,^EJXÎwL/a%7	hibm0:WVF#,~y#eoy]aס0聦vN^\тʎ"oamVsm|ELb$@Z﷬*`yzQv HUnUMy(t@0UeN!鯅8Ɉ!Jt&X$4Iǻ~6gպc{lpSo	-Sv) Pӟ!ܪh4718CAĹ`%ẨTza8R`(#50!L`iNWp4:R%-#,0ў1LնqVˈL0oLk0WX>\^*pEN>>#L(1#(.UԸO{ɹ5DV%R](׬^YOsУS7ś`CwȢ*ᩈwńNqV4Ϗ=9P a=JJC#,AH=a ȼHН}=QՂ)tEkag=L+ M)DN$[$!!&A	#xK",Mσ3rr4&z8JVɛXX#[`Z;#5dtSO+ks<pc}k.4>!u~HWZu' e*:*#5Cr	2'oh(:ϲ`Lw@,7kW*/-SKUBZ#5SB6$W(M%C8/:좐fgR<#/1ThzʮelUdߜBDH$mTK=hA0i*zM[ufr7 63PA9	N-X󹌊t;TP1m2RH(XxM(!2J97>SXc$T#r8"pyK}hG4!'))dt-vE؅[rCq[aҸ2.ˁ8#/(6	mJUKfQL:kȳ>~N\&Ϳ2BV~c7n#/ɌyC4FDA'iT68|#52"),(5#)Pp9QHmt,\tvvG.K}	vCEΎ1d4>?P=M!5HS|z~x!ˣ47F'q0t,#[A1,Xwl#5{؋KK9lwܷ#,!I'D:u!zs,ykl;@#5LqZE	̬#/u;)Cnuf5W~"&9)#A-3aF@J2}yB;Zv`Yԃmţֺ,%)1D5$:0lTLؚ57q=%$7#,zۘ4zmSS߆t;J,uBuR!"TIȃ5~#y5$!t$cClzEu]u&fr^j`KJ E#,6z~ M:	A2ANvl1vkB>܀سp?tL712>9X+s:ŀx~ϘdcD>Xv~Beo{lP3\yEzC~UdM"aiK(S&Rif챇mOt<#5VZ:\XJ%o|~&b	A+:@#50Y3zta/da1A_?!!a/t]a&ex@=IXtQBׂeuүʥ>bmEoOwYm<p잵~_?~Jruڈ(+`\,HZ-GU#5F(Kkc3,`U&vcsA.򰿖uTWnD;!%Bm<w٦璣P>uw'.pQ̆!3ss#u1ygW[#saI	$(HB?%6LOya1ZDoHj/a|bB/P2w3uræ;qHqKD[8VޱY~G#52y_~eu]fWx/}?30_}R6-bjy;#/`o~Vև(uDY_sj&8c_yfeG4ʊ$zj1rVaDk<q=j)EER4v21뻐H22fN"Wlh]uo9q!(OeTQ3äؘ܆h-6S1/\&-E3;zmKȱd19>ZWG-g2mjg}ag+%޳6aw1rNNs5311P`Kty!woő`N1/(Kk*>$>@~1[+9RqX̰r#,&sCR"&H<ǈ㷯{(ػ.qAc?.hD d(|m7#/@OmLoO`^.޲]p0ttWG)xty(kawu+u-j߮(<uXfOs2G#/(Ǖn/R|F;-R!4f<yp[5 kZ5zpGye>:l^uyɢ`Y-Amz5yT禇˫ѥ"ߗ'9i#5|f"Ώ޸] <H~_?-uhΔ4$.+?7f<drbk	znLFA[k$;4a2EӴp+D=#,	E\/Vf}|Kz%ݯ;䮆2dIXfZvU醫\zgSKYT$У$nkXO-qW!hqފ,#,$Ϩ>1z1[ĺ|ZӒ"kmYlk=x|DYe-bBfGC\".}yfn޽5Ϝvc1#, Eb"P>!#޳9NgLOp޶f`'e3h愀)9⬣u49s"➺_Mُ75L."H{upUg:z8]<Tx/$;seOժ-&Û`ЛGf`M߰ݨG44뷎3Gԅ؃}3n3GNBˎRL7*tҘ&~F#5ol=%g4aV5뙍uhLخC2j{ Ya:R;U#s[+Pr$CԢ>}ߚ2۝!@3<Nf?iA^#	<^ťhm-43#,ս#/N,W?]߈!V	=PI	E/l0iQw""JBPKEy>'#5|#/y;bs*/ΠCxo.^Nʔ:2t7OĆ!8Kےri(<AaNbSʏw5/Ow<0z*/1INyw4O^]//Lz  MPF$sHDO\OQv/u\̉z}N'z&]G:q~|83M0-^\{uz+s>ۈMgUb6vLtOt*ddtjC~yRX~Lw$j«JϜf.(|v5|cw1Y%;;v{]S0{#5O~aSFҺ}#5SSa:;	b4͑M0v8Lu_z<QCY-_e"ϯ#	*6yIGTWU/dzI#;~?NXg֩23k1ݏWÿ.QlU}ૢu#6oZ|ey|?u#/y̞0y	e}?6Kk6^$dӬ}lAd0)eӚ*bf\=~]H3GY'{l;8,JŞc.`gG3q[Ci30ԊF^;l˚kFwX56ZY}.suV̐s9wWi&yZ_yc'-0̽%uϝAt?whll?CUl	s#ʷdR.)N}rGio6#)CW_gߍ.,O/D(-_ZA*9Z܊pQe$n9w;-k1#/ҷ1S2}j07?mKIlKpėmۿJ炩F%3)m5S0Wk(N>vZ9J =T*;RkᖦR^4p#5~zHڞ$Op|-a{#aPt΢j+V3ZmY·EېHD۴BdBi]k%K~fQx &	۴P18G $jŋ%{jYBD^i/80(OD,|-$ʽ.kstӑM@/(4(@vχ$葠9#ƍ_#5tM4aG.q"I";Z~˰#5]5/CKKSdixj!q	mAV-#b09P<Q(4#:!F	=9-&8	J+B:1F+;Ca1dHFPR}#/S<#/V;0ǫ9DAgCe57"Pqɽj(%<JP˙,b7xfvԳlgE8q&5xAwE''qݜᭅ<Aѧ[(<Ēy03 W)8&/+Kt"Jq!5g|ܺY%,#,6) )`@0i#56x"\uX@L/)X3WgBPc?54)rJ'A[1xW@.##TJg-]VyfZgwh<?	׆1y|[ɑN}_xl[RQݹ3}H\XwKQ QW΀BL^T!eQt-_r,K' Q=(/~ҕdBM;2cȡ#5}gH$^Ǘ`#H3^_djEVUYg|HHCfCa=9rl^?Ǹ"n.jtji	C702fO:15Ojf#56eCS(pr1"9sOۀhAuuT>UphnkYB.'Aly!wmA/ҳ4޿Yw611>o7?\/M<#5g"ѠMSfZtY>"Y:u7R#9D/;+:L20;.RU]>McNnI#/O峿,M61}^'[X* J|wsiH޴V<>O+7NEȄ*jI@JH8;׬su	0b.TStǪJ+3Ndl%fg kDI!{H_wۆ϶>e(nv"<B.&twtCYLs$hede^VZku$$Gpq3	݀Hb0PڋV#,;O=z&Ze27&q!Y}.+W/b\n&݈vWdH%=2!-56lCO@&=Js#,y]a>Vm@{y OAׄy	\ޏv,TN-e{ed:*gsC;'J~lHg	ͮEW7u+luSfMYL`fe#/k8	uq凛9,x$YGCMp@pkI_luPaw=Hw>ɩ;qx,CʍXL!T2jve.l: esj52"X~O{{ay}ۣѷnVKJ3lʺ5NҖ1,i{lӅڳ		ucNi0tl_6Κ#{Ag<{]^sS)Zĳތ@]ۻ}ٿ<0U&7ߵ7Ȅu0$/*gsᚾ}+97uE4JﭱeO"&ܵ*NaĚcU:bxx*Gsf&#/f2J&fEVfE*8R|ZV2r8MͫKp`}7'˵UQy9ͦQ#/(8zXiKe(UW0~y^(:zKkǒ dVjǊ~nNE^P4Ǝ#5BGeSi)lO>hfjjf)t~3ߘ BS/jn+o%CK,kUE.ЇHVD/$ۻD|v>}	1(ǝqEٰe% u2<z,QnܽaNYj1|%~ݫθKӹivATz//5JpQ#/"\3Q}z;}:S#v$Bc;Ԍ/)BTzED^asnWV`r*B ru2W>i,Ѹ.'gb9YV#5k6#5*t0#/2RJ~G`jM]beqKAJ`bi8!#/w=+-W8#,pCۈ\w_c]gѿ_tyC9YHfQ5(s68e6;iDv7:Lӊ:CÎ}y!!T}E#/nEQ&Ga#/=4!Kki7s;cQ(>=9\eV,,Y9i@{}6_w0RDXy0h~=O6{k1|=9Xƶd{<ȽRi##5;7PR*&vlVO^55q&Y_f_#5mڕ+ FoӜpيvcgUrR~y"ij!4f䋝dKm@(wa=Ǔ&Q\'9݂-ߏGlM,]_y?dCW6#/nP<W6쭲)9.9>sl:颅\`gvՇ9>Y0k|`6U%b[ya>,q+Ci1by3?T..>)xquzIo`5qY"c0c5-]lj1{bٚccGN=wFz^`#59HmjTDN#~<&}<p:RQ43?ٽrFmw5@#<ԖPS&79\*E6Hc>n. Eg:%{½(a#/8knXŖS4AT(qݞ2^M}Pm͵LtU#3mk$䂄ƿǡvȺ_=77nA	FQWbr%)pr17X۟~:S~:kQ˴88̄q0k13%u0#Pè!(##nj럁f](h0rt^DYU{U	jz	e~0^+cxXuFOUYbpw*wIsϠZ.7A&ATi$tny[_qsKk*9&`e>U\7&GI8<g[Cϴ4bƮXHD1%97Kp7ӗמ}7[}XI֣9ɇO-j߇iRO2:=JƳeS4Z&*~T6*RB)ª3zw6y;?<ܫKJ{[3myt;7:b~a^#5ڷS"ϣmȺG{K{,;sO9ve>~_MY+YcQTkC+g.U՘.45םgS{w3߶	nԷU@\l#5Z,,ndqrK[߈j[%&LPI~ba-#׶,Ps0e^8;='=a	ӣM9YlV=;J͸jV}g~f;P>w맶ZGVOA@%[?GxQD>FL+ЙDBq<wW9sVjʍ<S9-[61_SY{Krr{ycv<SYsyV՞r_eo|~l|5c~og?ZV#/ǖZ~X&e@vH9	[_$~t6}/\~b#,_`#/`MBI?/#,!ߢa##/6%VpU",#,ˎ_ykfDO+hk ح?=6yun4Lv7*p2_vCJn5 B"N֘IEoRO3 z1~Ĉj	U1[`bv|}}h=;!#,dE,.LH}52UuY'צ* 69ܼAOO.wwXg\MZ%Z߲mǸFG$-~ALyO/<GJ[,-TtőCAtƍr4Șt,c@zr>8;:#/y>1}~G6SA`''jYA"aKQ=eks=Z>'2ٟY*v}7W=;cU%b.qJX\@"j.6IN$6$RgRDuOA<ޤ?GbALx*UVa|OR<G7kn#/$5FSq#P-"#/	)"bNc{\`pRK$a-":\Nk"G:,dLXTJ#/p/hQh:H+P#/#5ݙyտȓD@ޒx͉.tJQBa2Ddݠx#5V}xT1+\kgDƋFhU<C{JXqտ<v,ćlYI#ʙgKZez., NʡIEi( 0a3{I+?bEy224<1nQN.\m>: (8<&'[_}fD8RH?];	F#y4IO}r$Ւ9J>pm9P{T)LHqDBD"S.ŹSHB3B=8?#/Ĳ7ysRT4S4RƳrlm4UQ֫lmϟgzag?q88?qGzNs,Xiu9r4w`],͈C-~F*^=C$%Rff{6nkKIk}/eʆ(&?)#,Z`TS3|sVL[Wwt$Nҵ~aA|!K4i#,,*!5@Dهgp]8ԂXd#eJӥaE"E|4:#/_Qqi,BT<@#,6?i`>|v#aGdC1>J46}"*֦rNP	Kb];#,GD6d6Qbf(h=4xė9F)R02!IY"{Owy_#,Ț># Fm~n5UB"{i{Ty7,?_9Xf&f4eSu0b. Xr!_7G=/#,tal	`6#$3<mFX	=.Y%z#5nU[u<hqkrIF5+||ǷHIT|U3z5#zZ&`\SXD"xNģuEiVeCMfD!cGX@8l|߯,2"H~xِ,"s0F3ͮX>r6WUtvμwCŢ$G$I#`~xa>Dyq#,u(KC!%px_GK7?h(w|4fȂdBދX}AɃ8)ID8nHtHU]O<'Wp))BCx6,M^#yk#OF#/Sf%;S-QSנg#,qOHPF!d㲀~0#//\n566ןf@x$<pd֗_2ecc!EakZ]#5?r:nnį,XIp¼wϴY=LQb9rrXp 7ób0|RƲS84۾|?Y|Q-If(,|@v@7	#/痬-#,pxUվ hH#,?apճ#,<<%r"	e=͉}b(!S(!>X^X)gH#,QTCP>C?3OZ}@pH9#+9 ~~pm>	^F4w_lr  $({];7paެ{E;#Dc;x$dl6Aç]qwAр}g"D<#,;4|	p-9сP$!!|4ȳ֧Kpx('B&Ex'7AjXGt" :dCp#5 )t_dc+}eV=(~t3yxh *(k-A[06bz$y\U=@f{8-@qͲ4dGH^}3DIVWǻ?>ۦrܫk|[<IF?;##}F Nr}r!]gz:+}F٨dD]aUXOcOdA@[ yó(刴CRЇ>nz$F$A`(20*u4Qf#5B߅44ʽ~TN;:)1Jf &aQ$&$0buq#&nO5NǨǠm}i-#,ďOg{C1xX#/_Ϭ<*B2v;DjvKg''ÝX0>+ۿAS#,6nrt`9+R>SAv%V^}ML7 i3ҷ?)*绶'mYC^cCh:iH#/3D"G[#/B31tF®(wfCOj6ryf-`"÷خ[#,9R|;,p\q6{˼ *{cx۰}F`0")*F>#,d1EɊne)}a2}̄9hhX\Wl1CWlhYy홤wNA$D"DQ D]~b!.̅Qg}Mwu5@bIrI2qDf̦BLHzѽ`.~P+gP}BQp="#5P~	X2b`hXPR@D0!#,bE&Idzj4jZ`Ro<fFG&AB<A#ܫJQ_j4OP~1)ټL}9J#5IحG(G>aC5A#U+)'Qҡ@ m&S3oy[;skZفB#bA#eSmw^xˮ[Q{{>!9諁$:`xZ]kupA>@%|(B#,U4ð)^ 8lBB)#56	%1:hfȁ|⥅o	=ve^EyѢA7'^Sq2m80-lBɣ4{^w[F#,fm=zwwXʕ!^$;g"ظn骔UQ|7+?nC	.Ij^THn}`cboZߜ16}ثKL 	#,$	&Oq0Y J<$2d#T@s}h"r#GSBPJfXu2rrٱH&*7"?P>'п#;OZp!b÷㛁$! #Ux37^7Sɰ%bybȱ;PFKdZ*v$exzOgG<v/S4#/Ɣ) #/$?I'}k}qHf[QcQ!E>#5M.JGD|̢RN%ي+.ĩ%#/ `i1;&(rE2# q8D\k\qxe~`9hTȉ\#y0nxhoHAL#,T7#/l-#,@c?R(C.L-z&#5tfǨu׾M"겦#5.DՏ	X9r:P׈{;JEX`&@Yo񳛹4^m@1K I2mN/2Eh0(^I},#/P$4)zj&D);&$M/9ѣD&$Zf12:6A<evrlwC5s<%jfgv'm3D=w]S{RD]#5&.A+Ū9Wa֗^̥#]@$<PIeI$Î ;lh7n\VLP~(gr7F0rF*F@lr7ފ~xOZ/$hW0b %-LssFEQB=\W<LOR!e/,<h<(R,R#/w3vA&?޿O~B⚾"vR3n`BQ}/ =c^65iKVRMΟGgchL!0IyvHGiDi2L/TQ^G4Xt}pfD	|,8ݵ|ۻ3q׋?$L@FL+Z4F t^pB7A#5C-4Hp\B@`IG`UӠL(&\ B$` .pmKsL& Z*{fT7|٠=CpbqXtL?ğ=TVrG.\'8b\pqqp C<o/ߵ|{kgǋ1(#5"ϴYcft(#,^M#5o\n[#.Dg9.RxdL&ڊ4Bh׷-mpC	[lu$*PAbɡ)TTnc!6_W:뇤k_eOf~hDkQPHC;!{qj#,l>{Wn88JnG`Tv)$+W	<L!{+>U#WtŊ2-#5KW iLY_ٲ#l#ݟŵqnsTD?aȞԭ[i#/<eRF9#1<AhA$FaĿOO^<jxQ"-߉lO3J%P+6Q@w#,nb㰻da)}N0ΓapQ#,~/E۱NtNkb#F0"1;r23uFf"81໏{ٳfSx{eb7daKyѥj)KĦ! K(#5}#5ﶿP|Kw|9T{OobUyw>ڡ+Хff,xs&ЂAxno++'corX9oڗO>_õD~G!W*z&*|O[|vKyyZo.q26j	A,L~AF hinݴKbDɌJ1V4J#4(P+mu6IX^F	*4S g#/܄+xpKf=8$FhB(f~}BcY$&1t4AebʍZpqy:0G	o~HwtGR*tsk*VLv ;/7Ly{ȃHDS.W?=;~c~/V@;Z߃lFQkgxګy/3bl~Ve!/f= rj-"NWڐ2t3%'3@@D' Et@?c.ӿuQ챗#/7dr*!9Nc͏qF;O7BbqaH̀>>tɧK71n젤WP0-PBB$R$R#5"Fd(;wI2dxDrdgq!w 3g׶[)6hJYDlDt#>j)P=n7*ہA'PI%l$d	4h@+!vksZ~S!MONZ3h>"#,R]"AHZig#/y!-p=3U<mE^:EnB8<rOƪS=;iG\;\׾fDLhc_wsI;-d1+aYTGҵ@Y'qg`hiA"N0D44|6I&Єu	W-DW2Z9{%$AQ)|rEy!V=!#/i:aˡ.Z(}U}B~\lG[I+_OJܵv,<4" A0\&C>E#qVyO;#,&U^#,V#/A/Ei$ж4H,-+[VFl/F%D	@jT#_US$hd8eb퍯\%:LPKw~=oRJ]<Eǩ}v#Z#/1Rm}.ەF~Y#/˛}&G;/k7ȸ칳\*LFHzm*Y^B<P˰@MG5AscjRsM&qQ=%=PztJ6^dxvgwHB^Q#/к;;KEIsy!`r6;p{QU9U1#01QS4h5)+5$	Q᭽9>fY0nEl{8lZ:{V*_8T50O~>_.ќx`KtymG"k#/&j-ҥYa]XR*,$3QGeR;tḍ]>mtNxPI_:wMg9y9+7=i<ь1!υ#51E㓶NZwmAߝar;<邺2	!(O~gƓX;0!sG;)`ۧw\#/s%yOnpȇmdE,0;% c-{U3G꫃~s|m΋fO5qow\;>Ð1kc}_XL:nWWwgL:Vϛk{ީq:n={r7\;=T̈P1󰡼؈Q#,("0cՒ^7R@̄JPwASkw^ElUN٠BxFsd4(V*r.g]zBeY.Oqzydh<O"ˑs\F۸5j(vLwL/OmIhh~?.ap<d1_/t΄wQq=Xb?MQӼ?t*xB,IvHQ!͚Gs}fTTGq[P/54L8!g_%^{s#/&`z?Z;+UU`Ѻxk565\=a0-}[pٍͅNsu-Q#QשqΤ:)a$4v;\!5Khp'GN!#/K$p%-1'#/0|ø:#^#/B*gg#,z{:_П^_"ıC^m{cQTUTAT#n2PCa_@`8!M:iD'^o:.\,RPoy88>'̬>Si(ab`&@@rQyW:Ф5ܒe2W&.֊cfJ3,x~?<4#YXaET0PJA	1QL{8#,p}郛!^^~c^t'E{(,$!amaTbj;[!tvK.}ڿ[w}ƭΓjCY]4߼]MC7m;Sxl³dFn`((YM"]VӌA&LJ/ޕu[5Re,oo-]cU!%%TN!!Qn"z`m̦6~I|0!	+(yr.zy KKcDw}Q&;,CbٺE	\(B,B&ðvȆIg1G&6)QI'72YĎ{o믉|]T-4d_.01˳vyhzt,@zlqLB3v۠ztjZEYߕ<Nzb=Fo84)ʎ|D%c8$h1TȀ@jpyγ5:z${&fU^M*WMgyx`7>/5Nzᎍ.ԣ)mk{Ui;QiL<4h6qcWPr̜"#Ӑm!wh^Ǝ\a[YNZ)lx4S ^ds>!4b]n&CF2g47(e׼4,J'j=f)c M8M|9ewCF$dIk6l~zɫR{!6R`jӼ'D!22$.3HQ^5#yq3ө)kyz,|cFwu ;#/|4>8Hkݡ9\x:GՔj+ܗ7G"&(pzc&ǡ q9#s	os2,m#/haX}ԃ9oVqwx4z/s9L6mt^J$9^s b;xb<xc$ ϔ&a#5 8+j8pfvڨ욯BX:=n#5\wRxnZXvpRy"!^MKHB*XdjfTOS^dNd񞀓vh^Mfy#,G@o7#e}ujUmeĠƹkbBv#,l1'@$D``r8Yvaۂqшp7y BDq.q.sxYLF$#R$'/xcN_rR##,`D;B2ffX3"̒vK_ӛU3ߝ ,3wї9bJE;U(`𫡘6M|<y=C"c̰#sG,=]Jy84&B;Ha]aUӭםfC`gNF2ʠ<DB:-,|tj88<1cst|/M0iqCTF"],<ώ2,E{H=Fc*2NQo[m6.H =ҪX,eL54ۋ4{B$ߓĠRܑQWc:'-Q,>\eRwX-H/Sd@3çif׃>Ooqc-,#/M,~QÉ	6ԐiN<Ҧ2	1ٴ׽d$ nyJD{Z$`L}\]/b`ȉ(ܤ&QD^"@g0Ghj{0e!\(Bg@=	IMmu±)HHv@xd>dj;ɣ`DCɡK-!fBAG1iLi:6/b-j~`33)JcXCt3(Hb0#,]	;x8!=f#5E!SNٍ9}^1#5 !`v#/s3n%%={#:1@9s(SCgU@,lKd\SU3X712Vpne.S`a2=͂!{dk2Fz9.ХaO%PȷL#5d@gHzNcpd#:7p)%l9{^23^2l#/Fq[*.IeRPY.s>Şcm]ꮪ]yv$:W.DES1;|8)5sZNcʹ>۠Cndm#5U$53:glf-r%a=MXȵF%F#,q.&gE;-(j;2a!ljofrBgH"-3$(z}&[iu&yŋ]D>͌:?A!=0|xJ""VEږ,KINw]#/f^z(>%.X`**,F"Y*(	BQ^(h\!:.m6#9ãǾ0?Ū?I5}* }zvgk)4ڷճǳ=JHl=-)#,iϠ&jRQd)M"HAHNQlƀ9J\iFFMlZ)r3O:9q۹x.^<,~.T4=('k{r5{Ue\saR|	" %A& s=$O}4#,TfD@7)@;S(hBDwsҥIäyk1EAPpV	Eʀ?A&F71FkpLhcM`|{LȪM~eh:BH#,=fG@	2cSuQhbXXP32[ jFO#,kV[tGɀ+@`@ $E.(A0$'!:aDD$E"DW.)$[u[O.';tUթIlNXk#5iB  LBɑ6SnW,jw^K{"oK)%4[ݼz\175K˻5k.Ά74b>tk&OR*x hD޿32FRbkͫm`\q3K`Z6YEEb?)'Ov+EcBuQCț0JEj+jNIA,У3Z$`8r$RU"qQv Dd"F,Ft#۳UHA1&OӃ_J'e#T0ɮ\;ҒhEd$rHJntBt)%A~,DǮiu.0Z]]mr852/6݃ȓ8A4Ra#5\K!1#/#/8U^!%W/N/us@T{0徨(oɻǌ좍AѳL˗e!ə}g(!EBRuvqܜNrA5OM&t#,(3}D~@BT"j̢,'IחQm94RsfnKc@wxum>ga,eTJ$hdTwi	#/mFEJ$*Z̅*-Նʊ͚*؂N	'	mʓ8l|a2 Ȩ(V#,@[YLopBT`3#/U$̌i(-;#,%X8e:b=sz#/|U_ GFLM67L(sCIFEh6ZEWZ92銯ڶD_n@V@۴Sc	:hg=9ҭAm*]%]%#,ܿ;sD*;6Oۼ<6ޯd͚̪*JekrY+JfœEƵt-q+*+8(n#,@A]}z>v[it.7|^	z*,Ă$N"}v>:ٻW6ځ9!u.$@ 2[p,)Й@e*?K#5)Q`+T:n;N9Xh)Q\X/$&IeTi'T	?<UjRA;7k]$T`g7 eSn">:x1#/o	/(gT{hbn#/bDgdAcDHӹ2l`z<S9tvdLCc̮Cȫ0Ӊb}xa?rلm{O~8k_SD\m0h#/&<Gj+RǬL%hw@HQ'4!q:CKHxޡ4!+)#,[0>ݞaW\0ڂDvvudC!<R'#p>qY:@iŢ6AU#/o{d䀶x$ U 6$cLǬzsE#5PǛ36pBAtŉaDp@oO	" $(⒢T;5<Ҟ1gN\ހ܄#ŏ~RBֈ)eb]VAHz$ #5DHx2#,B1X#,d==vߟsMjX3vN#5QHFO~ms`j#/6#}@d#, 	`|dSdo(ߞ$P8"[PO|RMamC. sgBL̒eZmr#bҤGHJ8,Gt>4g#xVcmֿ[DDL.z `tx~{Ss{.7;g֜<ԲZF[Q0I~1^zT<-`OdΙX۲X-Sdc(:	MrwGuVlZnuc:K=VuAڨFjJ5C!+B1O;#5<>?f×˻щ\^6&3Xi[}^i866`ڎ̄G;8{-75hZ]zэ修Z[[',͵&ff@	J0bc詪&h66mM0xC"o)b/rޙ/f_#,`#3FkkFfiɓX,K/@lgp½v79isj.uCqѤFa" L(8A(2p5S(SMUJ,b1d;v%D%&~ԄȢ)q=ǱCDAF`I=h}j#/PwL!!sDǋ1;-9#,rFT͜ CG糐xM}`z| jFB*)ZP|*o/FGHqB:lN0$=HDg3vkＲwLqd[ 2!}c+v@VMAF6(,O#/ũ)dR%EԳDuKk^/xLj9bԲ!M;KSIyy%l+[ھhjFRȫQ5S b4Z9^PmU{.\^oߛt2D.E#U #E0AuQ- YJCGB!#/>#/'Qtp#,#,r#ɍC C7;i=h%[,9pQ9lGJejĐ3&޵@i߱M+e~+I%KL*ǆ|v[H'$'ӁzSbI"jn]h;ݭo#CT7!Q4#,#/$&HYJnBGA8Xn%(.db$P(a	}h62`4LT5Bކ٣I	<}O*-2<[Yi"mmĄV#,^a_ #/\vHPK#,I:RD#C.#X7`q/Ȣj֙" wbwXD#v;ᶖCdXS449DGC4zwo5mx30ᤆZt6]Od34Q/|r2oD,Hu#/}g#cZ1C%ґ5)$6߀n!4ZʻIe@̝\\6NF¶n$)pjJ~ճr6~~3С׎hPsÅ jʌ4G9(!EUC377nA	/N6AQ]\|B)L\aa{ylj-"	ꄄTe,9[3CH&%V YAU*#,EV$:ĒA̻F$*$,#2\c 3֓=<ͨl3PA50t,-(jىI0̋#,o)MD2lF#55`RWG'V/yeoˋ$;T2.;P O,HȅEDk-6PPrQ'HŴ^S܂}̶IMKue%#/OwQ9o̒$J@9:qi#,,F($/d~F6#poK%EKF	T+ntN"s-qE(Y? B+!)Dl>W}&ϙk2/;I3z߅jwHeSRp0{&q"TI<h+ae"QdAU͋@*ƆCAR fŀ,W6قX4ʶxpi:s79I|a @XN`{gb~]f#/:Dۤ?Է䆘!nP<ƏXwYj'I\AQÅ VѸ4m3d.t$AG@._se})NIzG#kcn9&Rh#~r8.A0@Oq6	 7T1ܿ67 {Qջ-ᦓcE%L@lzv%8F3F*,T(X}&}kMʪ!2n"3P#*J$a;fF@VAꞞyfbTl"$1n>[\QbDBNKQPa0NmjpvTs#n#/~s_{`sp#,*/Z2)Mzw0doO*TW48:%(Xr5gY3Bnc1o|p#/7[sQ!A9.%Zo-wJ,i#5#,U@W@t`?)@M5B2K	'2/ZK@K:E ȍ#54 IT<Fج`h5QiDM(%--HX(bȡlNi#/:sm;/sg+s.dú1s5Lm%jRk}xF4P52q t' 襺A.B舕S1P1Mˇf2:t҃	uiHY_Z##İs%e#/#5KZj-)Kkv1Q9#M1[m0[>pǝh8ٜO&WM8Z\a,a#/ROKl=a<VN-ſI+p5AI$ Fh>k;5y2z/m5Qvbʢ'G0c#,ϗ;4A6e0!4ǥ.ƃ&Ǝ%"n3MI#5iI#/ #5 E4c=[&h&AYb @#5Z}d@쑿ih`^6wnɧU>0G{`H@	GYn#,5ӫMc=&1ƀwNGG"a樌^oq)8?L`OAMgdw!B*B"svYƉl6-oȹunIKmj6Ԅ`EUE$A	#5i#,zȑ|:iC$[X7zЀm TuVzqHD!2@H%2RkHS$̖blZL2d6T!#0)6IJ̑ۦ&Mi4hRYS)#0(#/ID*hR$IIbbQPZ4M(EiKQ(Fe1!QMgz;8,09.ۜX&A~u=Jُf̈x=;p%S*F9.e:y~)W/te#/D!$t2X-q1zMF߅7y9,碓칷[BJG6k˥gd$|>/}!a h\#y,P!p^F#,@9/rcP,SiZMa4L$$,qpx}miTx0QʙL1?bχ	F=D؄}DM!Zť=c;Ե}"DcqC[oZ}>rd/Ft*J^faH1ՋZ1d~杁{?Wݭ۵-ѵcH%#Vi8$imM(#%j7N.""<a$a]-'Jd47fy&9L"$8ӷX;&F|;3O1-\{ 5])v.F7$۫isx:a k2,PL"Lvח+|oxc&qzs#/Q^c.r&ٕrJ>3]{DưAarPOezAiB|J{Lfev^`G$YK#5<@؏#@e?o-t;͔@kb<<c/Ѵ5kr!V iBvW5I5-?mg:eY|:YP첪S||S%Jĩ=~ʎVpj@{% ܬ!ϑЍ3[YY#,7\F0rs'B;mˤ7#5	,>!C $ba#/}CogZIvƤP`M2!FӅ-̭;Z#Xe$|2}?VlfIԆ)ZQWo	a31Mf.2^By51-,.KWZ1fޞ1`9۩LKКB$mJ6tAIΉ>wwws!YL\.iT0R0JtɞOK7?z~#˭;"F`dά#5C0jv cTX~ܷ1Rogr3% LB 2>t#/<;;,7xdC@p5Uƈڜy(a\rmzW2ZBA	Wo0q52vس/uyh ;v[$33u,fwcbRd,vrh L_;l\;Nq#,X(c(He5-1qDW;4Xa&(~]OuێLsx)ns/x.>Y㦫kL:Cؑ26I7=	c-lvۅ%ޓ*oNdΦD@ߙ9;6.n%G=a읿nˇbs'\R]j)XqM<cakCF1#51٢co˄r^b#,-4U#eΆML/|CHPuMA2M]{hH.5&(	 ˕FIŝaIӶ! B,k#/ -z9225qˡKJn4ߢi75\Й<LALDpnٷD]ЎuG4ɬӒ#u7e-\@v_-qWP㞁C,2%hnf?%2F:*/9s$fZyY1ZsE-.#/:Rѣ^mTZicd@d!L6-3˅BshXI9QM#/TȍvunH'{$hCL%}#r&9K}2WQÒ1QrrCxj?6`\35ǎ1n`՚la˥$\]]7*,ZV"ь5bԔxց´Q)hǲ9Mlz)InJVo4cr̘cGqz]VW֯a0C<t4 }R>C#弗q.gx70ln6i¸q-n#ll#/j&(]&M7K}KJRrAa`"m86vcpLc+э\Zsl\#/eS!(BfkKZｴk**)jݔJfGVXnC#B(Bۂi#5'Ks \ ϕ1GQmPrIYM1C8CG2>TP.e[FPaN+img`r5U/V@Cd&^,I53SQv9Ta%38][PJc$d"mKJPTÔ331zCmΕ`LowB\G,A(Y+;tcI7rX<5iaNF:tt46XKe:G #5&$Y<kCEe9ziDSQHn!s(aMd&U2LTB@O6fRTQv(bȰ2P40dzݘphU-`J8T-!jYlY)7P10`aVe6IO$a`J^AX6ҌM	+dLRٲ[,Ա2evgrxVE0`QhcgYfΔ:]֩ZRzLiM+3w-/с!+)e#, 8:Ha	<>V-gnK`lErץ}Ď`G+PP}R9AsI`TiBf9h'Vm#,@  ΆEܝ3#/L3dJ׼сLMmH) #/#H.UV8(|WA]GDXj(L :#,߱ou)&Z7-m^%-OnL6CCۅo4Xn74"/|#-J:?ike$#3 93}hELȆǠpqD`#/AĶ@ǝh۲MQf&GcrVHurU1.I8ɽ0(v)7Fk6&¥$,3HB*و@c8pvxI,afл/Y%z`XFuCTk@ ,׫z6/#5&i`pW5M4f3cm,Oq5#;pd0r\A᭍ʡJ,&0 "B	@BEM )h	RJU#5#/Wx;wV춌M!>cNTzqB#A!!ApV^;U KEj431[>q9"_ADpX[d.Ћih#5tݺR͎Aid-+X#dk`(o [FFK#5Mݧ`b̸;bmMv*|.㩴8KdB$1СU{n:kemi-m&@U P8C#/yPJ,Ъ1:z	E[g?P;q: E]vM+okl%ɦcI]wfsuQmy#mg}Ƨp<Ia7f)ڡ#/^(DpqqpCEq27"د'Uo o3@fL/V7VF@5xD˘d;$H*5^9͒5K(^|PfWـ׆@1bQ1茁S(ֆn	viI#5\oT>g,rHȳ"Q#/F2>Uq B0#/7>Gއa$RQ+F%E-35PhE#/I#,U&aY_hS߷qLC]N*~M˦|}95v	Kى#Mh$FYDҠro!{M@H q:-'e#fu/V*(~RH)#,RZ ;#,v6hSXd&AUh*1"F#tJ4&i#,\%īmXԸD1!pHO<D~ÂQGHĎZ"U00迭J	s53TtĂo|ōGqߗ<e@Mhtr\pҵvMiE+aW<Yz5UF+y7ʍ##5;#5+#bۃM,1E-QBQE>3pL\e&EK1dfwGbv#/]!	Bjl].t$ q.[YD*"Ix,؊(FXB`>d0A	|A$&	?mFƆ~#o]35o]Ȋæ!Ͻk@nmpF_ol==1ɶW3yQKc+Ch laoZ4cXEz:ҙǥVP[M3.)dCa074#53#3fi&;dѱ!6=.٢@.I9`5#/#`keL;CڠҖS3:g"K`	A=:j4Y%v~g3j qv6K:AF%X)r)\d#,T0L1 C#/	9Z$#5YE03#/nh/[棈? RD^NFe ejpH]'fn?Q?TpΠH5$L]YG=#,Z@P)^	d#,NqNU4QUUU#54FH[hbդU~+Ȓ8}ϸdhs#5}#5PO`8:ubrakwG#/dA,q2enjMtuiub;EF1p1\PitR 1;K4yYZ:ݭt &)U pQPYbȅ13ˏ5B"Q(D	еfK-g)\:;X3BQ2qo#"찘J|!ֵ̕+;vՙ{o(Q4,mM/tQ6e)gL}`dCRMN2Jc`Vwvf˗\,,C"(	Ő9xokeAE#,PJ` F2<݈Jte.%qZȹ4R&nĉ@KB҅8Ѕ٦#5:zzٟ55]ݒm[}F.KawsK\fηs]Nh6Wi+rݤů;5;Ow^o5jB-TjCh*i#/#/ii"V#,n^62I	I6V6ԢX1b"C0	fl#/+[IQY$AG?I{%"Й1}`NM.Ģ-"THlob;;L'^aKZYL?yb<@#/NtFǇmz׫=TKy#,UEz,qP	H|{LK8~L/B`BjԂ~#5lBfhZ4XR#/BDd7Qfv[M)a3ߥ}9-X6kP%,jT5\n 3v'ݬJs\mje2+@̐3pzϱk#lr*+xg"DevJ9g끑t/Ѕ(7$tx<Ce<VN؊ ƌ8a}.%d298#,Y,h'B"Pu#/t*SZ|J8wPT }5^WG"BIgb2ŉeAT -Z/WR3XڌDcm2h'uPIUnh2Lkyk\-m#LYM5Q[$]a+Yif1%jږ/{56ԮKnھ;]*b11*UI-nrbIljMc[kdMoԓPՏ<K&Zm,3f5mlF61-*kήwI1B&%m	kxKq`FHNVw+J¹E^>kӡ{ƤkTcEnLRY&mfvc-LԄr(|[[孠޺fҢYiElJK?__&m#|)DgvJJƶrQmo#/ԈY5PH%A@$E5-%&i0jIk)6ͦV̵SE*Kb#EL-0Pl2%I)B2)(5&T5)YJjE(%i6jɵ4,TIYZPlH$e)3jdK61&V"FԔԦ*֥L4MJUK**|ݭMi)*M6mTi*͖cZlZj5jUPCIF9/HpnNoMYHe{20cB'~へ	hY$=!^#/)Du/1_n'=Pk4#5.,=,kg]b٠3mezˣ>2A1`ydE,u}8MCFlt+YEQ(fIQ֚M$DDjXU#/#,;{dkX',5vK60&Ӓv~#,	1"|uE.y!Jӯ2Cst!\\:q1"v_ B*75<D2e@<|.I`Q}UYdQ0-߷3y VI4k0iE(	;(liK3iڈ8LR"sP#fc;8ewC"i1R  @#,#,F-0諺\#/+s@+C	WF׉ŅΆfw=*X"#,lp)GXP8B; *V];1׶Afn?V;vaĺo||CWkDGPpBd#XNpZ#5ٺLuAQWE0YEݣ1QmYH31keIIV~&1(.]zzKw|z4kT}Om3E?#/#[Fj%80nHpYݐ7#/&iV*N#/Gmh-lF6(*#/+~Q5#,~(k0c'1jбbw#,-v~rCJӝh%&lR)ϲ= va7'f#L]jrkCz6I}\DX7U-hu?j5g!lY>0"t^+A#/tySyjzMI!4#o{a^E\^iYO<Fu]иFqWX4沶e͒QW]kcB7kR1qP6M!]"LHeEZP+HڹcZPPRJA7+'+N7HI!X;A5gZX=4GAFM#/P**0f=EdѝhduejC2)BPaAr+0Ld^z.5'[3D#5Gx?!QT9M)hw)_c#PEzqMKCr	UKQ4`L~%cPt#"#,HiTlZŤŊa&B[e՛2Fe$qJL	h#/"#,#lb#5&G*Tch,-: ukQ5;	墬l4QYTQ׶Plv;wy#/cSf<E;bgi-BzْdNRN\XU8Eq: v#/i2v5uS\n8dBDJ(A"	K 1#c|ܴCbެQoC^(;rXB#,N@(:q,$Z.oituqUXq*0᫬a`yْV@Q3T=umSM*	2 Mv|wIKoWg\$n=Z7K7xorWsMS툔nQHcM3 n#LdؖMcB= v.g~Y /]o[WaǫWmius7[RZ+VّQ#)?#M'٘zIƊxwz=X%T	>W<|:xPӷrNA4btGR]Sc#Ng#>n,DB!L8r$JI֥ [JYkmGmȶ+jY>!S@`FeAB*\B#0}ז׃d>ɷ#1@ð3;x]ܩq@"Z#4ŖW_x,Bkd+!ՁE:A#/b`5|ܤ(B1UmrͲ%6W]6M5jX,IkQlh?#,a#,AP"P7!Ba1Na3BUk0+"A0f6Ŀ&/``i4<rS5~E7aK2bjq4#/@!{P6qJ*P*B0XawݟH̬cwe̚'\OU-_b54uRA	#54!8N6zT02囑p6D"V-_y	a7P堩 #AI:,ZA~]<>` `3c0-*m#,AV4Jg?+U4;㺣,7"Iψ>;vI#,%Ch#/;ǑOYyvǺ.uQ!«6FnCw7iD=wyG"T"q#pvv-@Y^F#Kj(hbXTe[1nXo:2 B?PCq#/e؃=_0[=CmVKbRj,muUKji+Z5FŘTD$A%!&#,3=wpAWVJPe$" %#59#:BaXLhcAُw53a	Osarz(	8%cQ:GU,!Hw<1HR**+v<j2_{knft5-J=G6-CxĝEWTTH{q{B0vx "]R33g+!D@̲Vh?a8OQ!70<\sqm{5_*0wMèpK%0#,7HRv:070,5`1Oxܣx|\mYtEB!#5EMʆ2`C+4E*ihQc2X7r{#Egujbvd&	 6oZ$d gzHL)Yizf@KrSclH˪V(#5J4@oYG"UK/Y܈y9M\Iwmj2zd]0m6(56qN*Ѽ""'Ya#r@84=Tw&b7<;v1l(,11-#5H(	˭4#/G&iAЌ?mҟ9V'i8C7'Oj¢le#/Fd(;[\ک,Pġ7'<C!?=0ßFNH4#5ߵO#/0ư"1R˱ZӮ5imkyEy6`mk\[%D(XPj@*IV'iL#,A2#5XzfyE_`A,iQsk4Oa!UDX@IF%rP2E5	ndꮵw{rl1b?$2xO%Im2:͖mFUm4uɬlT]+껵^	WB(E[5Ѧ&+RZd	0HjA-wB~w#/EebL#/#,#HfA$5#,@2fD&DbL&YĜUЊ@Mzpp(>Qhc10*5ÅhmXp[,&#/ǟqM+1y~N,HVRhx;;R#	8J<R6USK^4R~}_=!P6Q&-[T&"`ռSh	1W6s(5&*RVѵ[iWRk%XQ۰-@m߿p;#ivҁEǀ42tJ;yoTU7miЏ6U&$gm(8`qDUa3HzmW"(Q!#&R+YO@a]1Gw'`u$Lq[q%wRh"h)V`m#/dzznh5RȬC	:'tQPnv@s7i5${1#,(20نA #/F%#,>f՚0n(c<1Ыr#,*MTI%F8Y0z$it6uuOb{_zi|N&M~hֈb-"jM$%"m%21֛2hJK?qeR%XQM)i6LKfJƛYM-d։Pj"ZQU-*kU)h5z#/iO?6d"f#cD5$AJ	Zj5kZn[2@$dHbuC~H_ro[W(MԿꄉ˔uV,#/K>av\#,2~:(۰`ܧ.Hw`w0WAhDMzӊ A2=PU*PQ/j[(qXO"<̕mB$!=L=|⪐h"jD98'ݕ2337}&$ziDk*4@<{G#/gA'1#,bjIķXjP3v<䱬N Hw0lḆ\\(Hġk<!pI0Z~g!Gi|@4/Myl&"Nk[FYD0uű[dBdbe^^07sC+_}S	.6i@11f&K>^&m5F~REAN䥂(#bKw>d6kG:htt#,=_݌p2ɼnHcT=1,2&,KQCOun<XPĶ7ߤ)143,ei*MIkqx˯m{VksoC@Ĵsw*=$;:%DTXa2	;h4@')]HCMhzuynBG|:A,\t#5ĊqL%88@!D)iЂRwLA?-rHqטvF1XcPDS`"!#5D($YDNO^4ڨ;@?=n>4T$Y`UD)-SƓ~˼S.(۠XcQq-' ˆAydfe@v`bqLqm]*HJJdݝ-tvw"\++6-Ky7<yrBΥ~I#k,'>͕E\P3HoVLƢ"3wkMm*o#/'Eq8A-H0z ],ӌQU̜<e͟B'0rwdj*yK5^P @3)c޷ԺWRa0;aDȢ߅o}g%.̡TBIn[FRP#[$Y	Ti$kҢf/vAW<rG$bBLCh~Ņ'6A5F#,7Oߝ(F[$&ZJcnB?ja䥅Jk.91-ax}LQ#/fξ@kjGRРٱ]`B@F(iR@HE(f#5w:S tEvoοP1u5鬙kbD(uv9t`	xD$6!UdE:`VAA%ZK\Gep^j<}]j~hu]vxPD^QZJW 6B #,Ƅ6% 1(2*TUF(PH}WCȢP;{kT`SU(^W{1\*&GaW0 n(w##57xnmĬc[p(#5a;@#:/2(_R(Ǧ9Z6IN0JlC*Dh)6L"lsEg6f%YSdWL ƞB]0ȉۭDHٓ/mZhl0#/s`UD7wD01l2{TEO8	pB@u"T#,/-֗77KcI괌#d=^ix=KZ#/'6᭕FsLu8&:h)#,y, *]ZRjZ6eL֨RU["W]ڹ!(`)(Oݸc!<Yhj_Hq#5==ֳVB1NG^u\T[YGAC#:8mNY`/$kR/~Ey'P<ֻf4$'2h8}nl@Q:P#5FQA4'^#51W)1Lŋ=_ ))*l#/r(\4JMfAwYKj>#/ܑcVN}M<M#gz8!2vu#/e;|j`DF`(jDyy#,zOIۀQ`4j{~ۇ^Ȕޅd(NȔtHQ|&4@{R!*܈7,c	!`|VcSWn;><DחnOd`:g3!#T%T@DgD47:͟v ^}r G1+>irC'*YC(9$2idHA-"g7{=ـ/B6.W_E+ Q!yV`dvʗRڝ՞vӽl[zt֯ћSM_uҕĝVxțFFRs$h1j$_b7蒤=?	Ǖhr[F*&k㱐xjV#~HReulLеd#/04孭Io#|Nz>P 4ǖ"R7%C2m﹄G#`#5H_8FHTը,\J	v,nVi6ilUu[7e4\Jm}Rb`@E9q`@:DoU<Գ5ǲ"*45!>MI3lAlcZ<#/rģI-{l>@ kQLUMFa8֬bE,4#/SչW#/6MJ16߸7pl#/_p6h^on,ES`[`<On^e}+"36k-ocۺ9J4SQcmY\рvfc&,$lFǪ˵Koh\1b-nwhg50#/$2#,v>]Զ#5hXUջDA RF~VZ*֏3%Hk)JFl(3TqMP90yEAug#/TC~z,^G"`=<I:~4OZi[9P}gI0IFK#tHdZvζ0\7wn;#/8ȁ lҬ܁p#/\yܽ"03ziK(IRaDVIu}YK=.!<E0'!e)51k3oŐ0?T7܄At&4q`e3bXFML-#/dl߂@rM?27!SѰSXǕ۬R5v|7R~"@;2^|72ȵxQmŶjQ!FҠHP4&0___l'a;H@?U{؎tOqqF(nao3[AD̹"12ā-+|ǚpA̟#,`8!o#$Q[4ƐycP!X20ݡú4_U	Q(O^ԪI(9<B`0P"dvIO!#/[Iԣy3}3B|Fo1=<6}	e֎b<jKB}mJ-7M6$D=gc2mb^>T#/*UJ<d𵊇\n◠"Β6T_- ALh_hGKEAsР@TbJ<ܜ?wu6Qjp|0Y"XP"\ g/.n3%WvҮFmήۮ.+6LƁt&}[jԄrxCuqU:Tcq٫LnOՖr˲cXB/|4צA#/~KqU3!F)ֿ+l9z{Yci+*7shW堗Yk-,$#/[WF(CЃ/KΥ@)h嬧h*KKOf"2|9)xy.R+n-S+1d$0#5;ʖє$Ƅb(pр]=ܥr%A#/ɪi:5SHA "d" 4!ccb]Y=?[#,aAVȥvm}%y+Ys^uvicMwtO&6ͦ4hxyrutwⴥnr{YLQI͕DMPI6lRdj-+v4뻺ܛ3MnEDo<7PU.sQ+zYVThT.#Mg*#IQ٫"e!q]\1pdkuRsatomRQ#54ha#$[+13q]f#,34@k#/7sC!LmqƟSBƩZ|Zmt0G5OyVw6䦄bP2&D"#"kJvmPٌcd@xیiu`Pi-+BH#/[qcFwqf9sb8э.26V6N@ LmZ	ҭY&\YmjC$;O42MOg=h"lCҙ8C&kuxfP<B43zzLbHv\U+#5fCSbXob"<LE-`tޞU%RߞcAG%D4ba%FY/hl"tm03LHh[~IkуC7P؍Kx҃(LY!#/6#XUQm5oPD򆐘vΑYLUeȮ)(tjB,1iǿ{æf(%H?A$`8$CL4&Nll̪JF7tb#5Q&cJ( #5d#5ʖ``1D#/*B1.%I.7qE;wTt;~uyCaꛯ8ň)#/F<>o6M]ҫ!~ԡ{aM dpAlMH?.xS>Cŧ1M|,d50n>03hkľEFo5qIE.8<<4fji4cCU5ٔ.!CF^2nNmEv>a0cc󱱗mi`Q00!OeSiAL]-#%/F	8]T(I8.0ayExѭퟧfpuꛧ<#5Ԥ%qy+ҜcQMBBni<ur>Iłd8Γ#5<0H:@i}᤿5K`S#/$S}aS.=qP@o	"ZKd8("|hUlCHMq2J .Vɼm*6mIZ*K][r׍hifِ§v֒Ml#,BAB2l@PKG;Ȩ)Jkauv`Jl5YpMZҔջ-Zl8P76XjbH2@'%|my3D[kF.>/=e5)ʄ!EV񫩕I?P%X2ض-1YƣTmTͣEE3FVe$RŴ%kfv#5$9 Aﰡ:,֭{{#/&Մky_W|vm#/O:Oͷr]VÁP"#,H@rM*+~&\J[[v"V)O7]&ki)&m&VқVTW[KIQM!6^A~jIJUG&0A  F;JCay8 XEV)!P\7JW#5#/xaN"W]0mhP{5>o>O~#5?^H)AE~֕84}&mf,FE[TlcUcJY 2$hǊnLc,zdǿaCsb-PZR#5(P !gꮤM;:>$Q8du<^wᲩ[5]mY`[hƂQg{42-?⠈#;fu`vHO*Qt?0T!L3KܺnE2-!`yf@<`MmcTm-_}-HGLJ&12g#,KEdχQlՍZ5\յuX1nǝ>pD <0?a?C_XZQA&_yqV0%hBKF@Xͅ؁Pl4$ڶvվ5IQUMoڼ݉ƮJ(DeR{%!a#ZawiZ{ҥclL#5X*id-Y*	fc (T(`4t6L磻\EC2q4b( 1T_IP#/JKpc4a`sqcfL&CsWРqc0Ԗnݚ3@9@zDTQ1#,2vIihqX=nGo7ggHUy78~XC8GG!HC{z:\9pXɟW𶖬1]q{8띩q8(΀TǍPUAv&ɷ䘎YJ蒤HB e#Ixm2#5?Uy,)ji-: [G0Kl@(`-YEl8<WH#^y>;u茒i~6a!gtǅ+Qˮ645A@>AEU&+t\զ[MJ!VwPDw&V3u6\JհfӱF{ͅwٸI	-U#4櫆I<eS^sJjIm+bѠcA[k;uyGK\wn]/xWmveu5UmMO5ړ&i6uY.ݔE+;*Nbc(TEP()qU'p`ٷ׽U[9Q$;-F:E H@SUڣ$GފxH7#,|`HLkݰޚ7zu?GsԛNtXfmQ)$	#5uZ*bp?#,X(g:l*&XEXD0I$OaPB5+uwREEwm>!g#55jLRgAέR&HzM!;H@01B"fou֭mikʟnջl&4:d'@k:dG)R0	L0)A(#5l`|SCX@#/YfU4֦i/#,1۳0VQ#,umlʢԙ`	*`T#0FJRRj0'P"$P prꃎs[S>5\,AL~>47H΄x²gWLlf-mEwc~#,bBO!{?=^"E#,e08g+`_}CyfHC	I4>7z8blfh J兡	#>,-j#6	`j#/$Ւ1W&h8$B(rA#/ڲ0@Ed&1<#5b#NMX;AMX`]Lw淈-GXjW/*ⶫW5Rk;fN={nj0#h~bH$G("c\<.Hk_*-jFi,%!Q*6TbIE#,5AE@w@ALZ`m6]C<HA}~ɨ'bW}$ !A@%(Р7#/|򳱆Ovj)$ 	yDzAD(BE>AX46Y7OmwMf#/bubF(yC?4Y53AgO6zƖlvA[>pZJ*m5FvC$MUtHF0cKOxn]!p#/2Z}G%R,N	2MOBPZLڽϰtvc#5vbz"'/#/gyA 1>FTWlAv	FE"HRD'#,#,C"XS#5`y`~#ި$ BﺌP>du`B#4趿nU	'oBx|WӗJ."5'ᱽ}P9JH(	o#M-6h%w̰:wf79Ӥ*cL@gТ\i`z\^!![$f4XBKLȭ*`&Y4n"Z}_$?/x*ۖ&o#/hHba!d;_/Q}h7"/:x/mۙUT`s6]Y3P{4֚;VBEe0:vr`4#/'8eFjqEb",q#/#+Lm-0fQ2grI !.L;HNUkbf	CǯFsSطR'Kv+`ǔ7={9lGf-2>#ݺxZxnǟSeI|>:lP#5.^)Iz	npLMf	f揇l5^.Jud&#5!3@8)PhȘz#/QO@'1k:#/s>;YZ*ovfaUAݞ@J8EuBscŚ.oAMı @ipn"RVeA`T#p@~K?|v=0	iL$DXݖY`	(4m#5h(>1m#/?9MI#5BHj}_5}J#/~ʭѭnDFFrٚ@7<*Veevvxw$NIY|h"'d<CrX !߈h!2ocnZqpD=ؖad1m" #,O2kp` Sct|]LW	91☖Fqex@?fUa';߼tN*&d8F#/b=uYf:Ux1HI$6]0|XBma3|HMJQ8,W7lƟ	910H%"Da|>_UwH0KU#/+g~Z}/0#/M:14=ه=.<4-Pr<ΜD1mz-jqadmC\j0լ-KT\c#^%#5I<A=Ȑ݂ٌP##,iG5fff\PۘسyF5.&<DD[|k.:#,Ȫ)B'|1#5F#r#$,X1#VpPFT	ؒbcbb3Lw蘴lScm"ea_V6xVݞA*R#,fP,)0Y!$G3<7mWI'tSgPL[՟-?Rh_0/yy"'ѧلT6<>#5jwx<C3hl&W-7Ao@4PCrA)FP%DE!]	O*܆~ҿ׽m		OTۍ@>]`*t[6pbZ`RڡoB7#/]}ٜf <F[CؘUUFa߁`}쥑(- ,HZ}x& B#/"PԳˣt3쵢H";r{~SH«mRQc[eRVjlX*@B,ݲnxR!;#5KDRH(Eݏ4o<dRlI&#/4$ġ%AʚKH"Bʔd)ks`Z#,Ǎ14tGJf:cΞQuu9.*v3#/&Èm1A i%Q:+Wwi#Zt+*qifg,LkzH8 \@ !)IٜB@صYt+t'a@q(#T&@b8Cq\Z.=x:oS,jߎ	gb5<	1wq&Dd$(c_#1QkR34V5	OY;1ZI 4DF@m#/24A#I`mCbHRg~\&g%%J6ĆŲ1p.c6ьV#5Z;nR.r!E%#,8f?#,*@c 3Wn].jw[u{#/'ӚQA<#,B#5#,{ZmU+qؼA Xc)0B?'Y ]5]ѣ<W/#5@Wj2ae(hbltl(\8lM msm-˷qJrHU=y#iGM(Eqd D,DCtFX8#QI_S=Ok{%{M- 6:7&+UKd2mbBXN5R+%"{2d+	316C 	`Rtn(#IB=$y*`ɳco(jz݊f;Pd.ijfyP"eMXum[ #5ds"X,#ˌ25`ښkh1GC7DAj3l3 Yڨ8#/j,őoRflYn(94Tց5#57d.vt<`yᴬf#/j4j#/b#5fE(ȒɦbLMcHB^>hq0X>i	Nm(v$El2[Bf,Di4ND$119#,(`P腤䡬GV:XiǓF}#,cm6&0hT"m#/,)^FJ&{Xg&AkcG6L~cA*u6(&B-#/4cl[n1gM#m>Jash(˰֚btDTѤpEНUHOID6<yp4t=(YeU$9H|m'#,:hF[s(ؘ;0fȈi-*@4!BQ	bJ"4l`^)"4fjܑi%0**Mw-ݛ^M]WbkFQd`!GQ#5?w#,YCBd1#,.&OϺP6$-ِ#,.v~O2E@_3#5#/((B2nH B"ȢDFh, B'A9^H;y{m# BR!KFyh7wRNևuדxŜcn*sjG%⋱tRSRHC)gvRKʉ#/0-2coPDS{n)ZƸK޸k!`6w/h̌G]!I.6Aȿx_N!q;HHD<K'QȉV_z,OVz=	v	S}59T׬Vk=0Uxo>F*;2	yg!"^gUݾt48Y/#/H"L(pDE2%t`Y{OGwR*mTXt\T*#,;5k79O.|`Jٕ[Yì"hFb"TY@hZўS~'c5nZUI'(i(0%$٫o}6rQBT@C!U5AtKQV[OW4m淍_nkžWbW[k5shx;Zɵ!nk`[%B KV#/p^ud5\W,b#HaN@{4T8"|@\Gؙb4c@I#,GĊ #,z@?ˀEKomW$4P!S)J#?q@>%X)ԉn"ȁUEl﵍%٥mw#5tX.BT%pZj-j&ںY$#5jK6V#5vؑDNDQ$VHAT} #,#,tP*'UOFAGB&q #5!zMX=`YH'J^`d:>BbEcdR@l14щ-3DJI2VŶVJU*ũcXf^hik2@ 91ȑ>)pM#/1<1HEd%T5Ah GGX"W#5)`#/eldE1T:UF44D"22*T #,fiL"'k&%Y;7 O®׽^PDAF Bc#5Fևh.*W N0^6shhyKk#/EU)^}#,16۱!77q)2um:;9tM`,#5Y!VF@A1ީ-$<8kbHe.#,m$Fb{]5LrەFU\\ֻ+kA.qY DbVU6dX|?fm8A凔}crB'Ä͸=PnO12R_'v۸ϯo.eu={pliܓ;:7OKt	k/)΅-ۏ[/}E/,L'rB9]tMߊkGWtYA3[5lJڇEyF]!%#,WN-b2ttUuĶCLK7ZXn?v#,:ÙN-Q6<h099{V48=4γ|=vL:8Dwwj%]Nkant{u^9{FǟI?9	~\͕Dl>7ʲ*pD5]NuDTSLEHEmy,[xvvb)WbOdbL(D2Swȴ;KOy7cқcP4с*mWϒq[kwy@co{T<#1܇Q'wb@뾽ʎu~HR*WOv5>#F#5wT'RNrld5<eS]=3gH:&f#|8JjZJv0!uxǘ!̮ZQsQ!8s;È+u5LldR-ߧXRpf(%t&!Hj@"k/N~#ngFpg&ݻArմq6?q䗙%bLn8Y|)بDٺvKxdB3zM,4C^Ro~2_&OOs7}kcvӗ#n8щH˻<|:`D[e1\ʤӱﳷ.u#џ^$U|3H%LGȴ$PԪs,lu;tm_8's]1`ܩGA#5?#v(+t>T=<Ax@2#5Շ&Gc'!c#/Xej#/*ԕ<XG_q4b8;z=A~xHjqD1#/*Βv6)){oxl4gw `sїϕ8ՅLbY-\/ILIU)dm9mRÔ(YJ^X*'$tx%S4!2B2Їsle!Ҋ#+`3\!l29FwPWda!H6}i*ͮ,j]vmH+ndlr-Eg2Pj]At#,)z)(#5F#,B(D[d۫vmĀRF,NH-I @#/3@(OuЁ> 9A%A\=Z?|4G(="LȻC=G/Kߞ<>7p%RhCِLs;IH)Y.$gF\m>Ӝ>OzһP{M9jj?/#/ۿk7UwFe1w16X'#,JķukL9w*Gn|Pz il0;8~kFds$.jS$2*!Sږ3o`b#4@R	8D悚yvvb;8=qIzӾ.ThnAҦq<3G:M^OKp|	9#/5U	#5h*N5Qu}X5EGmae"5#/PA8<WVE6%݃:#8RL$,DkMߏ5Ǣ:>N<Y)HiuzUxӆ#5b%jC1KՈ4Г*fJ#5I:/>)	FToA\p	Sh%V*RXs)fVjrʌ̕|Lvl*C_mPX=;ֈ缹e!M,-7R3u3ey@((̈gPy{ʤjPׂ%:f,ҭ&CcѮd҆#/&B\H֖N,a$߾Mn!: ، ;$7j0~jxdjl#/~T~?"%>=Lo25!*}D*sfҳ1fsWD<=^HQU:@ZXCVFѱDw*I065'm_okV-C0x5EƔtZJF08	D@fޭQAksmͨv<QWխU""jkUzֺze#,rX`0T"((T- S@uN-,neM!BF%_<X[]-HA=1DT%?6LaW?<3_u<r"JPi 	ߥ}7#/7!b?S6mpY2h*6iY)mM`0gVYBLǓA)BEIj#/U.>iGyYUSq"T'+AB`daLbBQVd{&0dUCw6=>rFaFvO9"}(Z]`@U#Dj#2Yj2ZL3^vEޓ')c	!b3+nxK#c7l܁AAlȱ65љIs{)FmbmjZ#/Hj0$_u*qԊw#5Fu(3ƈ)a)pM,(PcfHSK21w̢xpk3	iY.lo!	RƱ@+\ФIR7vmoĨ#/)l41lBM[:J6jje*XaLV1.ۗKG]Ȍ3Ek:@awm	hqi2iq<˵aQٔ~nUJ5bࣄBc9GpF2QU#cDF2#/BRhl;1F%c4-]Fipy+`zWdpTa#jP˲ԣr۰ꠃ? GҦfn*jR-yZzpmW\8@se-:1s[u,-J`qu6i.aZ JF$go$i-2FHFK3*ӌ!^5EIPQo#/:p0G0%2Ȑ۾lDqJs;*ǎ}+?_X~;h4n>ξwz_3+#,B6iJ>X"B*Q)#5UHk2I=(e!eSgy[iT2۳$UUFJ2*{џ/PE+ICcj=¾C^A"qm!JP@AJ&a28b̈́[ՄzluqFN!ݽx5i]tjaQp%-T3=gu2^? ;Q<THQ 6o-A#9(Vk{]LRQa#,XA)k˫RpSEE?A(}$$cPQѭ(F$QRRaV2j٦Z)*-&6fdɥ)HZiRfJmlliR,ԩh5"ɛ02[V1ҿ%މ h/%PyteO\\DsV|aAd<oJ 9TOyTPK4jD6C]2,#/M/X_Pa#5*|Ka\zu/b\#,>ppjUZ#/5G4AoD.F#5v~YzOgM#55n 5/ )"kI}ծ[1)4H)-A_r]jB#5PFR>eπ`'qx!B*Oۘ\3W@d}^j@j" QjxoC]+L"kVRQE4\#/4weٓ$X#,4w$l&1HmM$P*	Xj%%ݛ&czzmF:*KHƑ#55Q#5E#,8'5	6FK^P{7g_y-Fޭ"bTiYDqbفl.g.jR4/	d$1A`Q<,1:5$m|ڬ8tDn`*LCq-"I$PٷdÊgb(HѨ7$ǡi;M#/\W_78ڕ(,/d"B_60 h*sa-n]MA}RЗ0T%|#,p{W(4n%Ԣ[xc%~~>OjI:?SQ*):#se#8ba~X2aWJӭzTZ64.#51B}%s]k^v-ai=v䜭r4i>4"<f׸"5,:㻁;˶Lg&؛>f;}J`8$DW5Oا#/˝E`V@)2g	611}Xwh7!#QT7vuI3>_b7Olbwr>^BIDI(%B(jt큃	}'n,,).D~G~ǭn~MLFBP,+rc`6'^]hl0UqQ$*}_m[x`fo\e#/1IqokB%W*Y5X6Gg|]821w:*DyG7pl9R%T:+\~q5gFԲ40bj"Bl32&#,LfڟZV)l!4vW"ihbE`BFȄTIx6;8Gxk9ɢK7Pe=#,˳RƘȭhRĹ6sLvA8M'&y	DZ(`nQ?i``P̃"7VhͤB[BңS4,UMFY-ms=rkܱQ	dg[YE`ٙNcQW gC	#SAc՛f&3F|N.c(Fu0\;95`.iа;eC&:V3+:)t[C;Β[.59'<XЎ8-TGIAʅ 4IA#5(4Ýo^+ޞFfkqǗSJj9ڛcLhG2AkHqlc`CF8DI"L2C4 xvMBr4"jDβb|ErEbݍc,n#/3AkP-AwFHJKy|2<ht:]#"|͔@4'vdX܏MנarlTew.)z[#594SZ_CJDDP҉,R;a;CCݐ[y&LLsuIf?soYJđq4f@o܌0>LÙSs\Iu`B2 #/H%@ڙju>r+RfCe2g=mtyBCi	fE2#,7	@杯̇jXH8΍.Q0tWF;btcir8M(e#?h0._҃̖57Ha< $t3Slti#,sUP& mN5:[V-Pd+к0psW).(Ki5fP`dYc0;1 \Zg;0SC#,ʩ&;X){(zphKbK&2_6S9`ʌwLx51X0͓~G36x4~F(ky%\}GGѼ_kp9kIXOb\8WL3fGxıuړ#5tښbo["l]D!*~ƹȴ7NP٨]<n7Z zbd׎(102lU7^*X)tfH -1la@1GYv",;CɏZҾR41~X0*ƻ#Ff;&ld#/3Jv2/5ʷF*VDtCH>4[	u,w1`GBmXcyӌ0fE4QHPz!hEAFH"PMO6;S]-2m)\g`unsEv#D"	3Q4"6#/K2DbHbj0Iz#/UO/wHRYu,DJb(Ů#,1a"/eHڂhC3biRCiQ	pabb_B֊*EsI`dl!LZ6؈X&݄<B9J(vTPa#5N5P>z}'яuF	TTEAGnP]f^=`*;EHH) 5#,E~[ײUAs}<Rt!h}Yn#/1DI6C{PUɭd68FﴐMF4ceTdza1MǰQJ(KnZrWO2"H값t֩M7w#sLhR*Q~%Ɂ&He_fơgR"V(nވbm.N柩+5)ʂb}"97METa%{6Iz;x),l._-(Pb⊉`WΌx#Dptr9_MC#,O)1q|:@>*&ɸU$_.h"%Q v@PO.M31<+"ƒbP28dTLc`4kxKbT[A!	d A5%TABJJ :#, >l|si(A:nKwLCdd&`R, N{ӳ|B|&>~Fp)~嚈Ά3FPp	RKs1VDD 9Y~И]caS&J%u'CAMM	iLx)A!H"Cɩ#,0BX<C0m#i#/SuxYz~W&B.Yanp.=qvBtE9"%ksf({AH?[^6ER_ilUH6d5ҌҸ<OE"E IF^dI'W-G*BZ(РK""8[(AK$Aqb#5bA^U	lN0ȟ}jmۼ#/UL}m,1+\u01}*f*}3~`P$A	#,RE#,22{Nt_O~l&D)萃F&@M6Ee̩T(Gjm9Z]$EuK.Ռ.)@#5ȡ8	o$#/#5b&B!%uPNd;O_vDbLgӁ:·jGe:zF<5@;:6NEAR!e w˾!Z~N*}f,ŹmOUS/VKh/|tS3;gEe#,#z4Y8?M%N,i!ʅ_#=\lHmc]sF"3+LmPs,ǍH\h~JubB=ܧPvb~1UrM7=.I}폧.Q?F)dxܼ"D "$Yј"JPkljE+J5m])5k]#/ݨyy#/;Wro=7O]zY > ؂lHa>6LNpN=AU7#5h|>#,t"qvl"HjTv#5d:cDA\r,#/r}MB~e0a##K5N"i1XY:Ed<饤CM"!,Fهa4}C;PC-`k9NP+Z-sN ;	÷gl۔I6j*,YphYh[QU#,E%	6آj21pA-a]Z06pMNNJJRS,s#,&àN|P#,:v`R)eZҠA!	.d|yl C7Y0ӮepLC8P$ E`AAU=|M#Ɖa-@!R.B6#,Rj#5~'$ceY>QŜ+4Stx_Rk	߅?ɨ|>>o*̌>k,"{M3Ah'ĖoN憨m4kʫ@(#,$HE*oh侒 ZDbl *|d,)_vX.bv-$HL\VaI)"th5x^5^o+|MET"6uۨ	&KQDQ底66@J*p$lO_wy$@!9@eDM"!5H#,ok",H1FItI܂HKJ$*ehYfKfm_c}W)TCQ4e,ҐIOEP|f7@,)I#,Oc_T6bldMڊ*eF{j@B	{(#,D"D-A5uwI⯐A5Cxt{Ġ"WDLp1$Ǌ3)ST<j.#^?ֽPV$w{>½`Ϟf)B%A{iq2	F1MCXSyL@A|Am6$ɭR)6t)sV7T"J=Z`JH(HeXOnKݨZ}	@xR<T-iH؜4#:أ"HhxBVlL?,g.[6oYhD x`n}:(52&RESE)(*"2UBȭm5#5-JᕳQ|dK,'2nD*QE1cGh5*`'\p]%nȂdCDZPi!$`'VXjc>W69>Zؖ0l(Cmw_~C+CaXe-#"T44x d`;:`&lkrܒ}}*+|˱\ڍZ[[ƣErG6#Qd8$-#,,&OQϢIu#r"ĺ33AZMM (phX}tf]JC`aP%LipCq5u]a%AB0Xskn^o*IbݚUҦԡ{V+*TQvך+A#,Ac)H&5h`[R4fZnNERDBNεm!XK=ۗૂYgUf48/1aU3qyjI벩"/PXL*&J8z0lcM=#/fB("y%!^K BA"5#/:8$Q;6_c MZ׎_k|iinۦJ	-~?Prg<h_cBQQ0mT#/(PD>r8_`L9`~٤q<EbHX(MˉKV#5v94k%PmLzl"F\HbqKM|hͤpdLT=Ic0d(RCJ'#g1#^3!<2z?2P?>ʿDB6 ʇryc;ݦ"jIb8h#ߎ'\:-i#,e#CaU݁hz:9(dj2*&5趙m߶F[v3äB4Db'RmI*B#BC_`N"Rº#,m2ha/b"fg;Q۬;h-O5zwhi∤A c+qz)\ X7 ut %)`a<z*~L]74̺DSo\-ba.g__~Ͷ^7?_}~<W<n?Y{>_χ~O787v]b"jy65M\?9J<BU!pE!#ZWnwi|y$1y2IRCl`ݐG(Ay4!z#,63]ꥂ?ߞi\pxqF_TK,5()A@|n&8t00QaS<S̍x/?yz6QmI I'eI?@Iqieq&!3"2*rg{0Bܔ&QFi4).Y/$1UjU2D)(pqX0+ANL1#/(=8C(hkTmѤEpq1ZᖰFHC#/eV#/(kĲi%KK#/(R͎o'?&#/~]13.bV.ȜƲ5(^r#%sVoUyI9ovy#h1	#e۳5c+KMoX`9$C#/VB<)a׻F6.׷*Ř/S8`y3DEa	銐Hs#1X͡&Hc|E!Q{ŐP~2 E$yJ'\3Z#,1- 	bfiX(/a狸1giZ##R^<S	 J%BATZʶJkLC`]#,2ʀqS#,?@2?&<*(y-'3(%T@b(yCGU?ꑌyN`54%2gFc!t#5dxttt,TG3	#5%so0{Bdk:uNV*K~x=%ȼ=ͩpc]*Se`nL2\as.#^ٲ>,7tQy>*m4ؚ=({.eoD'4TCVzID%%-Wnmk^}IQTZDh#/1(мfӬ"5a+O(~^ K?ďKi	@r19Nac#56K*%*I}0$&Pk##=#5'e".hpH!!7EqFO$v'zj*bECkf˛%jFjro%Wؽh53_Zȣh#,wւw!=~({f80m֟x;.x#/gȤ?EBZv#/l'<U6U']ŨS#/J>{pWi.#/ZXw솯S#l1<yv֏?'*	@c\(ks96(hiBos#,g=ə&Y	TJ^A/\B:H>zev񉒩~yAS>ӶVJszKpYk#DZ!^G,$	}YOu68'L*ϫϣo3͏~WՑRs;jb/5Y_V7|{~.p ڋ
 #<==
-#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1\n\niQIcBAABCgAGBQJVmXvNAAoJEGelZe39+Q5kQQ0P/1Y3Bf/S8UW8KRHtVF7SFxE2\nvNg1CXzdnNV/feNB5HFzpMOuL6weIUjNSac8MfBigWOvb6Rnm+Y8o1yXO4g26qxd\n716qYWmiQQmz4lzylr8grMJwhwP2BO/UE7ksKQn1LzaW8FH8x/3RoWE7HnESVxri\n2Nt8UY7WwTwVXiSvQEC08kHr5EXpBIBjlIr6Zw5jTb0S+hBL1G/J8xq/It2omSwX\nFZNBmUpL++Vgp3Wb+gww3AyjTu58PdSrJPeJWP6Aq6Nf3HMJ50LF1URh79oj4uWF\nZJ2DM0peUye9M8zZs//nQqx9RLQG6+pWnfqMqKd7T91WnzsKAf/sy64QRCUEk6i3\n5y+YLt/VlKl/m9TKWr5W2HpL3+ODDBEoeUQZCTB/9uprtYM9pIMCilqiwdK1DI+o\njwrg1OxmV3ToP1BnYXtfsEp0Q84oaw+Qc2+bK94VkkRX4Efwy7zbxdMxi7JalqF7\nIiI4/GussYVyGJiRnOBRYE4bza5us47ojFKNSwlwn9H3a1VywptuNB76MXhD7AYA\nvQKrG7jyryBTpjFteQPMA5C7qnqMgXf49KAo10cZtBWFlSFUnhvodPS6aIEKeM1F\nHKMWp670D2KcWw7h5UYZtZOUZCbNFjWSHfgmyiq5X5xRwE1zv+FkXEwCqp9J8REA\nnxZmf3PQ/TH6TYLOAkQf\n=jBY5\n-----END PGP SIGNATURE-----\n
+#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2\n\niQIcBAABCgAGBQJWpU3oAAoJEGelZe39+Q5kv04P/iyvALGAg2Z8oICEDjFkEXWW\nh2CMGLItAhqb3xNeV8WUMMpY4MbRRpN6cU/SPmt+as4oVn2pozca93eWD7yOxukK\n10seOyLTBamS0Wf+BNr6jYXZRQ2N7inc2p6AD75pMOFSg2HeIeQJ0aUIAxNeeojZ\nmUiLYMdtcrF1Kh7KWZAkYSbIAEjJeobLqk2oY7UyqKcODc4RtZJV1InnO4DItEWD\nnd3F5kkVMw4pwYAXaikmCXYBKHXdF5w82KxqEjrAWSoULipX0BVCsSbQ2L0UOs5h\nKXUS4M7AaYKyCcO17E7CnVXaW+vOVyGEECxtSaExWgK5MvYHIGE1OFvb12PkUvUY\nc7CiBxk6X5eZkPyxgxDj20r8zNQVGZ8jDI8Wg08yTAl8+09qCtkE8gGMdNeHYwX8\n2xDH+A3+19022ZZdyO2t5+2AzU6Kkl1qTPKaXJWFRtr8ApD45Y4D3/GAsTNqdOMi\nWeh1XvqQdHjm9rEoJX8aBXShzCMCNhmZalbUhrdzQY6/hnl0PqnlPtyvtkjCvWoF\nXLF6q8YV/ZtqCc36vePZ6lpUQB6FG3g6fhMGraT2VOmT3TROcG17pqIz5y9+85xy\nVSaDc82uHlyzIsZ7vuhV6d9x4yXnFkjMAogCJv6mitFbQsd+LtXYkU+2Zq6wOoEp\ndLLfK0Km4Vs9FYAUbuUi\n=7D7V\n-----END PGP SIGNATURE-----\n
diff -Naur ns-3.24.1/waf-tools/cflags.py ns-3.25/waf-tools/cflags.py
--- ns-3.24.1/waf-tools/cflags.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/waf-tools/cflags.py	2016-03-23 21:36:53.000000000 -0700
@@ -152,11 +152,13 @@
 		       help=("Specify the build profile.  "
 			     "Build profiles control the default compilation flags"
 			     " used for C/C++ programs, if CCFLAGS/CXXFLAGS are not"
-			     " set set in the environment. [Allowed Values: %s]"
+			     " set in the environment. [Allowed Values: %s]"
 			     % ", ".join([repr(p) for p in list(profiles.keys())])),
 		       choices=list(profiles.keys()),
 		       dest='build_profile')
-
+	opt.add_option('--check-profile',
+		       help=('print out current build profile'),
+		       default=False, dest='check_profile', action="store_true")
 def configure(conf):
 	cc = conf.env['COMPILER_CC'] or None
 	cxx = conf.env['COMPILER_CXX'] or None
diff -Naur ns-3.24.1/wscript ns-3.25/wscript
--- ns-3.24.1/wscript	2015-09-24 17:56:45.000000000 -0700
+++ ns-3.25/wscript	2016-03-23 21:36:53.000000000 -0700
@@ -546,6 +546,14 @@
                                  conf.env['ENABLE_GSL'],
                                  "GSL not found")
 
+    conf.find_program('libgcrypt-config', var='LIBGCRYPT_CONFIG', msg="python-config", mandatory=False)
+    if env.LIBGCRYPT_CONFIG:
+        conf.check_cfg(path=env.LIBGCRYPT_CONFIG, msg="Checking for libgcrypt", args='--cflags --libs', package='',
+                                     define_name="HAVE_CRYPTO", global_define=True, uselib_store='GCRYPT', mandatory=False)
+    conf.report_optional_feature("libgcrypt", "Gcrypt library",
+                                 conf.env.HAVE_GCRYPT, "libgcrypt not found: you can use libgcrypt-config to find its location.")
+
+
     # for compiling C code, copy over the CXX* flags
     conf.env.append_value('CCFLAGS', conf.env['CXXFLAGS'])
 
@@ -740,6 +748,11 @@
 def build(bld):
     env = bld.env
 
+    if Options.options.check_profile:
+        print("Build profile: %s" % Options.options.build_profile)
+        raise SystemExit(0)
+        return
+
     # If --enabled-modules option was given, then print a warning
     # message and exit this function.
     if Options.options.enable_modules:
diff -Naur ns-3.24.1/wutils.py ns-3.25/wutils.py
--- ns-3.24.1/wutils.py	2015-09-23 12:28:42.000000000 -0700
+++ ns-3.25/wutils.py	2016-03-23 21:36:53.000000000 -0700
@@ -115,10 +115,13 @@
             raise WafError("Options --command-template and --valgrind are conflicting")
         if not env['VALGRIND']:
             raise WafError("valgrind is not installed")
-        argv = [env['VALGRIND'], "--leak-check=full", "--show-reachable=yes", "--error-exitcode=1"] + argv
+        # Use the first program found in the env['VALGRIND'] list
+        argv = [env['VALGRIND'][0], "--leak-check=full", "--show-reachable=yes", "--error-exitcode=1"] + argv
         proc = subprocess.Popen(argv, env=proc_env, cwd=cwd, stderr=subprocess.PIPE)
+        stderrdata = proc.communicate()[1]
+        stderrdata = stderrdata.decode('utf-8')
         error = False
-        for line in proc.stderr:
+        for line in stderrdata:
             sys.stderr.write(line)
             if "== LEAK SUMMARY" in line:
                 error = True
